Jo, jag håller på med ett text spel =) Tyvärr ser jag att du nog är ganska fel ute. Pröva att lägga till <b>exit(0);</b>. Om koden ligger i main kan du även använda <b>return 0;</b> Något sånt här kan man köra med: Koden ser då ut såhär. Nu är det ju så att jag är väldigt ny på det här med c++. Kan inte så mycket. Öh... jaha? Som Niklas säger, din kod är helsnurrig men för att ge dig svar på frågan så kan du lägga till en return-sats där du vill att programmet ska avslutas. Så här: Mm jag fattade efter ett tag efter jag skickade in det inlägget. Problemet är att när du vill göra den typen av spel som du försöker göra så måste man nästan göra på det sättet jag beskriver, annars är det mycket svårt att hantera. Ok, tack för hjälpen. Fast jag har en liten fråga till. Jag lär mig u boken C++ direkt av Jan Skansholm. Boken är hyfsad, även om han snurrar ihop lite begrepp (inget allvarligt dock). lite problem i en if sats.
( ni vet dungeon and warriors?)
Hur som helst är det så att jag är mitt i en if sats, problemet är att den ska leda till at hela programet avslutas.
if (slakta == slakta2)
{
cout << "du valde att slakta dem" << endl;
cout << "inte smart, du har bara knytnavar" << endl;
cout << "" << endl;
cout << " de slaktar dig i stallet" << endl;
cout << "" << endl;
cout << " spelet ar slut, for att avsluta tryck ";
}
så ser det ut för tillfallet i satsen, jag undrar hur jag ska få den att avslutas.
Tacksam för hjälp.Sv: lite problem i en if sats.
Jag kan ju ge ett direkt svar:
Om du skriver direkt i main så kan du avsluta programmet med return.
Men det är inte "rätt" väg att gå.
Kan istället snabbt ge en liten förklaring till hur du hellre löser det:
Hela basen för spelet är en s.k. "game loop". I varje varv i denna loop tar du emot user input och "gör grejer". Du har alltså:
int main()
{
do
gör grejer
str = user input;
while(str != exit)
}
Naturligtvis är det inte så enkelt och så kort, men i princip. Sen får du ha variabler för hur världen ser ut just nu, var man befinner sig, etc. Det är de variablerna du varierar, och sen ger du information (i textform i ditt fall) varje varv i loopen.
Jag kan göra ett mycket kort exempel om en stund om jag orkar.
Du kommer kunna göra ett spel på "ditt" sätt (jag har gjort det själv), men det är nästan omöjligt att utvidga, fruktansvärt svårt att få att bli något vidare intressant, osv. Den varianten jag föreslår är definitivt bättre.Sv: lite problem i en if sats.
Sv:lite problem i en if sats.
class Direction{
public:
std::string direction;
operator == (Direction d) {direction == d;}
} ;
class Room{
public:
std::string desc;
std::map <Direction, *Room> neighbours;
} ;
int main()
{
Room StartRoom, BedRoom, LivingRoom, Toilet, Basement;
Direction up="up", right="right", down="down", left="left", front="front";
StartRoom.desc = "You are in the hall. In front of you there's the living room.\n"
LivingRoom.desc = "You are in the living room. To the front of you there's the bedroom, and to the left there's a toilet.\n"
BedRoom.desc = "You are in the bedroom. There is some stairs that are going down.\n"
Toilet.desc = "You are in the toilet. Exit is to the right.\n"
Basement.desc = "You are in the basement. Exit is up.\n"
StartRoom.neighbours[front] = &LivingRoom;
LivingRoom.neighbours[front] = &Bedroom;
LivingRoom.neighbours[left] = &Toilet;
BedRoom.neighbours[down] = &Basement;
Toilet.neighbours[right] = &LivingRoom;
Basement.neighbours[up] = &BedRoom;
std::string input;
Room *CurrentRoom = &StartRoom;
std::cout << "You get into a house\n"
do{
std::cout << CurrentRoom->desc;
std::cin >> input;
Direction d; d.direction = input;
if(CurrentRoom->neighbours.find(d) != CurrentRoom->neighbours.end())
CurrentRoom = CurrentRoom->neighbours[d];
else
std::cout << "input error\n"
}
while(true)
}
otestad kod, finns inget sätt att avsluta, inga headers är definierade etc.
om det inte funkar - fråga!
Sv: lite problem i en if sats.
#include <iostream>
#include <iomanip>
using namespace std;
main()
{
int dorr_1 = 1, dorr_2 = 2;
int drake = 2, vapen = 1;
int start = 1, the_beggining = 1, history = 2, slakta = 3, fly = 4, fly2 = 4, slakta2 = 3, forsatt = 5;
cout << ""; cout << "^DARK CHEAST OF WONDERS^" << endl;
cout << "======================" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "start" << endl;
cout << "" << endl;
cout << "press one^"; cin >> start;
cout << " Why does he travel to the darkes place on earth?" << endl;
cout << "" << endl;
cout << "Cause he can.. =O" << endl;
cout << "==================================================================" << endl;
cout << "|" << endl; cout << "Name: SAM" << endl; cout << "|" << endl;
cout << "|" << endl; cout << "Life: 100 liv" << endl; cout << "|" << endl;
cout << "|" << endl; cout << "Function: killing machine" << endl;cout << "|" << endl;
cout << "==================================================================" << endl;
if (start == the_beggining)
{
cout << "slottet ar framfor dig" << endl;
cout << "" << endl;
cout << " du moter 3 ackliga forvuxna gnagare, varje gnagare har 30 liv!" << endl;
cout << "" << endl;
cout << "vill du doda dem? i sa fall tryck 4" << endl;
cout << "" << endl;
cout << "vill du fly tryck 3"; cin >> fly;
cout << "====================" << endl;
}
if (slakta < fly)
{
cout << "du valde att slakta dem" << endl;
cout << "inte smart, du har bara knytnavar" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "" << endl;
cout << " de slaktar dig i stallet" << endl
cout << "" << endl;
} <------------------------------Här är det tänkt att de ska ta stopp.Om man valde fel.
else
{
cout << "du valde att fly" << endl;
cout << "" << endl;
cout << "smart du hade namligen bara knytnavar =D" << endl;
cout << "" << endl;
cout << "du forsatter nu" << endl;
cout << "==================" << endl;
}
cout << "vill du forsatta? tryck i så fall 5"; cin >> forsatt;
cout << "===================================" << endl;
cout << "du har gatt in igenom en dorr vid slottet och gar ner for en trappa" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "du ser tre dorrar, vilken dorr vill du oppna?" << endl;
cout << "" << endl;
cout << "" << endl;
cout << " forsta dorren har numer 1, om du vill oppna den tryck 1" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "den andra har numer 2, om du vill oppna den tryck 2" << endl;
cout << "valj dorr"; cin >> dorr_1;
cout << "====================================================" << endl;
if (dorr_1 == vapen)
{
cout << "du hittar ett vapen... vapnet skadar 15liv per skott" << endl;
cout << " du stoppar ner vapnet forsiktigt i ditt holster" << endl;
cout << "" << endl;
cout << "du foljer nu korridoren som dok upp nar du gick in igenom dorren och hittade vapnet" << endl;
}
else if (dorr_2 == drake)
cout << "..du moter en elak drake som ater upp dig. Du har nu mott resans slut." << endl;
system ("PAUSE");
return 0;
}Sv:lite problem i en if sats.
Du har redan fått två svar. Om du vill avbryta där så är det korta svaret att du använder return 0 eller exit(0).
Men det är ändå fel väg att gå, din kod är helsnurrig. Du kommer tröttna på att mecka med den typen av kodande, jag lovar.
Gör istället så som jag skriver ovan, eller åtminstone något i den stilen.
Alltså:
1. Ha ett "tillstånd".
2. Ha en loop där du gör tre saker:
-Presenterar nuvarande tillstånd
-Tar emot någon slags input från användaren
-Modifierar tillståndet eller avslutar programmet.
Det är nästan det enda sättet som i praktiken funkar.Sv:lite problem i en if sats.
if (slakta < fly)
{
cout << "du valde att slakta dem" << endl;
cout << "inte smart, du har bara knytnavar" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "" << endl;
cout << " de slaktar dig i stallet" << endl
cout << "" << endl;
return 0; // nu kommer programmet avslutas
}
/PeterSv: lite problem i en if sats.
Men det är så att jag inte riktigt förstår din kod. Som sagt jag är nybörjare när det gäller C++.
Det här var mer som ett test, personligen tycker jag att det är rätt störande när inte ens ett test funkar.
Så jag tänkte skicka min kod så du fick se hur jag gjorde, och därmed kanske du skulle se att jag inte är så speciellt bra...Sv:lite problem i en if sats.
Jag skulle föreslå att du:
1. Frågar mer om strukturen, alltså "hur bör jag göra för att skriva ett spel som ...". Och det fick du svar på ovan. Utgå från det, och skriv programmet "i stort". Gå sen ner mer och mer i detalj, tills du får spelet att funka. Får du problem så fråga om de grejerna.
eller
2. Ge dig på andra delar först, och läs mer av andras kod. Se till att ordentligt veta vad det finns för typer i standard C++; int, double, bool, std::string, std::map, std::vector. Se till att ordentligt kunna alla kontrollstrukturer (for, while, if). Se till att förstå funktioner och hur de i princip ska fungera. Försök förstå structar och classer. Lär dig om objektorientering. Sen kommer du efter hand förstå dig på hur du borde skrivit spelet.
Några tips om du ändå försöker fortsätta med spelet:
Alla variabler ska beskriva något. Har du en Ja/Nej-fråga, så är det en bool-variabel. Har du en fråga om antal så är det en int- eller double-variabel. Programmet ska styras utifrån vad variablerna ska beskriva.Sv: lite problem i en if sats.
I den boken nämner han inget om std::map och sådant. Jag kanske jag har fel bok om jag vill lära mig C++?
Om så, vilken ska jag läsa?Sv:lite problem i en if sats.
Börja med den, följ övningarna, läs igenom rubbet. Sen tror jag att både map, string, set, osv. är med där.
Du kommer iaf få en introduktion till OO, och då kan du enkelt använda det för att strukturera upp programmet mycket bättre.
Leta sen efter Scott Meyers böcker "Effective C++", "More Effective C++" , och (om jag inte minns fel) "Effective STL".
Där lär du dig verkligen hur du ska använda språket på rätt sätt.