Permalänk
Medlem

Text baserat RPG. Hjälp mig

Tja jag har stött på ett problem i mitt försök med att göra ett text baserat RPG spel.

# include <iostream> # include <conio.h> # include <string> # include <process.h> # include <ctime> using namespace std; int main() { int PHp=10; int Mhp=5; string command; string Pub; string Forest; bool playing=false; bool fight=false; while (playing==false) { cout << "Skriv How to play för att veta hur du spelar\n"; cout <<"1.Play\n" "2.How to play\n"; getline (cin,command); if (command=="Play") { playing=true; } else if (command=="How to play") { system("cls"); cout <<"Du skriver exakt vad namnen är för att ta dig vidare i spelet\n" "Exempel: Du har kommit till en korsning\n" "1.Skogen\n2.Puben\n" "För att ta dig till puben skriver du Puben\nko"; } else { cout <<"Du har inte skrivit in något fungerande kommando. Försök igen.\n"; } } { cout <<"Vart vill du gå?\n" "1.Skogen\n" "2.Puben\n"; cin >>command; while (fight=true) if (command=="Skogen") { fight=true; cout <<"Ett monster har attackerat dig\n" "Du kan inte springa! Slåss till döden!\n"; cout <<"Du har; "<<PHp<<"hp kvar!" "Monstret har: "<<Mhp<<"hp kvar!"; Mhp =-2; PHp =-1; if (Mhp >=0) break; } } getch(); return 0; }

Så här ser koden ut nu och felet är att när jag går in i skogen så går while loopen igång som fan och slutar aldrig.
Vet inte riktigt hur jag ska fixa detta.

Tack!

Permalänk
Medlem

Du måste använda == när du jämför, men du använder bara =. while(fight = true) kommer tilldela true till fight, och värdet av hela uttrycket fight = true blir därför true.

Permalänk
Medlem

när du fått ett giltigt kommando, kör "break" då hoppar du ut ur while loopen.

Permalänk
Medlem

Ditt villkor för while-satsen tilldelar ju fight=true.

Det är nog bättre om du först säger fight = true och sen kör
while (fight) { }

Hur som helst:
I logiken i while-satsen så sätter du Mhp till -2 och logiken för att avbryta loopen är om Mhp är större eller lika med 0, vilket aldrig kommer inträffa.

if (Mhp >=0) break; //Om Mhp är större eller lika med 0 så ska en break utfärdas

Borde det inte vara tvärt om?

if (Mhp <=0) break; //Om Mhp är mindre eller lika med 0 så ska en break utfärdas

Snyggast är ändå om du påverkar boleska värdet (fight) som while-satsen använder istället för break. Annars kommer "fight" vara true även efter du har kört break.

if (Mhp >=0) fight = false; //Om Mhp är större eller lika med 0 så ska en break utfärdas

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Tackar för svaren:) Har bara haft problem med while sen jag började lära mig:D Angående <> så har jag faktiskt aldrig riktigt lärt mig vilken som är vilken. Dåligt ja..

Edit; Stött på ett till problem som ni kan hjälpa mig med.

Det är att den loopar inte. Den kollar bara spelarens health och monsterns health sen avslutar den.

while (fight=true) if (command=="Skogen") { if (Mhp <=0) { fight=false; } cout <<"Ett monster har attackerat dig\n"; cout <<"Du kan inte springa! Sl\x86ss till döden!"; cout <<"\nDu har: "<<PHp<<"hp kvar!" "Monstret har: "<<Mhp<<"hp kvar!"; Mhp -=2; PHp -=1; break; } } getch(); return 0; }

Så ser den ut nu. Som sagt så nu loopar den inte alls. Förut för mycket:)

Permalänk
Medlem

while (fight=true) är fel, du ska ha två =, dvs ==
while (fight==true)

Permalänk
Medlem
Skrivet av Dalton Sleeper:

while (fight=true) är fel, du ska ha två =, dvs ==
while (fight==true)

Tack fixat det:)