Permalänk

PHP, tärning spel

Tjena!
Jag försöker göra mitt första tärning spel i php, problemet är att jag inte vet hur jag ska göra för att det ska stå
t.ex.
Spelare y är vinnaren han fick X antal poäng

Detta försöker jag göra men har inte kunskapen till det.
Därför hoppas jag att ni kan hjälpa mig

<?php include('arrays.php'); require("index.php"); $spelare = $_REQUEST['spelare']; if(isset($_POST['submit'])){ echo " Du valde " . $spelare . " spelare"; echo "<br />"; /* En array för den totala summan som printas ut senare för varje person . $totaler = array(); for($i = 1; $i <= $_REQUEST['spelare']; $i++){ //om rätt svar skriv in alltså "The Game" så skapas nu spelare. $totaler[$i] = $totaler[$i] + $total; echo "<h5> Du har " . $totaler[$i] ."</h5>"; $i=$i+1; } } */ echo "SPELARE" . ($i ). "<br />"; //Den skriver ut 5 tärningar som får random tal mellan 1-6, printar även ut det tolala summan för varje person $total = 0; $totaler[$i] = 0; for($r = 1; $r <= 5; $r++){ $slag = rand(1,6); echo "<img src=\"".$slag.".png\">"; $total = $total + $slag; } $totaler[$i] = $totaler[$i] + $total; echo "<h5> Du har " . $totaler[$i] ."</h5>"; } }

Jag försöker göra så att det står längst ner att Spelare (nr) vann med x Poäng

Tack på förhand

Permalänk
Medlem

Alldeles för grötigt för att någon ska orka sätta sig in i din kod

Måste bara fråga vad tanken med denna if-sats är?

if($_REQUEST['hemligt'] == "The Game") { $_REQUEST['spelare'] = $_REQUEST['spelare']; }

Permalänk

Oj, har råkat stoppa in en extra kod där! tack för tipset

Permalänk
Medlem

Är helt på samma linje som drewi, både angående kodraden utan betydelse och grötigheten i koden. Läste ungefär halva men orkade inte sätta mig in i den mera. Försök fixa indenteringen så att den alltid är korrekt, och skrev ut lite noggrannare var i koden du har vilket problem, så tror jag folk är mer angelägna att hjälpa. Ett tips är också att byta ut [code]-taggarna till [PHP]-taggar för korrekt färgsättning.

Permalänk
Skrivet av Tazavoo:

Är helt på samma linje som drewi, både angående kodraden utan betydelse och grötigheten i koden. Läste ungefär halva men orkade inte sätta mig in i den mera. Försök fixa indenteringen så att den alltid är korrekt, och skrev ut lite noggrannare var i koden du har vilket problem, så tror jag folk är mer angelägna att hjälpa. Ett tips är också att byta ut [code]-taggarna till [PHP]-taggar för korrekt färgsättning.

Kanske lättare nu?

Permalänk
Medlem
Skrivet av Mostwanted:

Kanske lättare nu?

Mycket bättre!

Testa att lägga till följande i slutet:

$hplayer; $hscore = 0; //Går igenom alla elementen i totaler. Värdena kan kommas åt med variabeln val, nycklarna med key foreach ($totaler as $key => $val) { if ($val > $hscore) { $hscore = $val; $hplayer = $key; } } echo "Spelare ".$hplayer." är vinnaren med ".$hscore." poäng!";

Har inte testat koden själv, men om det inte finns några direkt stavfel borde den fungera...

EDIT: Följande fungerar, fråga om det är något i koden som är oklart, för huvudsaken är ändå att du förstår koden du gör:

<?php $spelare = 2; echo " Du valde " . $spelare . " spelare"; echo "<br />"; for ($i = 1; $i <= $spelare; $i++) { echo "SPELARE" . ($i ). "<br />"; //Den skriver ut 5 tärningar som får random tal mellan 1-6, printar även ut det tolala summan för varje person $total = 0; $totaler[$i] = 0; for($r = 1; $r <= 5; $r++){ $slag = rand(1,6); echo "<img src=\"".$slag.".png\">"; $total = $total + $slag; } $totaler[$i] = $totaler[$i] + $total; echo "<h5> Du har " . $totaler[$i] ."</h5>"; } $hplayer; $hscore = 0; //Går igenom alla elementen i totaler. Värdena kan kommas åt med variabeln val, nycklarna med key foreach ($totaler as $key => $val) { if ($val > $hscore) { $hscore = $val; $hplayer = $key; } } echo "Spelare ".$hplayer." är vinnaren med ".$hscore." poäng!"; ?>

Eftersom jag inte har tillgång till array.php, $_POST['spelare'], index.php o.s.v. gjorde jag lite ändringar i början som du inte skall göra.

Permalänk

Tack!!! Det var exakt det jag jag ville!
Skulle du kunna försöka förklara den här biten för mig "foreach ($totaler as $key => $val"

Edit: Hur gör man om man vill skriva ut Spelare 1 och Spelare 2 fick 20påäng?.
Tack på förhand!

Permalänk
Medlem

Raden "foreach ($totaler as $key => $val)" går igenom en array och gör något för varje element i arrayen. Funktionen "foreach" betyder att den gör det för varje element i en array, $totaler anger vilken array, och $key => $val är namnet på nyckeln och värdet på den plats i arrayen som just då gås igenom. Ett exempel som kanske gör det lite klarare:

$test = array(); //Tre värden sätts in i arrayen, det som står inom [] är nyckeln, och behöver inte vara en siffra $test["Hans"] = 5; $test[2] = 19; $test[3] = "Olof"; /*Alla värden gås igenom och koden inom klamrar körs för varje element. $random och $sweclockers anger bara i vilka variabler vi vill lagra nyckeln och värdet vid varje varv, så att vi kan komma åt dem inne i loopen */ foreach ($test as $random => $sweclockers) { if ($random == "Hans") { $varde = $sweclockers; //$varde får värdet på den plats i arrayen som har nyckeln "Hans", d.v.s. 5 } }

Ifall du vill göra så att alla spelare med samma poäng som vinnaren skrivs ut blir det genast lite mer invecklat. Det kan göras på diverse sätt, men jag skulle använda någon slags array för det. Ett sätt skulle kunna vara att först genom att använda $hscore-variabeln se vilket som är det högsta värdet. Sedan skapar du en ny array, och loopar igenom $totaler en gång till. Denna gång gör du så att varje nyckel som har samma värde som $hscore så sparar du i den nya arrayen (t.ex. om $hscore är 19, och $totaler[1], $totaler[3] och $totaler[7] alla har det värdet så sparar du siffrorna 0, 3 och 7 i den nya arrayen). Därefter kan du skriva ut vilka alla spelare som nådde högsta poäng.

Permalänk
Skrivet av Tazavoo:

Raden "foreach ($totaler as $key => $val)" går igenom en array och gör något för varje element i arrayen. Funktionen "foreach" betyder att den gör det för varje element i en array, $totaler anger vilken array, och $key => $val är namnet på nyckeln och värdet på den plats i arrayen som just då gås igenom. Ett exempel som kanske gör det lite klarare:

$test = array(); //Tre värden sätts in i arrayen, det som står inom [] är nyckeln, och behöver inte vara en siffra $test["Hans"] = 5; $test[2] = 19; $test[3] = "Olof"; /*Alla värden gås igenom och koden inom klamrar körs för varje element. $random och $sweclockers anger bara i vilka variabler vi vill lagra nyckeln och värdet vid varje varv, så att vi kan komma åt dem inne i loopen */ foreach ($test as $random => $sweclockers) { if ($random == "Hans") { $varde = $sweclockers; //$varde får värdet på den plats i arrayen som har nyckeln "Hans", d.v.s. 5 } }

Ifall du vill göra så att alla spelare med samma poäng som vinnaren skrivs ut blir det genast lite mer invecklat. Det kan göras på diverse sätt, men jag skulle använda någon slags array för det. Ett sätt skulle kunna vara att först genom att använda $hscore-variabeln se vilket som är det högsta värdet. Sedan skapar du en ny array, och loopar igenom $totaler en gång till. Denna gång gör du så att varje nyckel som har samma värde som $hscore så sparar du i den nya arrayen (t.ex. om $hscore är 19, och $totaler[1], $totaler[3] och $totaler[7] alla har det värdet så sparar du siffrorna 0, 3 och 7 i den nya arrayen). Därefter kan du skriva ut vilka alla spelare som nådde högsta poäng.

Tack! tror jag hängde med för det mesta!
Ska försöka fixa det imorgon

Bara en snabb fråga till verkar som att $hplayer; inte har något funktion i början?

$hplayer; <-- kan jag ta bort den eller? $hscore = 0; //Går igenom alla elementen i totaler. Värdena kan kommas åt med variabeln val, nycklarna med key foreach ($totaler as $key => $val) { if ($val > $hscore) { $hscore = $val; $hplayer = $key; } } echo "Spelare ".$hplayer." är vinnaren med ".$hscore." poäng!";

Uppskattas verkligen!

Permalänk
Medlem
Skrivet av Mostwanted:

Tack! tror jag hängde med för det mesta!
Ska försöka fixa det imorgon

Bara en snabb fråga till verkar som att $hplayer; inte har något funktion i början?

$hplayer; <-- kan jag ta bort den eller? $hscore = 0; //Går igenom alla elementen i totaler. Värdena kan kommas åt med variabeln val, nycklarna med key foreach ($totaler as $key => $val) { if ($val > $hscore) { $hscore = $val; $hplayer = $key; } } echo "Spelare ".$hplayer." är vinnaren med ".$hscore." poäng!";

Uppskattas verkligen!

Du kan ta bort den! Lade till den där av osäkerhet - i vissa programmeringsspråk där variabler skilt måste deklareras (t.ex. int bananer; eller string fornamn; ) så är det vanligt att de som deklareras innanför en loop endast existerar medan loopen körs och kastas bort när den är färdig. Om man däremot deklarer variabeln före loopen och ändrar värde på den inne i loopen så behåller den värdet efter att loopen är körd. Nu fungerar tydligen inte PHP på det sättet, så det är fritt fram att ta bort!

Permalänk

Aha! då förstår jag! tar genast bort den.
Tack så hemskt mycket för din tid