Avatar billede lakana Nybegynder
10. september 2008 - 08:38 Der er 4 kommentarer og
1 løsning

Hjælp til en "Monty Hall-simulator"

Jeg er igang med en "Monty Hall-simulator", men jeg har et problem. Lige nu har jeg gjort som nedenfor, og det virker fint. Den vælger en dør, som hverken er den rigtige (altså den med gevinst) eller den 'spilleren' har valgt, og så åbner den den. Men jeg vil gerne kunne tilføje muligheden for at have flere døre end 3, og så har jeg forsøgt, at fjerne linjen: "$opened = $remaining[array_rand( $remaining )];", og så rette "if( $door == $opened ) {" til at bruge php-funktionen in_array(), for at tjekke om den er i "remaining". Problemet er så bare, at hvis man allerede har valgt den korrekte dør, så åbner den ALLE døre undtagen den man har valgt, og så er der ikke så meget spil ved det længere :D

# hvilke døre er der tilbage
$remaining = array();
foreach( $doors as $door ) {
    if( $door != $prize && $door != $first_choice ) {
        array_push( $remaining, $door );
    }
}
$opened = $remaining[array_rand( $remaining )];

# udskriv døre
foreach( $doors as $door ) {
    if( $door == $opened ) {
        echo "<div class=\"goat\">Door #{$door}</div>";
    } else {
        echo "<div><a href=\"{$_SERVER['PHP_SELF']}?first_choice={$first_choice}&second_choice={$door}\">Door #{$door}</a></div>";
    }
}
Avatar billede jakobdo Ekspert
10. september 2008 - 09:26 #1
Er det ikke et spørgsmål om at smide alle svar i et array.
Kører en random funktion, som vælger en vinder og gemmer det i en session.
Så vises alle døre.
Hver gang der klikkes på en dør, tjekkes om det er den vi har i session, hvis ikke, åbnes den og der kan gættes igen ?
Avatar billede lakana Nybegynder
10. september 2008 - 09:29 #2
jakobdo - jeg har lavet det hele, det handler bare om det kodestykke jeg har vist her.

efter personens første gæt, så skal der vises en dør, hvor der stensikkert IKKE er gevinst, og det virker fint sådan som jeg har gjort det nu hvis der kun er 3 døre, men jeg vil gerne have muligheden for at tilføje mange døre.
Avatar billede jakobdo Ekspert
10. september 2008 - 10:46 #3
Avatar billede pidgeot Nybegynder
10. september 2008 - 10:54 #4
Umiddelbart bud:

$Efter du har lavet alle dine array_push og er ude af den foreach, skal dusætte følgende linjer ind:

if ($prize == $first_choice)
  array_pop($remaining);

Evt. kan du blande arrayet inden med shuffle, så den fjerner en tilfældig dør, i stedet for den sidst tilføjede.
Avatar billede lakana Nybegynder
07. august 2011 - 20:30 #5
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester