Johan
Antal inlägg: 47 Join date: 08-09-03
 | Rubrik: Uppg3 – Klassobjekt som medlem (fight simulator) ons sep 10, 2008 12:02 am | |
| Jag har nu kommenterat färdigt koden för min fight simulator. Detta är snäppet lite lite mer utvecklat än det som jag lämnat som specifikationer för betyget godkänt. Låt er inspireras och utveckla vidare. Som jag sade i tidigare projekt; Kopiera inte bara koden, utan använd den endast som underlag för ert eget program. Ser jag att ni ert program är aldeles för likt kommer jag att be er förklara för mig hur det funkar. Tycker du att det ser mastigt ut, kopiera in koden i codeblocks, visual studio eller bara Notepad++ så att du får färgade betoningar i koden. Det kan även bero på alla kommentarerna. Testa att ta bort dem och se om du tycker att koden blir begripligare. Lycka till! |
|
Johan
Antal inlägg: 47 Join date: 08-09-03
 | Rubrik: Re: Uppg3 – Klassobjekt som medlem (fight simulator) ons sep 10, 2008 12:04 am | |
| | Kod: | //Fighter.h //-------------
//ifndef och define gör det lättare att kompilera projektet om man har fler includes av denna fil #ifndef FIGHTER_H_INCLUDED #define FIGHTER_H_INCLUDED
//Includes #include <iostream> #include <string> #include "Weapon.h"
using namespace std;
//Fighter -definitionen. Det är två av dessa som ska slåss mot varrandra i main. class Fighter{ private: string name; //Fighterns namn int hp; //Fighterns hälsa. Om hp blir noll så ska Fightern dö. int skill; //Färdighetsvärdet. Hur duktig Fightern är på att slåss. Weapon weapon; //Vapnet som Fightern "har".
public: Fighter(string n); //konstruktor //GET-funktioner int getHp(void){return hp;} string getName(void){return name;}
//SET-funktioner void death(void){hp=0;}//Dödar Fightern //Andra funktioner void print(void); //skriver ut alla fighterns värden void attack(Fighter * enemy); //attackerar en fiende void damage(int dam); //tar skada från fienden }; //glöm inte ;
//avsluta ifndef (glöm inte att tala om hur den såg ut i början på filen. Det anses vara snyggare kod.) #endif //#ifndef FIGHTER_H_INCLUDED
|
|
|
Johan
Antal inlägg: 47 Join date: 08-09-03
 | Rubrik: Re: Uppg3 – Klassobjekt som medlem (fight simulator) ons sep 10, 2008 12:05 am | |
| | Kod: | //Weapon.h //---------------
//Om man använder MS Visual Studio kan man bara skriva #pragma once istället för #ifndef osv. #pragma once
//Includes #include <iostream> #include <string>
using namespace std;
//Definition av klassen Weapon. Alla fighters ska bära ett vapen. class Weapon{ private: string name; //Vapnets namn int dam; //Vapnets skada string attackMess; //Meddelande som skrivs ut när vapnet används
public: Weapon(void); //Konstruktor //GET-funktioner string getAttack(void){return attackMess;} int getDam(void){return dam;} string getName(void){return name;} //Andra funktioner void print(void); // Skriver ut vapnets värden.
}; //Glöm inte ;
|
|
|
Johan
Antal inlägg: 47 Join date: 08-09-03
 | Rubrik: Re: Uppg3 – Klassobjekt som medlem (fight simulator) ons sep 10, 2008 12:06 am | |
| | 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
|
|
|
Johan
Antal inlägg: 47 Join date: 08-09-03
 | Rubrik: Re: Uppg3 – Klassobjekt som medlem (fight simulator) ons sep 10, 2008 12:07 am | |
| | Kod: | //Fighter.cpp //--------------
//Includes systemfiler #include <iostream> #include <string>
//Includes egna filer #include "globals.h" #include "Fighter.h" #include "Weapon.h"
using namespace std;
//Konstruktorer //----------------
Fighter::Fighter(string n){ this->name = n; this->hp = dice(3000,5000); //Slumpa fram Fighterns hp this->skill = dice(20,80); //Slumpa fram Fighterns färdighetsvärde }
//Andra metoder //-----------------
//Skriver ut alla fighterns värden void Fighter::print(void){ cout << name << endl; cout << "HP: " << hp << endl; cout << "Skill:" << skill << endl; cout << "Weapon: "; weapon.print(); //Anropa vapnets print() funktion. dvs. skriv ut vilket vapen Fightern har }
//Attackerar en fiende. Notera att enemy är en penkare och att vi i main skickat med en adress. void Fighter::attack(Fighter * enemy){ //Kolla ifall resultatet på en D100 (framslumpat tal mellan 1-100) är mindre än färdighetsvärdet if(dice(1,100) <= skill){ //I så fall: Skriv ut attacken.. cout << name << " " << weapon.getAttack() << " " << weapon.getName() << ".\n"; cout << enemy->getName() << " looses " << weapon.getDam() << " HP.\n"; enemy->damage(weapon.getDam()); // ..och dra av Fighterns vapens dam-värde på fiendens hp. }else{ //Om D100 bler högre än färdighetsvärdet: Skriv ut att han har missat. cout << name << " misses.\n"; } }
//Låter fightern ta skada från fiendens attack void Fighter::damage(int dam){ hp -= dam; }
|
|
|
Johan
Antal inlägg: 47 Join date: 08-09-03
 | Rubrik: Re: Uppg3 – Klassobjekt som medlem (fight simulator) ons sep 10, 2008 12:09 am | |
| | Kod: | //Weapon.cpp //------------
//Includes systemfiler #include <iostream> #include <string>
//Includes egna filer #include "globals.h" #include "Weapon.h"
using namespace std;
//I konstruktorn slumpar vi fram ett fördefinierat vapen. //Dam-värdet slumpas ut mellan olika parametrar beroende på vilket vapen det blev. //Notera att jag använt en Switch, (en variant av en if-sats), och att dam-värdet bara slumpas ut i konstruktorn. I mitt spel är skadan ett konstant värde sedan det väl fått sin siffra. Weapon::Weapon(void){ switch (dice(0,10)) { case 1: this->name = "Tiny Knife"; this->dam = dice(10,20); this->attackMess = " carefully swings a "; break; case 2: this->name = "Hammer of Judgement"; this->dam = dice(50,200); this->attackMess = " uses the powerfull "; break; case 3: this->name = "Fire Ball"; this->dam = dice(100,300); this->attackMess = " magically steers a "; break; case 4: this->name = "Love Bite"; this->dam = dice(1,1000); this->attackMess = " has love in the eyes and gives out a "; break; case 5: this->name = "Wierd Thing"; this->dam = dice(50,750); this->attackMess = " swigingy swoops the shweetness with a "; break; case 6: this->name = "Sword of Lightning"; this->dam = dice(500,100); this->attackMess = " flashes with a "; break; case 7: this->name = "Massive Destruction"; this->dam = dice(1000,2000); this->attackMess = "unleashes the power of "; break; case 8: this->name = "Handy Mace"; this->dam = dice(30,100); this->attackMess = " swings the "; break; case 9: this->name = "Simple Sword"; this->dam = dice(40,150); this->attackMess = " is wishwasing around with a "; break; case 10: this->name = "Ice Bolt"; this->dam = dice(200,400); this->attackMess = " summons a freezing "; break; default: this->name = "Weaponless Fist"; this->dam = dice(5,20); this->attackMess = " gives a nice punch with a "; break; }
}
//Skriv ut vapnets namn och dam-värde. void Weapon::print(void){ cout << name << " (dam: " << dam << ")"; }
|
Senast ändrad av Johan den ons sep 10, 2008 12:13 am, ändrad totalt 1 gång |
|
Johan
Antal inlägg: 47 Join date: 08-09-03
 | Rubrik: Re: Uppg3 – Klassobjekt som medlem (fight simulator) ons sep 10, 2008 12:10 am | |
| | Kod: | //main.cpp //-----------
//Includes systemfiler #include <iostream> //för cout, cin, mm. #include <string> //för string #include <conio.h> //för getch() #include <time.h> //för srand() och rand() #include <windows.h> //för sleep() och system()
//Includes egna filer #include "Fighter.h" #include "Weapon.h"
using namespace std;
//MAIN //------------- int main(){ // Hämta en seed från datorns klocka. //(Behövs för att vi ska kunna slumpa nya tal varje gång programmet körs.) srand ( time(NULL) );
//Skapa de två fightbottarna Fighter bot1("Guybrush Threepwood"); Fighter bot2("Morgan Freeman");
//Introducerar med att skriva ut vilka Fighters som har skapats. cout << "Creating two fightbots:"; cout << "\n\n-------------------------\n"; bot1.print(); cout << "\n\n-------------------------\n"; bot2.print(); cout << "\n\n-------------------------\n\nPress any button."; getch(); //Vänta på inmatning av ett tecken system("cls"); //Töm skärmen
cout << "\n\n\n\n\n\n Get ready for the fight!\n"; Sleep(2000); //Stanna upp programmet i 2 sekunder system("cls"); //Töm skärmen
//GAME-LOOP //---------------- bool game = true; while(game){ //Skriv ut bottarnas hp-värden cout << bot1.getName() << endl << "HP: " << bot1.getHp() << "\n\n"; cout << bot2.getName() << endl << "HP: " << bot2.getHp() << "\n\n"; Sleep(1000); //Stanna upp programmet i 1 sekund //Låt bottarna attakera varandra. //Notera att jag skickar med adressen till bottarnas //minnesplats som argument (& innan objektnamnet). bot1.attack(&bot2); Sleep(1000); bot2.attack(&bot1); Sleep(1000); system("cls"); //Kontrollera ifall BÅDA har dött. if (bot1.getHp() < 0 && bot2.getHp() < 0){ //I så fall: Nollställ hp-värdena.. bot1.death(); bot2.death(); //.. skriv ut bottarnas hp... cout << bot1.getName() << endl << "HP: " << bot1.getHp() << "\n\n"; cout << bot2.getName() << endl << "HP: " << bot2.getHp() << "\n\n"; Sleep(4000); system("cls"); //.. och rapportera resultat. cout << "\n\n\n\n\n\n Both are dead. It was a meningless fight!"; Sleep(2000); system("cls"); //Stäng till sist av loopen. game=false;
//Om inte båda har dött, kanske bara en av dem har dött. //Har bot1 dött? }else if (bot1.getHp() < 0){ bot1.death(); cout << bot1.getName() << endl << "HP: " << bot1.getHp() << "\n\n"; cout << bot2.getName() << endl << "HP: " << bot2.getHp() << "\n\n"; Sleep(2000); system("cls"); cout << "\n\n\n\n\n\n " << bot1.getName() << " is defeted. " << bot2.getName() << " wins the fight!"; Sleep(4000); system("cls"); game=false; //Har bot2 dött? }else if (bot2.getHp() < 0){ bot2.death(); cout << bot1.getName() << endl << "HP: " << bot1.getHp() << "\n\n"; cout << bot2.getName() << endl << "HP: " << bot2.getHp() << "\n\n"; Sleep(4000); system("cls"); cout << "\n\n\n\n\n\n " << bot2.getName() << " is defeted. " << bot1.getName() << " wins the fight!"; Sleep(2000); system("cls"); game=false; }
} //Avslut cout << "\n\n\n\n\n\n Thank you for watching!\n\n\n\n\n\n Press any button to quit."; getch(); return 0; }
|
|
|