PHP boter-kaas en eieren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Hugo Zonderland

Hugo Zonderland

05/02/2009 16:40:00
Quote Anchor link
Ja ja een heel leuk iets om te maken. Alleen dit keer met een vorm van intelligentie vanuit de computer. Ik ben dus bezig met een script wat de zetten van de deelnemer detecteert en vervolgens daarop in speelt. Hoewel "de computer" ontiegelijk vals speelt. Wat gelijk mijn probleem is.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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]
    */
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
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' );?>

De constructie voor het veld.

En de opbouw van het veld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


Om de rijen te checken maak ik gebruik van een functie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
}?>


Even de toelichting.

De functie wordt aangeroepen als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$rij_een
=RijCheck(0, 3, 1);
            
            if ($rij_een == 0) {
            
                #return false, vraag rij 2 aan
                $rij_twee=RijCheck(4, 7, 1);
                
            }
else {
                
                #anders dan de return in de veldArray gooien
                $_SESSION['veldArray'][$rij_een]=$_SESSION['computer'];
                $computerzet=true;
            
            }
?>


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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$lege_waarde++;
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)
PHP script in nieuw venster Selecteer het PHP script
1
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;?>


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
 
PHP hulp

PHP hulp

28/12/2024 17:22:15
 
Dennis Mertens

Dennis Mertens

05/02/2009 16:49:00
Quote Anchor link
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...
 
Hugo Zonderland

Hugo Zonderland

05/02/2009 16:54:00
Quote Anchor link
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...


Hoe zou jij dit aanpakken dan?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.