Mijneveger in PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Matthias Degreef

Matthias Degreef

28/05/2011 23:34:47
Quote Anchor link
Hallo iedereen,

we moeten voor school een eindopdracht maken ivm PHP, in mijn geval is dat het programma mijneveger schrijven. Het probleem is dat wij slechts beperkte dingen gezien hebben als, forms, for-en if-lussen en arreys. Ook hadden we al de basis van HTML gezien (tabellen, opmaak,..). Het probleem is dus dat die eindopdracht ineens een hele grote stap is van gewone korte oefeningen naar een grote opdracht van een groot aantal lijnen, en dat ik dus geen manier zie om zoiets te doen werken.

Maar dus, de bedoeling bij mij is dus om met gewoon standaard PHP in kladblok het spel mijneveger te schrijven op een 9x9 spelbord met 10 mijnen, dus eigenlijk een meer amateuristischere versie van het echte spel. Ook moeten die mijnen willekeurig worden geplaatst.
Ik heb tot nu toe al een tabel kunnen maken van 9x9 met allemaal radio velden maar ik heb echt geen idee hoe het verder moet. Ik weet dat ik met arreys moet werken omdat ik later in mijn bestand moet kunnen nagaan of er ergens een mijn ligt of niet. Ook weet ik niet goed hoe ik, na op 'ga door' te klikken, die vakken met cijfers 1 tot 8 kan bekomen (om aan te duiden hoeveel mijnen er in de buurt liggen).
Dit heb ik tot nu toe al:

<!DOCTYPE HTML>
<head>Mijneveger</head>
<body>
<form action="mijnevegerspel1.php" method="post">
<table border="1" cellpadding="5" cellspacing="1" width="30%">
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
<?php
for ($i = 0 ; $i <= 8 ; $i++)
{

echo"
<tr>"
;
for ($j = 0 ; $j <= 8 ; $j++)
{


echo"
<td><input type=\"radio\" name= \"veld\" value=$veld[$i][$j]/>
</td>
"
;

}

echo"
</tr>
"
;
}


?>


</table>
<input type="submit" value="Ga door"/>

</form>
</body>
</html>


Mijn algemene vraag is dus: hoe kan ik met de simpele PHP functies een werkend mijneveger spel maken? Ik vraag dus niet noodzakelijk om de opdracht voor mij op te lossen, maar om mij aan verstaanbare en liefst niet te ingewikkelde manieren te helpen om dit spel mooi te doen werken (voor zover dat kan in deze simpele programmeertaal).

Alvast bedankt voor hulp en tips.
Gewijzigd op 28/05/2011 23:35:30 door Matthias Degreef
 
PHP hulp

PHP hulp

04/03/2021 23:43:19
 
Jelmer -

Jelmer -

29/05/2011 00:43:26
Quote Anchor link
Ik zou eerst bedenken hoe je het spel aan de kant van PHP gaat modelleren. Hoe ga je de vakjes van het bord bijhouden? Wat ga je per vakje onthouden? Hoe ga je uitrekenen wat er in zo'n vakje moet worden weergegeven (cijfer voor dichtbijzijnde mijnen) en wat ga je doen wanneer zo'n vakje geopend wordt? Ga je dan net zoals in mijnenveger alle omliggende veilige vakjes ook automatisch openen?

Heb je geleerd hoe je functies moet maken? Die onderdelen onderdelen die ik noemde kan je mooi functies voor maken. Bijv. een functie die je het speelbord en een x en y coördinaat geeft, en die dan het getalletje teruggeeft wat in dat vakje zou moeten komen te staan.

Je kan al dat soort functies gemakkelijk maken zonder je op dat moment druk te maken over hoe je het formulier (de tabel) moet gaan maken en verwerken, of hoe je het speelbord tijdens het spel moet gaan onthouden. Programmeer in kleine stapjes, en test ieder stapje. Je zit dan minder te zoeken naar fouten (want hoeveel kan er mis gaan in een klein stapje?) en je programma wordt er beter begrijpbaar door (als je goeie namen aan je functies geeft)
 
Matthias Degreef

Matthias Degreef

29/05/2011 11:12:57
Quote Anchor link
Ik had gedacht om met een arrey die vakjes bij te houden en de vakjes met een mijn de waarde 1 te geven en die zonder een mijn de waarde 0. Ik weet wel niet hoe ik dat willekeurig kan laten doen en hoe ik dat cijfer voor dichtsbijzijnde mijnen kan laten verschijnen. Ook is dat met die omliggende veilige vakjes niet noodzakelijk nodig, het mag maar is optioneel.

Jelmer rrrr op 29/05/2011 00:43:26:
Bijv. een functie die je het speelbord en een x en y coördinaat geeft, en die dan het getalletje teruggeeft wat in dat vakje zou moeten komen te staan.


Welke functie bedoel je dan?
 
Jelmer -

Jelmer -

29/05/2011 11:41:26
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
function aantal_aanliggende_mijnen($spelbord, $x, $y)
{

    aantal_mijnen = 0;
    voor $x - 1 tot $x + 1
        voor $y - 1 tot $y + 1
            als spelbord[x][y] is mijn
                hoog aantal_mijnen op.
    
    return aantal_mijnen
}
?>

Een zelf-gemaakte functie.

Begin met een zelf gemaakt speelveld, gewoon iets a la
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$speelveld
= array(
    array(0,0,0,0,0),
    array(0,1,1,1,0),
    array(0,1,0,1,0),
    array(0,1,1,1,0),
    array(0,0,0,0,0)
);

?>

Dat is veel makkelijker testen omdat je nu weet wat het getal voor vakje 3,3 moet zijn. Het speelveld willekeurig bezaaien met mijnen komt daarna wel, is een los onderdeel, kan je apart oplossen.
 
Matthias Degreef

Matthias Degreef

29/05/2011 13:17:25
Quote Anchor link
Bij het eerste geeft hij de volgende melding
Parse error: syntax error, unexpected '=' in J:\xampp\htdocs\hulp.php on line 4

Maar dat is nu juist het probleem, zo een functie zoals jij gebruikt hebben wij nog nooit gezien, ik weet dus ook niet goed wat ik daarmee moet aanvangen... Ik zou het graag snappen maar we hebben gewoon te weinig basis om zo'n eindopdracht te maken.

En dat tweede deel, zet ik dat er dan gewoon bij? Maar dan in 9x9?
 
Pim -

Pim -

29/05/2011 13:34:01
Quote Anchor link
Jelmer's voorbeeld is pseudocode: het werkt niet (is geen PHP) maar het laat zien hoe een dergelijke functie zou moeten werken.

Maar als je niet geleerd hebt functies te maken, is het idd wel een erg grote stap naar mijneNveger.
Gewijzigd op 29/05/2011 13:36:06 door Pim -
 
PHP Scripter

PHP Scripter

29/05/2011 16:23:55
Quote Anchor link
Misschien kan je ook eens hier of hier kijken. Succes!
 
Matthias Degreef

Matthias Degreef

29/05/2011 16:45:19
Quote Anchor link
Die laatste link had ik al eens gevonden, maar ik ben er niets mee aangezien hij verschillende connecties maakt. En met dat eerste heb ik dus al mijn probleem kunnen oplossen hoe ik de mijnen willekeurig kan laten plaatsen, nu moet ik dat nog kunnen inwerken in mijn eigen programma :p
 
PHP Scripter

PHP Scripter

29/05/2011 17:05:02
Quote Anchor link
Matthias, misschien kun je vanuit dat script wat inspiratie opdoen en toepassen op je eigen script. Niet letterlijk kopiëren, maar gewoon een idee opdoen. Alhoewel zijn versie wel iets anders werkt. Je moet daar juist de mijnen opzoeken.
 
Matthias Degreef

Matthias Degreef

31/05/2011 17:17:39
Quote Anchor link
Ik vind maar niet hoe ik die random mijnen (van in de eerste link van PHP Scripter) in mijn oorspronkelijke tabel kan krijgen met die radio velden. Kan iemand helpen?
 
Pieter van Linschoten

Pieter van Linschoten

31/05/2011 17:54:27
Quote Anchor link
Zoals Jelmer al aangaf, maak je eerst een lijst met het speelveld.
Dit genereer je natuurlijk automatisch, maar dit is wel handig om te testen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$speelveld
= array(
    array(0,0,0,0,0),
    array(0,1,1,1,0),
    array(0,1,0,1,0),
    array(0,1,1,1,0),
    array(0,0,0,0,0)
);

?>


Ik zou een array als deze opslaan in de sessie, of serialized in de database opslaan.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
serialize();
?>


Vervolgens maak je een formulier
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
<style>
.field{ background: #ccc; height: 10px; width: 10px; float: left; }
.green{ background: #006A00 url('good.jpg') top left no-repeat; }
.mine { background: #f00 url('mine.jpg') top left no-repeat; }
</style>
<?
foreach($speelveld as $x => $y_array)
{

   foreach($y_array as $y => $veld_type)
   {

       print '<div class="field" rel="'$x.'_'.$y.'">&nbsp;</div>';
   }

   print '<div style="clear: both;">'
}
?>

Laat met een javascript ajax call uitvoeren, om de gevolgen van de klik te berekenen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?
// Dit kan goed met jQuery
$('.field').click(function(){
   rel = $(this).attr('rel');
   // verwerk pagina aanroepen
});
$('.field').rightclick(function()
{

    // pagina die een vlag neerzet
});
?>


--- Verwerkpagina ---
Op deze pagina worden een javascript actielijst gegenereerd.

Bijvoorbeeld een mijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<script type="text/javascript">
<?php
print '$(\'.field[rel='.$rel.'\').addClass(\'mine\');';
?>
</script>
Gewijzigd op 31/05/2011 17:58:53 door Pieter van Linschoten
 
Matthias Degreef

Matthias Degreef

31/05/2011 18:06:53
Quote Anchor link
Het spijt me maar het mag enkel uit php codes bestaan, en het is dus ook niet met javascript... we werken met XAMPP en dus helpen javascript codes niet. En ik zou graag dit:

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
<?php
// een array 1-81 in random volgorde zetten
$array = range(1,81);
shuffle($array);
// eerste 108 selecteren
$array_slice = array_slice($array, 0, 10);

echo '<table><tr><td></td>';
for($i = 1;$i < 101;$i++){
   //zit $i in $array_slice
   if(in_array($i, $array_slice)){
       echo '<td style="color:f00;">1</td>'; //1 is mijn
   }
   else{
       echo '<td id="vak">0</td>'; //0 is geen mijn
   }

   if($i%10 == 0){
      echo '</tr><td>';
   }
}

echo '</tr></table>';
?>



In dit krijgen:


<!DOCTYPE HTML>
<head>Mijneveger</head>
<body>
<form action="mijnevegerspel1.php" method="post">
<table border="1" cellpadding="5" cellspacing="1" width="30%">


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
<?php
for ($i = 0 ; $i <= 8 ; $i++)
{

echo"
<tr>"
;
for ($j = 0 ; $j <= 8 ; $j++)
{


echo"
<td><input type=\"radio\" name= \"veld\" value=$veld[$i][$j]/>
</td>
"
;

}

echo"
</tr>
"
;
}


?>



</table>
<input type="submit" value="Ga door"/>

</form>
</body>
</html>
Gewijzigd op 31/05/2011 18:07:40 door Matthias Degreef
 
PHP Scripter

PHP Scripter

31/05/2011 18:10:27
Quote Anchor link
Heb je het zelf al geprobeerd?
 
Matthias Degreef

Matthias Degreef

31/05/2011 18:16:09
Quote Anchor link
Ja, en ik krijg altijd meldingen dat er ergens een foutje zit. Ik blijf ondertussen zelf proberen hoor! ;)
 
PHP Scripter

PHP Scripter

31/05/2011 18:18:50
Quote Anchor link
Vindt je het heel vreemd dat ik daar niks van geloof? Welke foutmelding krijg je en laat eens zien wat je nu hebt. Ik heb 't idee dat jij andere personen jouw school huiswerk laat opknappen. Dat is niet slim hé!
Gewijzigd op 31/05/2011 18:19:01 door PHP Scripter
 
Matthias Degreef

Matthias Degreef

31/05/2011 18:55:51
Quote Anchor link
Ja, jij mag gerust dat idee hebben. Maar denk je nu echt dat, aangezien die opdracht morgen moet ingediend worden, ik er op kan rekenen dat iemand hier die taak voor mij zal maken? Als ik nog niet gezocht had en het wel kon zou ik toch gewoon hier geen topic openen en mij er eens een uurtje mee bezighouden zodat het in orde was?

Ik heb altijd de error van unexpected $end, of error op line... als je het nog wil weten. Het is gewoon de bedoeling dat wanneer ik een radio veld aanduid en verstuur dat ik dat heb aangeduid dat ik met "if" lussen kan achterhalen of onder die radio die ik heb aangeduid of daar een 1 of een 0 stond. Klink simpel maar lukt dus duidelijk (nog) niet (voor mij).
 
Maarten PHP

Maarten PHP

31/05/2011 19:01:32
Quote Anchor link
ik zou denken dat je een schoolvak hebt gekozen waar je eigenlijk bijna niks van kan
 
Matthias Degreef

Matthias Degreef

31/05/2011 19:03:05
Quote Anchor link
Maarten Buijs op 31/05/2011 19:01:32:
ik zou denken dat je een schoolvak hebt gekozen waar je eigenlijk bijna niks van kan


Ik heb daar niet voor gekozen, zit standaard in ons lessenpakket. We hebben dat 1 uur in de week en dan krijgen we zo'n opdracht :p
Gewijzigd op 31/05/2011 19:03:26 door Matthias Degreef
 
Pieter van Linschoten

Pieter van Linschoten

31/05/2011 19:09:48
Quote Anchor link
Quote:
Het spijt me maar het mag enkel uit php codes bestaan, en het is dus ook niet met javascript... we werken met XAMPP en dus helpen javascript codes niet.

Zolang je een browser gebruikt, kun je javascript gebruiken.

Verder is de manier waarop je het nu aanpakt, nogal omslachtig.

Vraag je zelf af:

Waar haal ik de mijnen op het speelveld vandaan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
$array
= range(1,81);
shuffle($array);
$array_slice = array_slice($array, 0, 10);
?>

Hoe zorg ik ervoor, dat ik, na het posten van mijn opgave, niet de volgorde van mijnen kwijt ben?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?
session_start();
$_SESSION['mijnen'] = $array;
?>

Hoe controleer ik, of een veld waar ik op klik, een mijn bevat?

Het versturen van de volgende regel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="radio" name="veld[5][6]" />

Kan je afvangen met:
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
<?
for($x etc(..))
{

   for($y etc(...))
   {

       if(isset($_POST[$x][$y]))
       {

           if($array[$x][$y] == 1)
           {

               // print 'Boem';
           }
           else
           {
               // print 'Veilig';
           }
       }
   }
}

?>
Gewijzigd op 31/05/2011 19:16:48 door Pieter van Linschoten
 
Matthias Degreef

Matthias Degreef

31/05/2011 19:22:36
Quote Anchor link
Daar kom ik al een heel eind mee denkik, dank je.
 
Matthias Degreef

Matthias Degreef

01/06/2011 22:45:33
Quote Anchor link
Ik heb nog 1 vraagje; ik heb mijn schript in mijn eerste bestand met een veranderlijke $i, maar ik wil die $i graag door te serializen gebruiken in mijn 2e bestand, maar ze neemt telkens de waarde 81 aan terwijl ik gewoon de waarde wil die $i op een bepaald moment aanneemt. Zelf wanneer ik controleer met echo '$i'; zie ik dat ze veranderd maar wanneer ik ze serialize wordt ze telkens 81...

hier mijn schript van bestand 1:
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
<?php


$array
= range(1,81);
shuffle($array);
$array2 = serialize($array);
$array_slice = array_slice($array, 1, 10);
echo "<form action=\"Spel2.php\" method=\"post\">
<table border=\"1\" cellpadding=\"5\" cellspacing=\"1\" width=\"30%\"><tr>"
;
for($i = 1;$i <= 81;$i++){
  
   if(in_array($i, $array_slice)){
       echo"<td><center><input type=\"radio\" name= \"veld\" value=\"1\"/></center></td>";
   }

   else{
       echo"<td><center><input type=\"radio\" name= \"veld\" value=\"0\"/> $i"; $j = serialize($i); echo"</center></td>";
    $j = serialize($i);
    
   }


   if($i%9 == 0){
      echo "</tr>";
   }
}




?>

</table>
<input type="hidden" name="array2" value="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $array2; ?>
" />
<input type="hidden" name="j" value="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $j; ?>
" />
<input type="submit" value="Ga door"/>

</form>


en bestand 2:

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
38
39
<?php

$veld
= $_POST["veld"];
$array2 = unserialize($_POST["array2"]);
$array3 = serialize($array2);
$j = unserialize($_POST["j"]);
echo "$j"; //toont telkens 81??
$array_slice = array_slice($array2, 1, 10);
    if($veld == 1){
    echo "Je hebt een mijn geraakt en bent dood! <p> <a href=\"Spel.php\">Begin opnieuw!</a>";
    }

    else{
    echo "<form action=\"Spel3.php\" method=\"post\">
    <table border=\"1\" cellpadding=\"5\" cellspacing=\"1\" width=\"30%\"><tr>"
;
for($i = 1;$i <= 81;$i++){
    if($i == $j){
    echo"<td><center>0</center></td>";
    }

    else{
   if(in_array($i, $array_slice)){
       echo"<td><center><input type=\"radio\" name= \"veld\" value=\"1\"/></center></td>";
   }

   else{
       echo"<td><center><input type=\"radio\" name= \"veld\" value=\"0\"/></center></td>";
    $k = serialize($i);
   }


   if($i%9 == 0){
      echo "</tr>";
   }
}
      }

echo
"</table>
<input type=\"hidden\" name=\"array3\" value=\"echo $array3;\"/>
<input type=\"hidden\" name=\"k\" value=\"<?php echo $k; ?>\" />
<input type=\"submit\" value=\"Ga door\"/>"
;
       }

?>
 



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.