Forum huvudsida -> Programmering -> Problem med spelet i nybörjarguiden.
Sidor: 1
ElDiablo | 14:34 - 24:e Oktober 2007 | Post #1 | |
Medlem Inlägg: 1 Skicka PM |
Hej. Har hamnat i lite problem med koden i nybörjarguiden o hittar inte felen, så om någon skulle kunna vara snäll o hjälpa mig så skulle det vara super. Iaf här är koden: // Bibliotek #include <iostream> #include <ctime> // Vilka funktioner som ska användas using std::cout; using std::cin; using std::string; using std::system; using std::srand; using std::rand; // För random funktionen // Deklarera funktioner så de blir utkommliga från hela programmet string NyttSpel(); int Level1(string &sName, int &iHp, int &iDmg_min, int &iDmg_max); int Level1(string &sName, int &iHp, int &iDmg_min, int &iDmg_max) { srand(time(0)); bool bGoLevel1= true; // Den här ska vara true så länga man är i level 1 string sCmd; // För att läsa in kommandorn från menyer mm int iCurrentHp = iHp; // Spelarens nuvarande liv, man dör lite när man slåss mot fiender men man ska få tillbaka liven efter fighten // Fiendevariabler int iEType; // Fiendens typ int iEHp; // Fiendens liv int iEDmg_min; // Fiendens minimum skada int iEDmg_max; // Fiendens maximum skada string sEName; // Fiendens namn while (bGoLevel1) // Kör den här kodsnutten så länge bGoLevel1 är true { system("cls"); // Rensa skärmen cout << "Välkommen till bana 1!\nMeny:\n-----\n[H]itta fiende att slåss med\n[A]vsluta spelet\nVal:\n"; cin >> sCmd; if (sCmd == "h" || sCmd == "H") { iEType = rand() / (RAND_MAX / 3 + 1) + 1; // Slumpa ett tal från 1 till 3. Det ska finnas 3 olika typer av fiender på första banan. if (iEType == 1) { sEName = "Giftfluga"; iEHp = 4; iEDmg_min = 2; iEDmg_max = 3; } else if (iEType == 2) { sEName = "Huggorm"; iEHp = 5; iEDmg_min = 2; iEDmg_max = 5; } else if (iEType == 3) { sEName = "Råtta"; iEHp = 3; iEDmg_min = 1; iEDmg_max = 2; } while (true) // Kör tills "break;" körs { cout << "\nSlåss mot fiende:\n------------------\nDu möter en " << sEName << "!\n" << "Fiendens liv: " << iEHp << "\n" << "Dina liv: " << iCurrentHp << "\n" << "Meny:\n-----\nSlå i [m]agen\nSlå i [f]oten\nSlå i [h]uvudet\nVal:\n"; cin >> sCmd; if (sCmd == "m" || sCmd == "M") { if (iEType == 3) // Om det är en råtta så får den extra liv, den är alltså svår att döda genom att slå i magen iEHp+=2 else if (iEType == 2) // Om det är en huggorm så får den minus ett liv, den är alltså extra lätt att döda genom att slå i magen iEHp-=2; } else if (sCmd == "f" || sCmd == "F") { if (iEType == 1) // Om det är en giftflyga så får den extra liv, den är alltså svår att döda genom att slå på foten iEHp+=1; else if (iEType == 3) // Om det är en råtta så får den minus ett liv, den är alltså extra lätt att döda genom att slå på foten iEHp-=1; } else if (sCmd == "h" || sCmd == "H") { if (iEType == 2) // Om det är en huggorm så får den extra liv, den är alltså svår att döda genom att slå på huvudet iEHp+=1; else if (iEType == 1) // Om det är en giftflyga så får den minus ett liv, den är alltså extra lätt att döda genom att slå på huvudet iEHp-=1; } iEHp -= rand() / (RAND_MAX / iDmg_max + 1) + iDmg_min; if (iEHp <= 0) // Om fienden dog { cout << "Du dödade monstret, bra gjort!\n"; break; // Hoppa ur while-loopen } else { iCurrentHp -= rand() / (RAND_MAX / iEDmg_max + 1) + iEDmg_min; if (iCurrentHp <= 0) // Om man dör { bGoLevel1 = false; // Slut på level 1, du dog iCurrentHp = iHp; // ...terstället liven break; } } } // Slut på slåss mot fiende-loop } else if (sCmd == "a" || sCmd == "A") { return 3; // Det här returneras om man inte vill spela mer i level 1 } } // Slut på level1-loop return 2; // Det här returneras om man dog av en fiende } string NyttSpel() { string sTmpName; // Variabel för att temporärt lagra spelarens namn. Variabeln finns bara i den här funktionen system("cls"); // Rensa skärmen cout << "Välkommen till Skogen-med-de-elaka-monstrena-spelet!\nSkriv in ditt namn så vi kan börja: "; cin >> sTmpName; return sTmpName; } int main() { // Deklarera variabler string sCmd; // Används för att avläsa användarens val i menyer mm string sName; // För att lagra namet på spelaren bool bGo= true; // En variabel som är true så länge muvudmeny-loopen ska köras int iTmp; // Variabel för temorära saker // Spelarens karaktärs variabler int iHp = 10; // Spelarens hälsoresurser int iDmg_min = 2; // Spelarens minimiskada int iDmg_max = 5; // Spelarens maximiskada while (bGo) // Kör loopen så länge bGo är true { // Huvudmenyn cout << "#################################################\n" << "# #\n" << "# Skogen med de elaka monstrena spelet v1.0 #\n" << "# #\n" << "#################################################\n" << "Huvud meny:\n-----------\n[N]ytt spel\n[A]vsluta\nVal:"; cin >> sCmd; if (sCmd == "n" || sCmd == "N") { sName = NyttSpel(); // Skicka med namnvariabeln iTmp = Level1(sName, iHp, iDmg_min, iDmg_max); if (iTmp == 3) bGo = false; if (iTmp == 2) cout << "Du dog!"; } else if (sCmd == "a" || sCmd == "A") { break; // Bryt ut från huvudmeny-loopen } } // Slut på while-loopen return 0; } -------------------------------- e:\minado~1\progra~1\spel.cpp:13: syntax error before `('' e:\minado~1\progra~1\spel.cpp:14: `string'' was not declared in this scope e:\minado~1\progra~1\spel.cpp:14: `sName'' was not declared in this scope e:\minado~1\progra~1\spel.cpp:14: parse error before `&'' e:\minado~1\progra~1\spel.cpp:16: `string'' was not declared in this scope e:\minado~1\progra~1\spel.cpp:16: `sName'' was not declared in this scope e:\minado~1\progra~1\spel.cpp:16: parse error before `&'' e:\minado~1\progra~1\spel.cpp: In function `int Level1(...)'': e:\minado~1\progra~1\spel.cpp:18: implicit declaration of function `int srand(...)'' e:\minado~1\progra~1\spel.cpp:22: `string'' undeclared (first use this function) e:\minado~1\progra~1\spel.cpp:22: (Each undeclared identifier is reported only once e:\minado~1\progra~1\spel.cpp:22: for each function it appears in.) e:\minado~1\progra~1\spel.cpp:22: parse error before `;'' e:\minado~1\progra~1\spel.cpp:23: `iHp'' undeclared (first use this function) e:\minado~1\progra~1\spel.cpp:30: parse error before `;'' e:\minado~1\progra~1\spel.cpp:34: implicit declaration of function `int system(...)'' e:\minado~1\progra~1\spel.cpp:38: `sCmd'' undeclared (first use this function) e:\minado~1\progra~1\spel.cpp:42: implicit declaration of function `int rand(...)'' e:\minado~1\progra~1\spel.cpp:42: `RAND_MAX'' undeclared (first use this function) e:\minado~1\progra~1\spel.cpp:45: `sEName'' undeclared (first use this function) e:\minado~1\progra~1\spel.cpp:79: parse error before `else'' e:\minado~1\progra~1\spel.cpp:97: `iDmg_max'' undeclared (first use this function) e:\minado~1\progra~1\spel.cpp:97: `iDmg_min'' undeclared (first use this function) e:\minado~1\progra~1\spel.cpp:125: confused by earlier errors, bailing out -------------------- |
jockepockee | 14:49 - 24:e Oktober 2007 | Post #2 | |
Medlem Inlägg: 192 Skicka PM |
skriv koden lite snyggare innom [source=c++][/source] taggar, då blir det lättare att läsa din kod. -------------------------
|
Nissebosselasse | 15:06 - 24:e Oktober 2007 | Post #3 | |
Medlem Inlägg: 490 Skicka PM |
Inkludera string-biblioteket också, överst: #include <string> Det här problemet har tagits upp i någon annan tråd nyligen (kommer dock ej ihåg vilken). EDIT: dessutom, du måste använda ett using-direktiv för string-klassen också: using std::string; Enklast hade väl varit att strunta i alla using-direktiven, och skrivit ut fullständiga klassnamn, t.ex. std::string, std:cout, etc. ------------------------- http://pushingcows.se Gula Nallen Senast redigerad 15:07 - 24:e Oktober 2007 |
stampe | 15:18 - 24:e Oktober 2007 | Post #4 | |
Medlem Inlägg: 30 Skicka PM |
Citat av Nissebosselasse:Inkludera string-biblioteket också, överst: ,,r det lättast?... Tokig eller?... lättast är väll att skita i alla
m.m.. Ta bort alla namnrymnder och skriv
så får du alla std rymnderna. |
Nissebosselasse | 15:40 - 24:e Oktober 2007 | Post #5 | |
Medlem Inlägg: 490 Skicka PM |
Stampe: på ett minimalt projekt (och endast i dess cpp-fil), ja. Personligen tycker jag dock att koden blir mer lättläst om man ser vilken namnrymd objekten härör ifrån. Okej, det kan bli väldigt oläsligt med långa och/eller flera namnrymder: game::system::win32::io::input::joystick... Men då rör det sig snarare om grova fel i designen. Och hur lång tid extra tar det att skriva std::? Här är lite nyttig läsning: http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.5 ------------------------- http://pushingcows.se Gula Nallen |
stampe | 20:42 - 24:e Oktober 2007 | Post #6 | |
Medlem Inlägg: 30 Skicka PM |
Citat av Nissebosselasse:Stampe: på ett minimalt projekt (och endast i dess cpp-fil), ja. okej låt oss säga så här, 1. författaren av programmet kodar som han vill. 2. har man hjärnan med sig så sätter man inte en funktion som cout som dom på peka på länken.... 3. punkt slut o pricka. |
Sidor: 1
Forum huvudsida -> Programmering -> Problem med spelet i nybörjarguiden.
Du får inte posta i den här tråden | Till toppen
Datum
2024-05-06 22:42
Vecka: 19
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.