Fryshuset Forum
IndexIndex  ­Vanliga frågorVanliga frågor  ­SökSök  ­MedlemslistaMedlemslista  ­AnvändargrupperAnvändargrupper  ­Bli medlemBli medlem  ­Logga inLogga in  
Skapa nytt ämne   Svara på ämnetShare | 
 

 Uppg4 – Arv

Föregående ämne Nästa ämne Go down 
Gå till sida : 1, 2  Next
FörfattareMeddelande
Johan



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Uppg4 – Arv   ons sep 24, 2008 1: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 1:43 am, ändrad totalt 2 gånger
Till överst på sidan Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Re: Uppg4 – Arv   ons sep 24, 2008 1:28 am

Kod:

//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 Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Re: Uppg4 – Arv   ons sep 24, 2008 1:29 am

Kod:

//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 Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Re: Uppg4 – Arv   ons sep 24, 2008 1:30 am

Kod:

//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 Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Re: Uppg4 – Arv   ons sep 24, 2008 1:35 am

Kod:

//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 Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Re: Uppg4 – Arv   ons sep 24, 2008 1:36 am

Kod:

//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 Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Re: Uppg4 – Arv   ons sep 24, 2008 1:38 am

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

//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 Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Re: Uppg4 – Arv   ons sep 24, 2008 1:39 am

Kod:

//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 Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
Johan



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Re: Uppg4 – Arv   ons sep 24, 2008 1:42 am

Sist men inte minst...
Kod:

//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 Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
eliasandersen



Antal inlägg: 5
Join date: 08-09-01
Age: 18

InläggRubrik: Re: Uppg4 – Arv   ons sep 24, 2008 12:25 pm

du har missat ett semikolon i slutet av mob klassen
Till överst på sidan Go down
Användarens profil
Cloudia



Antal inlägg: 93
Join date: 08-08-29
Age: 20
Ort: Tyresö -> Evigheten!

InläggRubrik: Re: Uppg4 – Arv   ons sep 24, 2008 2:07 pm

Someone did their homework... Shocked

_________________
1f y00 c4n r34d 7h15 y00 r3411y n33d 70 g37 141d... -.-'
Till överst på sidan Go down
Användarens profil
Johan



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Re: Uppg4 – Arv   ons sep 24, 2008 10:11 pm

eliasandersen vinner äran! Smile
Till överst på sidan Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
mjaoo



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

InläggRubrik: Re: Uppg4 – Arv   sön sep 28, 2008 5: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 Go down
Användarens profil
HenkaN



Antal inlägg: 42
Join date: 08-09-03
Age: 18
Ort: Mälarhöjden

InläggRubrik: Re: Uppg4 – Arv   mån sep 29, 2008 10:40 am

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



Antal inlägg: 47
Join date: 08-09-03

InläggRubrik: Re: Uppg4 – Arv   ons okt 01, 2008 12: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 Go down
Användarens profil http://www.cplusplus.com/doc/tutorial/
 

Uppg4 – Arv

Föregående ämne Nästa ämne Till överst på sidan 
Sida 1 av 2Gå till sida : 1, 2  Next

Permissions of this forum:Du kan inte svara på inlägg i det här forumet
Fryshuset Gamer Forum :: Programmering :: Koder-
Skapa nytt ämne   Svara på ämnet