Hvis en funktion skal returnere en værdi skal du enten gøre det gennem en call-by-reference variabel som du sender med som argument, eller (som nok ville være smartest her) ved en retur værdi.
f.eks.
<pre>
int alder(){
int age = 13;
return age;
}
//Retur værdien sat til int istedet for ingen (void)
int main(){
cout << "Din alder er " << alder() << endl;
return 0;
}
</pre>
[Redigeret d. 04/10-03 23:46:02 af Agge Kempff]
Hmm...
Problemet er at jeg er igang med et MEGET simpelt spil til en af mine venner...
Her er koden så du kan se hvad jeg mener
void angreb(string type){
srand(time(NULL));
int skade = rand()%(int) (( 5 + 1) - (0))+ 0;
int liv = 50-skade;
cout << type << " skadede dig med " << skade << "\\nDu har nu " << liv << " i hitpoints\\n";
}
Jeg vil gerne have "int liv" til at blive overført til selve spillet så jeg har spillerens liv i main-delen
I will Survive...
Hej,
Så skal du få din "angreb" function til at returnere en int:
int angreb(string type)
{
srand(time(NULL));
int skade = rand()%(int) (( 5 + 1) - (0))+ 0;
int liv = 50-skade;
cout << type << " skadede dig med " << skade << "\\nDu har nu " << liv << " i hitpoints\\n";
return liv;
}
/Michael.
Nu er jeg ikke lige helt sikker på hvordan det virker med livspointene der, men måske du skulle have din liv variabel ude i main og så sende den med hver gang du kalder angreb().
For her vil man få 50 liv - skade hver gang angreb bliver kaldt, hvilket lyder lidt forkert.
Hvis vi siger du laver en int LivPlayer = 50; //50 liv til player
ude i din main, og så overfører LivPlayer sammen med angreb hver gang, så er det den samme variabel du arbejder med hele tiden.
f.eks.
<pre>
void Angreb(int &liv){
srand(time(NULL));
int skade = rand()%(int) (( 5 + 1) - (0))+ 0;
liv = liv - skade;
}
</pre>
Sådan kaldes den: (fra main) Angreb(LivPlayer);
Her er hvad der sker:
liv = liv - skade; liv (som bliver overført i funktionen) bliver ændret til liv - skade. Da det er & foran i funktionserklæringen (call by reference), sker ændringen også uden i main. Dvs ude i din main er LivPlayer nu ændret til den nye værdi (der nu er mindre end 50)
Så skal du selv gå ind og tjekke om han har flere liv tilbage osv osv ude i main.
En anden variant kunne være en bool (sand/falsk) der returnerede værdien af om spilleren var i live efter angrebet. Altså i live = sand, død (liv <= 0) = falsk.
<pre>
bool Angreb(int &liv){
srand(time(NULL));
int skade = rand()%(int) (( 5 + 1) - (0))+ 0;
liv = liv - skade;
return (liv > 0);
}
</pre>
Ved dette statement: "return (liv > 0);" vil sandhedsværdien af førnævnte udtryk blive returneret.
Hvis spilleren stadig har liv så returnere den true (1) ellers false (0).
Du kunne så kalde funktionen fra main således at dne bruger det resultat til noget:
if(Angreb(LivPlayer)){
//Han lever stadig så spillet kører endnu
}
else{
cout << "Du er død, må du hvile i fred."
}
[Redigeret d. 05/10-03 11:18:28 af Agge Kempff]