Forum: En fråga om del 18 i nybörjar guiden!

Forum huvudsida -> Programmering -> En fråga om del 18 i nybörjar guiden!

Sidor: 1

Till botten

Zpace 18:09 - 18:e Februari 2007 | Post #1
Medlem
Inlägg: 2


Skicka PM
Hej! Jag använder Dev C++ och har kommit till den sista delen av C++ nybörjarguiden. Allt har fungerat ända tills nu.

Så, detta är mina felmeddelanden när jag ska kompilera:
C:\Documents and Settings\Yeah Good Luck\Mina dokument\Mina C++ Program\Spelet.cpp In function `int Level1(std::string&, int&, int&, int&)':
27 C:\Documents and Settings\Yeah Good Luck\Mina dokument\Mina C++ Program\Spelet.cpp `iHp' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
C:\Documents and Settings\Yeah Good Luck\Mina dokument\Mina C++ Program\Spelet.cpp In function `int main()':
173 C:\Documents and Settings\Yeah Good Luck\Mina dokument\Mina C++ Program\Spelet.cpp `iHp' undeclared (first use this function)


Och här är min källkod:


//Bibliotek
#include <iostream>
#include <ctime>
#include <string>


// Vilka funktioner som ska användas
using std::cout;
using std::cin;
using std::string;
using std::system;
using std::srand;
using std::rand;

//Deklarera funktioner så att de kan användas i 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änge man är i level 1

string sCmd; //För att läsa in kommandon från menyer m.m
int iCurrentHp =iHp; //Spelarens nuvarande liv, man dör lite när man slåss mot monster men man ska få tillbaka liven efter fighten

//Fiende Variabler
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 programsnutten så länge bool bGoLevel1 är TRUE
{
system("cls"); //Rensa skärmen

cout << "Välkommen till bana 1!\nMeny:\n-----\n[H]itta en fiende att slåss mot\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 till "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 svår att döda med magslag ^^
iEHp+=1;
else if (iEType == 2) //Om det är en huggorm så förlorar den extra liv
iEHp-=2;
}
else if (sCmd == "f" || sCmd == "F")
{
if (iEType == 1) //Om det är en giftfluga så får den extra liv, den är svår att döda med fotslag ^^
iEHp+=1;
else if (iEType == 3) //Om det är en råtta så förlorar den extra liv
iEHp-=2;
}
else if (sCmd == "h" || sCmd == "H")
{
if (iEType == 2) //Om det är en huggorm så får den extra liv, den är svår att döda med magslag ^^
iEHp+=1;
else if (iEType == 1) //Om det är en giftfluga så förlorar den extra liv
iEHp-=2;
}

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äller 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 längre på level 1
}
}//Slut på level1 loop

return 2; //Det här returneras om man dör

}


string NyttSpel()
{
string sTmpName; //Variabel för att temporärt spara spelarens namn, den finns bara i denna funktionen.
system("cls"); //rensa skärmen

cout << "Välkommen till mitt första spel!\nSkriv in ditt namn så att vi kan börja: ";

cin >> sTmpName;

return sTmpName;
}

int main()
{
//Deklarera variabler
string sCmd; //Används för att läsa av spelarens val i menyer
string sName; //För att lagra namnet på spelaren
bool bGo= true; //En variabel som är true så länge muvudmeny-loopen ska köras+
int iTmp; //Variabel för temporära saker

//Spelarens karaktärs variabler
int iHP = 10; // Spelarens HP
int iDmg_min = 2; //Spelarens Minsta skada
int iDmg_max = 5; //Spelarens maximum skada

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 namnvariablen
iTmp = Level1(sName, iHp, iDmg_min, iDmg_max);

if (iTmp == 3)
bGo = false;
if (iTmp == 2)
cout << "DU DOG, GAME OVER!";
}
else if (sCmd == "a" || sCmd == "A")
{
break; //Bryt ut från huvudmeny loopen
}
}//Slut på while loopen

cin.get();
cin.get();

return 0;
}




Så varför uppkommer dessa fel?
Tacksam för svar!

//Zpace




Independence 18:14 - 18:e Februari 2007 | Post #2
Administratör
Inlägg: 1800


Skicka PM
Denna rad i main-funktionen:
  1.  
  2. int iHP = 10; // Spelarens HP

Det ska vara iHp, med litet p, istället för iHP. Små detaljer som man enkelt missar Smiley

-------------------------

Vi är riddarna som säger fiskbulle!





Zpace 18:29 - 18:e Februari 2007 | Post #3
Medlem
Inlägg: 2


Skicka PM
Ojsan Smiley, tack så mycket!
Hade visst gjort det felet på flera ställen.
Men nu undrar jag bara hur jag fixar till så att man måste trycka på enter efter att man har vunnit över ett monster. Eftersom man inte hinner se "Grattis du spöade monstret".




NetNinja 19:22 - 18:e Februari 2007 | Post #4
Medlem
Inlägg: 116


Skicka PM
Kommandot system("pause"); somligger i <cstdlib> e ganska bra...

-------------------------





Independence 21:25 - 18:e Februari 2007 | Post #5
Administratör
Inlägg: 1800


Skicka PM
system("pause"); fungerar som sagt bara i DOS-kloner, en snyggare lösning är:
  1.  
  2. cin.ignore(255,'\n');
  3. cin.get();

Där du vill ha pausen.

-------------------------

Vi är riddarna som säger fiskbulle!





Sidor: 1

Forum huvudsida -> Programmering -> En fråga om del 18 i nybörjar guiden!
Atom feed

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