Sten saks papir (1 > 3)???

Tags:    php

Hey.. Jeg øver mig i noget meget simpel PHP, og laver derfor et sten-saks-papir spil. Nu vil jeg så bare gerne have en linje hvor der står hvem der vinder. Dette kan selvfølgelig opnås vha. en forfærdelig masse if-sætninger, men der må da være en næmmere måde?
Det er selvfølgelig meget nemt at sige at hvis $a er større end $b, så vinder første spiller. Men hvis $a er "Papir"(1), og $b er "Sten"(3), så skal $a jo i princippet værre større en $b.

Min nuværende kode er som følger:
Head:
Fold kodeboks ind/udKode 


Body:
Fold kodeboks ind/udKode 


Jeg tænker at det må være noget med true og false, men jeg kan ikke se hvordan det skulle sættes op. Halp anyone? :)



Et par if-sætninger er efter min mening ok at bruge her. Der er trods alt ikke så mange mulige udfald. Det kan dog også gøres lidt mere "kompliceret".

Hvis du ændrer de værdier sten, saks og papir har til :
1 = sten, 2 = saks, 3 = papir

Så kan vi lave denne simple resultatliste:
1 v 2 = 1
1 v 3 = 3
2 v 3 = 2

Ud fra denne tabel kan vi konkludere, at hvis 2 "tal" der ligger lige op af hinanden, så er dét det laveste som vinder. Vi kan også udelukke hvor $a == $b som uafgjort

echo $a." vs ".$b."<br>";
if ($a==$b) {echo "uafgjort";}

if (abs($a-$b)==1){ echo min($a,$b)." vandt"; }
else {echo max($a,$b)." vandt";}

Koden er ikke testet!



Indlæg senest redigeret d. 09.04.2010 13:42 af Bruger #955
Fold kodeboks ind/udKode 




Fold kodeboks ind/udKode 

Bare lige for at få stillet min egen nysgerrighed, har jeg ret i at dette statement: (($player2 + 1) % 3) faktisk bare incrementere tallet med 1, men hvis tallet bliver 3, bliver det sat til 0 igen?



Fold kodeboks ind/udKode 

Bare lige for at få stillet min egen nysgerrighed, har jeg ret i at dette statement: (($player2 + 1) % 3) faktisk bare incrementere tallet med 1, men hvis tallet bliver 3, bliver det sat til 0 igen?


Det er korrekt. '%' betyder 'modulus' som igen betyder 'heltalsrest ved division'.



t