Fryshuset Gamer Forum
Vill du reagera på det här meddelandet? Registrera dig för forumet med några klick eller logga in för att fortsätta.


Fryshuset Forum
 
HemHem  SökSök  Bli medlemBli medlem  Logga inLogga in  

 

 Uppg4 – Arv

Gå ner 
FörfattareMeddelande
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 2:27 am

Förlåt att det tagit så lång tid att läga upp detta exempel. Det enda jag kan säga är att mycket har rört sig i mitt huvud på sista tiden.

Som vanligt vill jag inte att ni bara kopierar min kod rakt upp och ned. Försök sätta er in i koden och förstå hur den är uppbyggd. Inlämningar som ser ruskigt likt min kod ut kommer att behöva extra genomgång muntligt.

Jag tipsar även igen om att plocka in min kod i ett annat program som kan highlighta koden bättre. (tex. notepad++ eller CodeBlocks)

Lycka till!


...
oh ... btw. Jag har lagt in ett litet fel. Den som hittar det först vinner! .. err.. bara äran är jag rädd. Razz


Senast ändrad av Johan den ons sep 24, 2008 2:43 am, ändrad totalt 2 gånger
Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 2:28 am

Kod:

http://Character.h
//-----------------

#pragma once //Underlättar kompileringen

//Includes
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <string>

using namespace std;

//Basklassen Character
//Klasserna Mob,Player och NPC ärver från Character.
//Man kan säga att Mob,Player och NPC är barnklasser och att Character är dess Förälderklass.
//Man kan också säga att Mob,Player och NPC "är" Characters.
class Character{
protected:
   string name; //Alla characters har ett namn
public:
   Character(){name = "Unnamed";} //Förälderklasser kan ha konstruktorer. Men ifall barnklasserna också har det kommer den att bli överskriven.
   void setName(string n){name=n;} //Typisk set-metod
   string getName(void){return name;} //Typisk get-metod
};

Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 2:29 am

Kod:

http://Fighter.h
//-----------

#pragma once //Underlättar kompileringen

//Includes
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <string>

//Egna includes
#include "Character.h"
#include "globals.h"

using namespace std;

//Basklassen Figher
//Klasserna Mob och Player ärver från Fighter.
//Man kan säga att Mob och Player är barnklasser att Fighter är dess Förälderklass.
//Man kan också säga att Mob och Player "är" Fighters.
class Fighter{
protected:
   int hp; //health points

public:
   //Alla barnklasser använder redan konstruktor från föräldern Character.
   //Fighter(void){} //(bortkommenterat).. Alltså, ingen konstruktor här.
   
   void setHp(int p){hp=p;} //Typisk set-metod
   int getHp(void){return hp;} //Typisk get-metod

   //Låter Fightern attackera en annan specifierad Fighter
   void attack(Fighter* enemy){
      int damage = dice(1,500); //Slumpa fram skada
      int newHp = enemy->getHp()-damage; //Räkna ut fiendens nya hp
      enemy->setHp(newHp); //Sätt fiendens nya hp.
   }
};

Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 2:30 am

Kod:

http://Mob.h
//---------

#pragma once //Underlättar kompileringen

//Includes
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <string>

//Egna includes
#include "Character.h"
#include "Fighter.h"
#include "globals.h"

using namespace std;

//Klassen Mob ärver från både Character OCH Fighter.
//Man kan säga att Mob är en barnklass och Character och Fighter är dess Förälderklasser.
//Man kan också säga att Mob "är" en Character och "är" samtidigt en Fighter.
class Mob : public Character, public Fighter{
public:
   Mob(void){hp = dice(100,2000);} //Har en egen konstruktor som skriver över Characters konstruktor.
}

Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 2:35 am

Kod:

http://NPC.h
//--------

#pragma once //Underlättar kompileringen

//Includes
#include <iostream>
#include <string>
#include <conio.h>
#include <windows.h>

//Egna includes
#include "Character.h"

using namespace std;

//Klassen NPC ärver från Character.
//Man kan säga att NPC är en barnklass och Character Förälderklass.
//Man kan också säga att NPC "är" en Character.
class NPC : public Character{
private:
   string quest;
public:   
   
   NPC(void){name = "Unnamed NPC"; quest = "No quest";} //Har en egen konstruktor som skriver över Characters konstruktor.
   string getQuest(void){return quest;} //Typisk get-metod
   void setQuest(string q){quest=q;} //Typisk set-metod
};
Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 2:36 am

Kod:

http://Player.h
//----------

#pragma once //Underlättar kompileringen.

//Includes
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <string>

//Egna includes
#include "Character.h"
#include "Fighter.h"
#include "globals.h"
#include "NPC.h"

using namespace std;

//Klassen Player ärver från både Character OCH Fighter.
//Man kan säga att Player är en barnklass och Character och Fighter är dess Förälderklasser.
//Man kan också säga att Player "är" en Character och "är" samtidigt en Fighter.
class Player : public Character, public Fighter{
private:
   static const int maxQuests = 3; //staic const int är går inte att ändra.
                           //Håller reda på hur många quests man kan ha.
   string questLog[maxQuests];      //Qustloggen är lika stor som maxQuests.
public:
   Player(void); //Har en egen konstruktor som skriver över Characters konstruktor.

   string getQuest(int questNr); //Vanlig Get-metod
   void receiveQuest(NPC* questGiver); //Ta emot ett quest från en npc
   void deleteQuest(int questNr); //Tar bort ett specifierat quest
   void printQuestList(void); //Skriver ut questloggen på skärmen
};

Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 2:38 am

Jag återanvänder globals.h från förra uppgiften .. den var behändig.
Kod:

http://globals.h
//-----------

//ifndef och define gör det lättare att kompilera projektet om man har fler includes av denna fil
#ifndef GLOBALS_H_INCLUDED
#define GLOBALS_H_INCLUDED

//Includes
#include <time.h>

//Om man skapar en onämnd namespace såhär, så kan man använda globala funktioner i alla andra filer som inkluderar "globals.h"
namespace{

   //Tärningsfunktionen. Returnerar en framslumpad siffra mellan min- och max-värdet.
   int dice(int min, int max){      
      int diceVal = rand() % (max - min +1) + min;
      return diceVal;
   }
}

#endif //#ifndef GLOBALS_H_INCLUDED
Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 2:39 am

Kod:

http://Player.cpp
//-------------

//Includes
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <string>

//Egna includes
#include "Player.h"
#include "NPC.h"

using namespace std;

//Konstruktor
Player::Player(void){
   name= "Unnamed one";
   hp = dice(1000,4000);
   
   //Nollställ questlog
   for (int i=0;i<maxQuests;i++){
      questLog[i]="";
   }
}

//GET-metod
string Player::getQuest(int questNr){
   return questLog[questNr];
}

//Ta emot ett quest från en npc
void Player::receiveQuest(NPC* questGiver){
   int j=0;
   //Loopa igenom questLog
   for (int i=0;i<maxQuests;i++){
      //Om en plats finns ledigt: Lägg dit npc's quest
      if (questLog[i]=="" || questLog[i]!=questGiver->getQuest()){
         cout << "\nReceiving quest from " << questGiver->getName() <<endl;
         questLog[i]=questGiver->getQuest();
         break;
      }else{
         j++;
      }
   }
   //Om j==maxQuests har inget quest blivit ditlagt: Logen är redan full.
   if (j==maxQuests){
      cout << "Quest log is full.\n";
   }
}

//Tar bort ett specifierat quest
void Player::deleteQuest(int questNr){
   questLog[questNr]="";
}

//Skriver ut questloggen på skärmen
void Player::printQuestList(void){
   cout << "\nQuest Log:\n";
   for (int i=0;i<maxQuests;i++){
      cout << "Quest " << i << ": " << questLog[i] <<endl;
   }
}
Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 2:42 am

Sist men inte minst...
Kod:

http://main.h
//----------

//Includes
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <string>
#include <time.h>

//Egna includes
#include "globals.h"
#include "Character.h"
#include "Fighter.h"
#include "Player.h"
#include "Mob.h"
#include "NPC.h"

using namespace std;

//MAIN
//-------------
int main(){

   srand((unsigned)time(NULL)); //Hämta en seed från klockan så att dice() funkar som den ska.

   //Skapa alla objekt
   Player me;
   Mob mob[3];
   NPC npc[3];
   
   //Sätt värdena på alla
   me.setName("Me: Apanpapan");
   mob[0].setName("Mob1: Stinking Zombie");
   mob[1].setName("Mob2: Rusty Robot");
   mob[2].setName("Mob3: Random Critter");
   npc[0].setName("NPC1: Agatha");
   npc[0].setQuest("Go buy some milk.");
   npc[1].setName("NPC2: Gustaf");
   npc[1].setQuest("Compile and debug a house code.");
   npc[2].setName("NPC3: Sara");
   npc[2].setQuest("Save me from the monsters.");

   
   //Skriv ut dem på skärmen
   cout << me.getName() <<" (hp: "<<me.getHp()<<")"<< "\n\n";
   for(int i=0 ; i<3; i++){
      cout << mob[i].getName()<<" (hp: "<<mob[i].getHp()<<")"<<endl;
   }
   cout << endl;
   for(int i=0 ; i<3 ; i++){
      cout << npc[i].getName()<<" (quest: "<<npc[i].getQuest()<<")"<<endl;
   }

   //Få ett quest från en NPC.
   int randNr= dice(0,2); //Slumpa fram ett tal 0-2
   me.receiveQuest(&npc[randNr]); //skickar med den utvalda NPC's minnesadress som argument.
   me.printQuestList(); //Skriver ut questLog på skärm
   
   //Attackera en Mob
   randNr= dice(0,2);
   cout << "\nAttacking "<<mob[randNr].getName()<<".\n";
   me.attack(&mob[randNr]); //skickar med den utvalda Mobens minnesadress som argument.
   cout << mob[randNr].getName()<<"'s hp: "<<mob[randNr].getHp()<<endl;
   
   //Bli attackerad av en Mob.
   randNr= dice(0,2);
   cout << "\nGetting attacked by "<<mob[randNr].getName()<<".\n";
   mob[randNr].attack(&me); //skickar med Playerns minnesadress som argument.
   cout << "My hp: "<<me.getHp()<<endl;

   
   getch();
   return 0;
}
Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
eliasandersen



Antal inlägg : 5
Registreringsdatum : 08-09-01
Ålder : 29

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 1:25 pm

du har missat ett semikolon i slutet av mob klassen
Till överst på sidan Gå ner
Cloudia

Cloudia

Antal inlägg : 93
Registreringsdatum : 08-08-29
Ålder : 32
Ort : Tyresö -> Evigheten!

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 3:07 pm

Someone did their homework... Shocked

_________________
1f y00 c4n r34d 7h15 y00 r3411y n33d 70 g37 141d... -.-'
Till överst på sidan Gå ner
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons sep 24, 2008 11:11 pm

eliasandersen vinner äran! Smile
Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
mjaoo



Antal inlägg : 27
Registreringsdatum : 08-09-06
Ort : Mjau?

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimesön sep 28, 2008 6:29 pm

NOTERA MÄNNISKOR.

Du kan inte använda ett pekarobjekt som kallar på en pekarfunktion, te x
void kaka(npc * ätfisk) ngt whatevah.

findus->kaka(&misse) = FEL
findus.kaka(&misse) = RÄTT Smile

Om du kör med en pekare(din gubbe som e pekare elr ngt) så pekar den dubbelt och du får ett felmeddelande!

så kör utan pekare helst om du har pekarfunktioner.
Det lärde jag mej idag iaf ^^
Till överst på sidan Gå ner
HenkaN

HenkaN

Antal inlägg : 42
Registreringsdatum : 08-09-03
Ålder : 29
Ort : Mälarhöjden

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimemån sep 29, 2008 11:40 am

Tror nog att det ska vara main.cpp istället för main.h
Till överst på sidan Gå ner
http://www.youfail.org/
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons okt 01, 2008 1:24 am

Stämmer HenkaN. Det ska vara main.cpp. Inte main.h. Du har hittat ett fel som jag inte lagt dit med flit Smile .. äran går även till dig.
Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
Becca



Antal inlägg : 10
Registreringsdatum : 08-09-01

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimemån okt 06, 2008 12:40 pm

BUGG!

i recieveQuest-funktionen i Player.cpp finns den här if satsen:
for (int i=0;i<maxQuests;i++){
if (questLog[i] == "" || questLog[i] != questGiver->getQuest()){
(...)
}
}


Ta ett exempel att du först får en quest från npc[0].
i =0
questLog[0] = ""
Då kommer platsen questLog[0] = npc[0]->getQuest()

När du sedan får en quest av npc[1]:
kommer questlog[0] fortfarande vara questen du fick från npc[0], och eftersom questlog[0] != den nya questgiverns quest kommer den första questen skrivas över av den andra questen.

Så här har jag skrivit istället:

Kod:
void Player::recieveQuest(NPC* questGiver){
    int j = 0
    //loopar igenom questloggen
    for (int i=0;i<maxQuests;i++){
        //om det finns plats i plats 1 i questloggen eller questen på den platsen inte är
        if (questLog[i] == ""){
          cout << "\n Recieving quest from " << questGiver->getName() << endl;
          questLog[i] = questGiver->getQuest();
          break;         
        }//if-satsen
        else if(questLog[i] == questGiver->getQuest()){
            cout << "\n You already have this quest." << endl;
            break;
        }
        else{//om platsen var full, ökas j(antalet quests i questloggen) med 1
          j++;
        }//else-satsen
    }//forloopen
}//recievequest
Till överst på sidan Gå ner
Becca



Antal inlägg : 10
Registreringsdatum : 08-09-01

Uppg4 – Arv Empty
InläggRubrik: Compile Error   Uppg4 – Arv I_icon_minitimemån okt 06, 2008 9:21 pm

Jag får ett väldigt konstigt kompileringsfel i min arvskod, det står så här:

Fil(som den skapade själv):C:\Program\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\basic_string.h

Line: 2313

Message: note: candidates are: std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]|

Någon som kan komma på vad det kan vara?
Till överst på sidan Gå ner
Becca



Antal inlägg : 10
Registreringsdatum : 08-09-01

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons okt 08, 2008 10:45 am

Felet var att jag inte hade skrivit getline funktioner korrekt.

P.s. om du har blandat getline och vanliga cin när du vill ha in en string, så kommer den att loopa två gånger. Använd endast getline istället, då du kan ta in hela meningar.

getline(cin, variabel);
Till överst på sidan Gå ner
Johan



Antal inlägg : 47
Registreringsdatum : 08-09-03

Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitimeons okt 08, 2008 3:23 pm

Bra jobbat!

Detta här är en typisk bugg. Min recieveQuest –funktion är inte riktigt bra. Ifall man får ett quest från samma questgivare fler gånger så kommer questet ändå att skrivas dit till loggen i alla fall.

Din kod fungerar bättre. Very Happy

Äran går även till Becca! cheers
Till överst på sidan Gå ner
http://www.cplusplus.com/doc/tutorial/
Sponsored content




Uppg4 – Arv Empty
InläggRubrik: Sv: Uppg4 – Arv   Uppg4 – Arv I_icon_minitime

Till överst på sidan Gå ner
 
Uppg4 – Arv
Till överst på sidan 
Sida 1 av 1

Behörigheter i detta forum:Du kan inte svara på inlägg i det här forumet
Fryshuset Gamer Forum :: Programmering :: Koder-
Hoppa till: