Forum: Problem med spelet i nybörjarguiden.

Forum huvudsida -> Programmering -> Problem med spelet i nybörjarguiden.

Sidor: 1

Till botten

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:

#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.


,,r det lättast?...

Tokig eller?... lättast är väll att skita i alla
  1. using std::cout;
  2. using std::string;

m.m..

Ta bort alla namnrymnder och skriv

  1. using namespace std;

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.
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


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.
Atom feed

Du får inte posta i den här tråden | Till toppen