// In $places steht die gesamte Platzmatrix
$places = array();
// Reihe 1
$places[0][0] = true;
$places[0][1] = true;
$places[0][2] = false;
$places[0][3] = false;
$places[0][4] = false;
// Reihe 2
$places[1][0] = false;
$places[1][1] = false;
$places[1][2] = false;
$places[1][3] = true;
$places[1][4] = true;
// Reihe 3
$places[2][0]= false;
$places[2][1]= true;
$places[2][2]= true;
$places[2][3]= true;
$places[2][4]= false;
// Reihe 4
$places[3][0] = true;
$places[3][1] = true;
$places[3][2] = false;
$places[3][3] = false;
$places[3][4] = false;
function searchPlaces($amt) {
checkPlaces($amt);
}
// Gefundene Plätze löschen
function clearResp() {
global $places, $response, $famt;
$response = array();
for ($y=0; $y<count($places); $y++) {
$response[$y] = array();
for ($x=0; $x<count($places[$y]); $x++) {
$response[$y][$x] = false;
}
}
$famt = 0;
}
// Gefundene Plätze zählen
function countResp() {
global $places, $response;
$c = 0;
for ($y=0; $y<count($places); $y++) {
for ($x=0; $x<count($places[$y]); $x++) {
if ($response[$y][$x] == true) {
$c++;
}
}
}
return $c;
}
// Plätze suchen:
function checkPlaces($amt) {
global $places, $response, $famt;
/********************************
* $i = 3 Varianten:
* - horizontal verbunden
* - vertikal verbunden
* - diagonal verbunden
/********************************/
for ($i=1; $i<=3; $i++) {
for ($y=0; $y<count($places); $y++) {
for ($x=0; $x<count($places[0]); $x++) {
/*echo 'REIHE:'.$y.'<br>';
echo 'PLATZ:'.$x.'<br>';*/
clearResp();
flood($i, $x, $y, $amt);
if (countResp() >= $amt) {
return true;
}
}
}
}
}
// Weitersuchen
function flood($fmode, $x, $y, $amt) {
global $places, $response, $famt;
if ($famt >= $amt) {
return true;
}
if ($places[$y][$x] == true && $response[$y][$x] != true) {
$response[$y][$x] = true;
$famt ++;
switch($fmode) {
case 1:
flood($fmode, ($x-1), $y, $amt);
flood($fmode, ($x+1), $y, $amt);
break;
case 2:
flood($fmode, ($x-1), $y, $amt);
flood($fmode, ($x+1), $y, $amt);
flood($fmode, $x, ($y-1), $amt);
flood($fmode, $x, ($y+1), $amt);
break;
case 3:
flood($fmode, ($x-1), $y, $amt);
flood($fmode, ($x+1), $y, $amt);
flood($fmode, $x, ($y-1), $amt);
flood($fmode, $x, ($y+1), $amt);
flood($fmode, ($x-1), ($y-1), $amt);
flood($fmode, ($x+1), ($y-1), $amt);
flood($fmode, ($x-1), ($y+1), $amt);
flood($fmode, ($x+1), ($y+1), $amt);
break;
}
}
return;
}
// In $response werden die gefundenen Plätze geschrieben
$response = Array();
$famt = 0;
// Platzsuche für $amt=4 Plätze starten
searchPlaces(4);
print_r($response);