« 1 2
Autor Zpráva
Pavel Strejček
Profil
Pánové, co to napsat trochu univerzálně, aby nezáleželo na velikosti hracího pole a ušetřit trochu výkonu tím, že se budou kontrolovat jen pole která jsou nutná (vyplatí se při větších hracích plochách). Předpokládám, že kontrola výhry probíhá vždy po tahu hráče, takže stačí zavolat následující funkci se souřadnicemi tahu a aktualním rozestavením v poli.


/**
* Kontrola vyhry v piskvorkach po poslednim tahu
*
* @param array $hraciPole Matice s aktualnim rozestavenim
* @param int $x Souradnice x posledniho tahu
* @param int $y Souradnice y posledniho tahu
* @return boolean
*/
function kontrolaVyhry(&$hraciPole, $x, $y) {
$posledniZnacka = $hraciPole[$x][$y];
$smery = array(
array('x' => 0, 'y' => 1), // Z - V
array('x' => 1, 'y' => 0), // S - J
array('x' => 1, 'y' => 1), // SZ - JV
array('x' => -1, 'y' => 1) // JZ - SV
);
foreach($smery as $smer) {
$pocetSpravnych = 0;
for($i = 1; $i < 3; $i++) {
$smer['x'] *= -1;
$smer['y'] *= -1;
$xPosun = 0;
$yPosun = 0;
while(isset($hraciPole[$x + ($xPosun += $smer['x'])][$y + ($yPosun += $smer['y'])]) && $hraciPole[$x + $xPosun][$y + $yPosun] == $posledniZnacka) {
if (++ $pocetSpravnych > 3) {
return true;
}
}
}
}
return false;
}
« 1 2
Toto téma je uzamčeno. Odpověď nelze zaslat.