PHP boter-kaas en eieren
Hier onder het speelveld en een denk manier.
Elke cel in het speelveld heeft een nummer (1t/m9). Dus als we dan gaan bekijken hoe de speler zijn zetten heeft gedaan doen we dat door te controleren in welke rij 2 of meer zetten van de speler staan. Dus niet alle mogelijke combinaties in een IF constructie te plaatsen.
Ik tel simpel weg hoevaak de speler in een bepaalde rij heeft geklikt. Is dit meer dan 1 dan speelt de computer daarop in met een blokkade zet.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
#Per rij -> horizontaal, verticaal en diagonaal de gebruikte vakken detecteren
/*
* Rij1 : 1-2-3 [+1] -------------
* Rij2 : 4-5-6 [+1] | 1 | 2 | 3 |
* Rij3 : 7-8-9 [+1] |-----------|
* Rij4 : 1-4-7 [+3] | 4 | 5 | 6 |
* Rij5 : 2-5-8 [+3] |-----------|
* Rij6 : 3-6-9 [+3] | 7 | 8 | 9 |
* Rij7 : 1-5-9 [+4] -------------
* Rij8 : 3-5-7 [+2]
*/?>
#Per rij -> horizontaal, verticaal en diagonaal de gebruikte vakken detecteren
/*
* Rij1 : 1-2-3 [+1] -------------
* Rij2 : 4-5-6 [+1] | 1 | 2 | 3 |
* Rij3 : 7-8-9 [+1] |-----------|
* Rij4 : 1-4-7 [+3] | 4 | 5 | 6 |
* Rij5 : 2-5-8 [+3] |-----------|
* Rij6 : 3-6-9 [+3] | 7 | 8 | 9 |
* Rij7 : 1-5-9 [+4] -------------
* Rij8 : 3-5-7 [+2]
*/?>
Rij1 t/m 8 zijn alle horizontale, verticale en diagonale methoden om 3 op een rij te krijgen. Of je nou in rij 1 cel 1+2, 1+3 of 3+2 gebruikt dit wordt geteld als 2 zetten en daar zal de computer een blokkade zet zetten.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$_SESSION['veldArray'] = array(
1 => 'empty',
2 => 'empty',
3 => 'empty',
4 => 'empty',
5 => 'empty',
6 => 'empty',
7 => 'empty',
8 => 'empty',
9 => 'empty' );?>
$_SESSION['veldArray'] = array(
1 => 'empty',
2 => 'empty',
3 => 'empty',
4 => 'empty',
5 => 'empty',
6 => 'empty',
7 => 'empty',
8 => 'empty',
9 => 'empty' );?>
De constructie voor het veld.
En de opbouw van het veld:
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
<html> <table border="1" width="50%" height="50%" align="center">
<tr>
<td align="center" onclick="window.location='speelveld2.php?id=1'"><?php print $_SESSION['veldArray'][1]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=2'"><?php print $_SESSION['veldArray'][2]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=3'"><?php print $_SESSION['veldArray'][3]; ?></td>
</tr>
<tr>
<td align="center" onclick="window.location='speelveld2.php?id=4'"><?php print $_SESSION['veldArray'][4]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=5'"><?php print $_SESSION['veldArray'][5]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=6'"><?php print $_SESSION['veldArray'][6]; ?></td>
</tr>
<tr>
<td align="center" onclick="window.location='speelveld2.php?id=7'"><?php print $_SESSION['veldArray'][7]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=8'"><?php print $_SESSION['veldArray'][8]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=9'"><?php print $_SESSION['veldArray'][9]; ?></td>
</tr>
</table></html>
<tr>
<td align="center" onclick="window.location='speelveld2.php?id=1'"><?php print $_SESSION['veldArray'][1]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=2'"><?php print $_SESSION['veldArray'][2]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=3'"><?php print $_SESSION['veldArray'][3]; ?></td>
</tr>
<tr>
<td align="center" onclick="window.location='speelveld2.php?id=4'"><?php print $_SESSION['veldArray'][4]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=5'"><?php print $_SESSION['veldArray'][5]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=6'"><?php print $_SESSION['veldArray'][6]; ?></td>
</tr>
<tr>
<td align="center" onclick="window.location='speelveld2.php?id=7'"><?php print $_SESSION['veldArray'][7]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=8'"><?php print $_SESSION['veldArray'][8]; ?></td>
<td align="center" onclick="window.location='speelveld2.php?id=9'"><?php print $_SESSION['veldArray'][9]; ?></td>
</tr>
</table></html>
Om de rijen te checken maak ik gebruik van een functie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
function RijCheck($z, $x, $c) {
for ($i=$z; $i<$x; $i=$i+$c) {
$lokatie[$i]=$_SESSION['veldArray'][$i];
if ($_SESSION['veldArray'][$i] == $_SESSION['gebruiker']) {
#tel de aantallen.
$_SESSION['h']++;
if ($_SESSION['h'] > 1) {
unset($_SESSION['h']);
if (in_array('empty', $lokatie)) {
#annalyseer de rij
$lege_plek=array_search('empty', $lokatie);
$lege_plek++;
return $lege_plek;
} else {
$lege_plek=0;
return $lege_plek;
}
} else {
$lege_plek=0;
return $lege_plek;
}
} #afsluiten van de if
} #afsluiten van de for
}?>
function RijCheck($z, $x, $c) {
for ($i=$z; $i<$x; $i=$i+$c) {
$lokatie[$i]=$_SESSION['veldArray'][$i];
if ($_SESSION['veldArray'][$i] == $_SESSION['gebruiker']) {
#tel de aantallen.
$_SESSION['h']++;
if ($_SESSION['h'] > 1) {
unset($_SESSION['h']);
if (in_array('empty', $lokatie)) {
#annalyseer de rij
$lege_plek=array_search('empty', $lokatie);
$lege_plek++;
return $lege_plek;
} else {
$lege_plek=0;
return $lege_plek;
}
} else {
$lege_plek=0;
return $lege_plek;
}
} #afsluiten van de if
} #afsluiten van de for
}?>
Even de toelichting.
De functie wordt aangeroepen als volgt:
Code (php)
Hier bij is 0 het begin, 3 het einde en 1 de verhoging. Deze sturen de for loop aan die de controle uitvoeren. Er wordt eerst bekeken of er wel 2 zetten zijn gedaan in de aangegeven rij. Als dit waar is wordt er gekeken waar er precies een leeg vak staat, dmv te kijken of de waarde van de cel 'empty' is. Als dit zo is wordt omdat een array begint te tellen op [0]. En mijn cellen op 1. Als dit een negatief geeft dan een nul terug geven en de volgende rij aanvragen. Dit gaat net zo lang door totdat we zeker weten dat er nergens 2 gebruikers waarden in het veld staan. De computer zal dan een random plek uitzoeken waar nog geen waarde in staat.
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
#Als er nergens 2 waarden achter elkaar staan dan maar een random zet
while(list($x, $z)=each($_SESSION['veldArray'])) {
if ($z=='empty') {
$i++;
$_SESSION['mogelijkezet'][$i]=$x;
}
}
#Array is aangemaakt. Nu checken waar er plek is
$max=count($_SESSION['mogelijkezet']);
$rand=rand(1, $max);
$Zet=$_SESSION['mogelijkezet'][$rand]; $_SESSION['veldArray'][$Zet]=$_SESSION['computer'];
$computerzet=true;?>
#Als er nergens 2 waarden achter elkaar staan dan maar een random zet
while(list($x, $z)=each($_SESSION['veldArray'])) {
if ($z=='empty') {
$i++;
$_SESSION['mogelijkezet'][$i]=$x;
}
}
#Array is aangemaakt. Nu checken waar er plek is
$max=count($_SESSION['mogelijkezet']);
$rand=rand(1, $max);
$Zet=$_SESSION['mogelijkezet'][$rand]; $_SESSION['veldArray'][$Zet]=$_SESSION['computer'];
$computerzet=true;?>
Dit geheel staat dan weer in een while loop, die zodra er wel een zet gedaan is, volgens mij zou moeten stoppen door hem te onder breken met $computerzet=true. Standaard heeft deze een false.
Nu is het probleem dat de computer soms maar even voor de grap even 2-3 zetten tegelijk doet, of de input van de deelnemer overschrijft.. Waar kijk ik overheen of waar vergis ik mij in?
Gewijzigd op 01/01/1970 01:00:00 door Hugo Zonderland
En met in_array controleren of het veld wat jij wilt gebruiken (of de computer) al is gebruikt...
Dennis Mertens schreef op 05.02.2009 16:49:
Misschien een variabele die je telkens overschrijft na dat er iets is gedaan, en in een array bij houden welke velden al zijn aangeklikt?
En met in_array controleren of het veld wat jij wilt gebruiken (of de computer) al is gebruikt...
En met in_array controleren of het veld wat jij wilt gebruiken (of de computer) al is gebruikt...
Hoe zou jij dit aanpakken dan?