| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: C++-Game im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hey Leute ;) Habe ein Problem... Hab aus langeweile mal ein Spiel gemacht, bin aber noch Anfänger. Alles funktioniert, ...
![]() |
| | #1 (permalink) |
| Registriert seit: 31.01.08 ![]() Likes: 0 | Anzeige Hey Leute ;) Habe ein Problem... Hab aus langeweile mal ein Spiel gemacht, bin aber noch Anfänger. Alles funktioniert, nur die While-Schleife am Ende nicht. ICh weiß nicht mit den Klassen(oder wie auch immer) rechnen kann! Will dem anderen ja Schaden abziehen ;) [Spoiler] Code: #include <iostream>
using namespace std;
class Spieler // Spieler deklaration! (Deklaration ist glaube ich klar ;)
{
public:
void SetEnergie(int Energie) {itsEnergie = Energie;}
int GetEnergie() {return itsEnergie;}
void SetWeapon( int Weapon) { itsWeapon = Weapon; }
int GetWeapon() { return itsWeapon; }
void SetSchaden (int Schaden) { itsSchaden = Schaden; }
int GetSchaden () {return itsSchaden; }
void Attacke() { cout <<"Attacke!!!!\n"; }
private:
int itsEnergie;
int itsWeapon;
int itsSchaden;
};
int main()
{
Spieler Ich;
Spieler Gegner;
int Ich_Auswahl;
int Gegner_Auswahl;
int Ich_Waffe;
int Gegner_Waffe;
int Ich_Energie;
int Gegner_Energie;
cout <<"Willkommen bei meinem Spiel ;)! \n\n";
cout <<"Waehlen sie IHREN Charakter aus: \n"; //Chrakter auswahl von Ich
cout <<"1. Ork \n2. Mensch\n3. Elf \n";
cin >> Ich_Auswahl;
if ( Ich_Auswahl == 1)
{
Ich.SetEnergie(700);
cout <<"\nSie sind jetzt ein Ork!";
}
else if( Ich_Auswahl == 2)
{
Ich.SetEnergie(600);
cout <<"\nSie sind jetzt ein Mensch!"; // Das sind die Eigenschaften vom Charakter
}
else if( Ich_Auswahl == 3)
{
Ich.SetEnergie(500);
cout <<"\nSie sind jetzt ein Elf!";
}
else
{
cout <<"\nEy, zu grosse Zahl!\nDeshalb sind sie jetzt ein Elf!";
Ich.SetEnergie(500);
}
cout <<"\n\nWaehlen sie jetzt IHRE Waffe aus: \n\n";
cout <<"1. Schwert \n2. Axt\n3. Bogen\n4. Speer\n";
cin >> Ich_Waffe;
if ( Ich_Waffe == 1 )
{
Ich.SetSchaden(50);
cout <<"\n Sie haben jetzt ein Schwert!";
}
else if ( Ich_Waffe == 2 )
{
Ich.SetSchaden(70);
cout <<"Sie haben jetzt eine Axt!";
}
else if ( Ich_Waffe == 3 )
{
Ich.SetSchaden(40);
cout <<"Sie haben jetzt ein Bogen!";
}
else if ( Ich_Waffe == 4 )
{
Ich.SetSchaden(60);
cout <<"Sie haben jetzt ein Speer!";
}
else
{
cout <<"Sie haben keine Waffe ausgewählt!\nDeshalb bekommen sie ein Bogen!";
Ich.SetSchaden(40);
}
cout <<"Jetzt wählen sie ihren Feind: \n"; //Feindauswahl!
cout <<"1. Ork \n2. Mensch\n3. Elf \n";
cin >> Gegner_Auswahl;
if ( Gegner_Auswahl == 1)
{
Gegner.SetEnergie(700);
cout <<"\nSie sind jetzt ein Ork!";
}
else if( Gegner_Auswahl == 2)
{
Gegner.SetEnergie(600);
cout <<"\nSie sind jetzt ein Mensch!"; // Das sind die Eigenschaften vom Charakter
}
else if( Gegner_Auswahl == 3)
{
Gegner.SetEnergie(500);
cout <<"\nSie sind jetzt ein Elf!";
}
else
{
cout <<"\nEy, zu grosse Zahl!\nDeshalb ist ihr Gegner jetzt ein Ork!";
Gegner.SetEnergie(700);
}
cout <<"\n\nWaehlen sie jetzt die Waffe des Gegners aus: \n\n";
cout <<"1. Schwert \n2. Axt\n3. Bogen\n4. Speer\n";
cin >> Gegner_Waffe;
if ( Gegner_Waffe == 1 )
{
Gegner.SetSchaden(50);
cout <<"\n Sie haben jetzt ein Schwert!";
}
else if ( Gegner_Waffe == 2 )
{
Gegner.SetSchaden(70);
cout <<"Sie haben jetzt eine Axt!";
}
else if ( Gegner_Waffe == 3 )
{
Gegner.SetSchaden(40);
cout <<"Sie haben jetzt ein Bogen!";
}
else if ( Gegner_Waffe == 4 )
{
Gegner.SetSchaden(60);
cout <<"Sie haben jetzt ein Speer!";
}
else
{
cout <<"Sie haben keine Waffe ausgewählt!\nDeshalb bekommen sie ein Axt!";
Gegner.SetSchaden(70);
}
int Gegner_Tod = Gegner.GetEnergie();
int Ich_Tod = Ich.GetEnergie();
int Gegner_Attacke = Gegner.GetSchaden();
int Ich_Attacke = Ich.GetSchaden();
while ( *Ich_Tod >= 0 || *Gegner_Tod >= 0 )
{
cout <<"Sie greifen an! \n";
Gegner_Energie = *Gegner_Tod - *Ich.GetSchaden() ;
cout <<"Der Gegner greift an! \n";
Ich_Energie = *Ich_Tod - *Gegner_Attacke ;
}
if (Gegner.GetEnergie() == 0 )
cout <<"Sie haben gewonnen!";
else if (Ich.GetEnergie() == 0 )
cout <<"Sie haben verloren!";
else
cout <<"Nix passiert...";
int Ende;
cin >> Ende;
return 0;
} PS: ICh weiß, ist bestimmt nen schlechter Programmierstyl, aber bin ja Anfänger :P |
| | |
| | #2 (permalink) |
| die Variablen Ich_Tod bzw. Gegner_Tod bleiben während der While-Schleife am Ende Gleich, d.h. die bedingung wird immer Wahr bleiben. Außerdem warum dereferenzierst du einfache Variablen? Bei mir mag der Compiler das nicht einmal. Folgendes sollte funktionieren: Code: while ( Ich_Tod >= 0 || Gegner_Tod >= 0 )
{
cout <<"Sie greifen an! \n";
Gegner_Energie = Gegner_Tod - Ich.GetSchaden() ;
cout <<"Der Gegner greift an! \n";
Ich_Energie = Ich_Tod - Gegner_Attacke ;
// Variablen aktualisieren
Gegner_Tod = Gegner.GetEnergie();
Ich_Tod = Ich.GetEnergie();
} | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Themenstarter Registriert seit: 31.01.08 ![]() Likes: 0 | Geht bei mir gehts irgendwie trotzdem nicht... Ist immer noch eine endlosschleife... Und wie gesagt, bin noch anfänger... |
| | |
| | #4 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Kapselung ist eine feine Sache, wenn sie wirklich verwendet wird Code: Gegner_Tod = Gegner.GetEnergie();
Ich_Tod = Ich.GetEnergie();
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #5 (permalink) |
| Themenstarter Registriert seit: 31.01.08 ![]() Likes: 0 | ok Werde später mal gucken obs geht, bim am anderen PC. aber schonmal THX^^ Edit: Weiß nicht ob ich das falsch gemacht habe, aber jetzt habe ich das so: Code: while ( Ich_Tod >= 0 || Gegner_Tod >= 0 )
{
cout <<"Sie greifen an! \n";
Gegner_Energie = Gegner_Tod - Ich.GetSchaden() ;
cout <<"Der Gegner greift an! \n";
Ich_Energie = Ich_Tod - Gegner_Attacke ;
// Variablen aktualisieren
Gegner_Tod = Gegner.SetEnergie();
Ich_Tod = Ich.SetEnergie();
} |
| | |
| | #6 (permalink) |
| du musst ja auch Gegner.GetEnergy() anstatt Gegner.SetEnergy() verwenden (bei Ich das selbe) | |
| | |
| | #7 (permalink) |
| Themenstarter Registriert seit: 31.01.08 ![]() Likes: 0 | Hab ich auch schon versucht. Aber wie CDW gessagt hat, damit werden die Variablen wieder auf den Standartwert gesetzt... |
| | |
| | #8 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Das sollte Dein Gedanke sein, oder nicht? Code: while (ich.getEnergie()>=0 && gegner.getEnergie()>=0 ) //solange beide am leben sind:
{
cout <<"Sie greifen an! \n";
ich.setEnergie(ich.getEnergie-gegner.getSchaden());
cout <<"Der Gegner greift an! \n";
gegner.setSchaden(gegner.getEnergie-ich.getSchaden));
} Variablennamen und Methodennamen fangen nach http://java.sun.com/docs/codeconv/ klein an. Für C++ gilt wohl auch in etwa dasselbe: http://en.wikibooks.org/wiki/C%2B%2B...le_Conventions
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #9 (permalink) |
| Registriert seit: 17.02.06 ![]() Likes: 0 | Sagt mal, Jungs, WIESO in aller Welt fangt Ihr an, die EINFACHSTEN Probleme mit dem KOMPLIZIERTEST möglichen Mitteln zu lösen? Vor allem: Wenn man Anfänger ist UND außerdem nur ein sehr kleines, überschaubares Problem vor der Nase hat, wieso dann VOR Beginn der ersten Lösung schon von vornherein Organisationsmittel benutzen, die einen EXTRA Komplexitätslayer über das ganze ziehen? @nhBps: Nimm doch einfach mal EINFACHE Ausdrucksmittel, mit denen Du schon genug Probleme hast, um das Problem auf die EINFACHE Weise zu lösen! NACHDEM dann die EINFACHE Lösung existiert, schreibe diese stückweise um, wo Du in jedem Schritt immer wieder kontrollieren kannst, ob das Zeug IMMER NOCH funktioniert. Auf diese Weise lernst Du gleichzeitig eine anerkannte Technik zur Modifikation von komplexen Projekten, die anders gar nicht zu handhaben wären. Und investierst also nebenbei sinnvoll in die Zukunft. Und Du landest AUCH SO schließlich bei dem von Dir offenbar angestrebten Üben der komplexeren und flexibleren Ausdrucksweisen mit Zugriffsfunktionen. Aber: Eins nach dem anderen und nicht gleich mit dem Kopf durch die Wand... |
| | |
| | #10 (permalink) |
| Themenstarter Registriert seit: 31.01.08 ![]() Likes: 0 | Werds dann später machen probieren bin am anderen Aber ich jz schon 2 ganze Tutorials durch und ein Buch durch... Aber werds heute dann mal umändern... THX Edit: Game Hab das jetzt so verändert... Aber jetzt gewinne ich die ganze Zeit... Danke an alle die mir geholfen haben ^^ |
| | |
| | #11 (permalink) | ||
| Senior Member | Zitat:
Zitat:
| ||
| | |
| | #12 (permalink) |
| Themenstarter Registriert seit: 31.01.08 ![]() Likes: 0 | Ja, habe den Fehler jetzt berichtigt Game |
| | |
| | #13 (permalink) |
| Sieht doch ganz gut aus. Allerdings hast du am Ende noch einen kleinen Fehler drin: Code: [...]
while ( Gegner_Energie > 0 && Ich_Energie > 0 )
{
Ich_Energie = Ich_Energie - Gegner_Schaden ;
Gegner_Energie = Gegner_Energie - Ich_Schaden ;
}
if (Gegner_Energie < 0 )
cout <<"Sie haben gewonnen!";
else if (Ich_Energie < 0 )
cout <<"Sie haben verloren!";
else
cout <<"Nix passiert...";
[...] Wenn du die <-Operatoren in der if- und else-if-Abfrage jeweils durch ein <= ersetzen würdest, hättest du die absolute Sicherheit, dass der richtige Gewinner ausgegeben wird. Außerdem würdest du dir den else-Block sparen | |
| | |
| | #15 (permalink) |
| Registriert seit: 15.01.08 ![]() Likes: 0 | ich wei das mit dem stil haste schon geschrieben also is das nur ein tipp mehrere ifs gleicher variable lassen sich auch als switch case ausdrücken und ich würde fast das ganze progg nur in klassen packen, is einfach übersichtlicher^^ |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Controller & Game | sprudelgehirn | Applikationen | 0 | 04.10.09 13:53 |
| 2D RPG-Game | Teletappy | Games | 6 | 28.09.08 20:53 |
| Hab(b)o Game? | 0wnZ | Games | 17 | 11.07.06 00:39 |