Shuffle
Ik ben bezig met een soort van spelletje te maken waarbij je een 4 cijferige code moet kraken. Hier krijg je 4 cijfers te zien en die moet je in een random order invullen en op die manier gewoon geluk hebben dat je het goed raad. Hiervoor genereer ik een random nummer tussen de 1000 en 9999 en die wil ik in random order laten zien op het scherm door middel van shuffle.
Deze code werkt alleen helaas niet, het echo'd helemaal geen nummer. De controle of ze het goede nummer hebben ingevuld kijkt naar $randomNum (dus ze raden als het ware $randomNum) en daarom kan ik dus niet eerst shuffle $randomNum en dan pas de echo, want dan zal het nummer wat ze moeten raden al direct op het scherm staan.
Enig idee hoe ik dit werkend kan krijgen?
Alvast bedankt!
// poNji
Gewijzigd op 01/01/1970 01:00:00 door Jasper Geelen
Je maakt van de code een sessie. Die sla je op en controleer je telkens dat iemand een poging doet om de code te kraken. Ben je bekend met sessies?
Henk schreef op 31.01.2010 17:47:
Ik snap Arrays nog niet helemaal dus had gehoopt een omweg te kunnen vinden.
Jezpur schreef op 31.01.2010 17:50:
Je maakt van de code een sessie. Die sla je op en controleer je telkens dat iemand een poging doet om de code te kraken. Ben je bekend met sessies?
De code om het te controleren heb ik al klaar en is inderdaad met sessies. Enige wat ik nodig heb is dat er een random 4 cijferig nummer weer gegeven moet worden.
Gewijzigd op 01/01/1970 01:00:00 door Jasper Geelen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
#| 4 cijferige code.
$code = rand(1000, 9999);
#| Shuffle code
$shuffled_code = str_shuffle($code);
#| Resultaat weergeven.
echo 'De goede code is '.$code.' en de geshufffelde code is '.$shuffled_code.'.';
?>
#| 4 cijferige code.
$code = rand(1000, 9999);
#| Shuffle code
$shuffled_code = str_shuffle($code);
#| Resultaat weergeven.
echo 'De goede code is '.$code.' en de geshufffelde code is '.$shuffled_code.'.';
?>
Gewijzigd op 01/01/1970 01:00:00 door - Mark -
rand()?
Maar eigenlijk krijg je toch al een random nummer met Je moet het random nummer raden door de geshuffelde variant in de goede volgorde te zetten. Dat wil zeggen als ik het goed begrepen heb.
Jezpur schreef op 31.01.2010 18:01:
Maar eigenlijk krijg je toch al een random nummer met rand()?
Klopt, maar dat is het nummer waar de controle naar kijkt. Het nummer dat in $randomNum word gegenereerd is het nummer wat de gebruiker moet raden, dus als je die echo'd dan is het vrij simpel.. Daarom moet het nummer in willekeurige volgorde worden weergegeven waardoor de gebruiker de cijfers weer door elkaar moet husselen.
@Mark: Werkt perfect! Dankjewel.
poNji schreef op 31.01.2010 17:51:
Ik snap Arrays nog niet helemaal dus had gehoopt een omweg te kunnen vinden.
Lijkt me dan juist een doel om ze te leren snappen in plaats van er omheen werken.
En waarom niet beginnen bij 0 ipv 1000?
TJVB schreef op 31.01.2010 18:10:
Lijkt me dan juist een doel om ze te leren snappen in plaats van er omheen werken.
poNji schreef op 31.01.2010 17:51:
Ik snap Arrays nog niet helemaal dus had gehoopt een omweg te kunnen vinden.
Lijkt me dan juist een doel om ze te leren snappen in plaats van er omheen werken.
Ga ik ook zeker doen, maar dat doe ik liever door met iets nieuws te beginnen ipv het in me huidige script te knutselen.
Pim schreef op 31.01.2010 18:24:
En waarom niet beginnen bij 0 ipv 1000?
Omdat het een 4 cijferig nummer moet zijn, en alles onder de 1000 is niet 4 cijferig :)
Dan krijg je alleen maar dat er extra vaak een 0 in voorkomt.
Wat denk je hiervan? (Niet getest)
Hij maakt een array met de getallen 0 t/m 9. Die wordt geschud, daarna pakt hij de eerste 4 en zet die in je sessie (om te kunnen controleren) en daarna pakt die een array van 1 t/m 4 om die te schudden en daarmee de volgorde weer te geven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$getallen = range(0,9);
shuffle($getallen);
$_SESSION['getallen'][1] = $getallen[0];
$_SESSION['getallen'][2] = $getallen[1];
$_SESSION['getallen'][3] = $getallen[2];
$_SESSION['getallen'][4] = $getallen[3];
$volgorde = shuffle(range(1,4));
foreach($volgorde AS $nummer)
{
echo $_SESSION['getallen'][$nummer];
}
?>
$getallen = range(0,9);
shuffle($getallen);
$_SESSION['getallen'][1] = $getallen[0];
$_SESSION['getallen'][2] = $getallen[1];
$_SESSION['getallen'][3] = $getallen[2];
$_SESSION['getallen'][4] = $getallen[3];
$volgorde = shuffle(range(1,4));
foreach($volgorde AS $nummer)
{
echo $_SESSION['getallen'][$nummer];
}
?>
LET OP! array_rand kiest sleutels en geen waardes, In dit geval is dat geen probleem het is even ter informatie.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
#| Vier verschillende cijfers tussen de 0 en 9 kiezen.
$cijfers = array_rand(range(0,9), 4);
#| 4 cijferige code samenstellen.
$code = implode('', $cijfers);
#| Shuffle code.
$shuffled_code = str_shuffle($code);
#| Resultaat weergeven.
echo 'De goede code is '.$code.' en de geshufffelde code is '.$shuffled_code.'.';
?>
#| Vier verschillende cijfers tussen de 0 en 9 kiezen.
$cijfers = array_rand(range(0,9), 4);
#| 4 cijferige code samenstellen.
$code = implode('', $cijfers);
#| Shuffle code.
$shuffled_code = str_shuffle($code);
#| Resultaat weergeven.
echo 'De goede code is '.$code.' en de geshufffelde code is '.$shuffled_code.'.';
?>
Gewijzigd op 01/01/1970 01:00:00 door - Mark -
Je moet de getallen dan ergens opslaan.
TJVB schreef op 31.01.2010 22:15:
Mark, die session is omdat ik het idee krijg dat de ts wilt dat de gebruiker het kan raden.
Je moet de getallen dan ergens opslaan.
Je moet de getallen dan ergens opslaan.
Correct. Bedankt voor jullie suggesties wat betreft hoe het anders kan, zal het morgen even gaan toepassen en testen :)
Nee hoor, juist de getallen 0 t/m 9999 zijn correct, 1000 t/m 9999 niet. Bij de eerste zijn alle getallen gelijk verdeeld, bij de tweede niet.