-
Notifications
You must be signed in to change notification settings - Fork 62
/
util.php
47 lines (40 loc) · 1.35 KB
/
util.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
38
39
40
41
42
43
44
45
46
47
<?php
$GLOBALS['OFFSETS'] = [[0, 1], [0, -1], [1, 0], [-1, 0], [-1, 1], [1, -1]];
function isNeighbour($a, $b) {
$a = explode(',', $a);
$b = explode(',', $b);
if ($a[0] == $b[0] && abs($a[1] - $b[1]) == 1) return true;
if ($a[1] == $b[1] && abs($a[0] - $b[0]) == 1) return true;
if ($a[0] + $a[1] == $b[0] + $b[1]) return true;
return false;
}
function hasNeighBour($a, $board) {
foreach (array_keys($board) as $b) {
if (isNeighbour($a, $b)) return true;
}
}
function neighboursAreSameColor($player, $a, $board) {
foreach ($board as $b => $st) {
if (!$st) continue;
$c = $st[count($st) - 1][0];
if ($c != $player && isNeighbour($a, $b)) return false;
}
return true;
}
function len($tile) {
return $tile ? count($tile) : 0;
}
function slide($board, $from, $to) {
if (!hasNeighBour($to, $board)) return false;
if (!isNeighbour($from, $to)) return false;
$b = explode(',', $to);
$common = [];
foreach ($GLOBALS['OFFSETS'] as $pq) {
$p = $b[0] + $pq[0];
$q = $b[1] + $pq[1];
if (isNeighbour($from, $p.",".$q)) $common[] = $p.",".$q;
}
if (!$board[$common[0]] && !$board[$common[1]] && !$board[$from] && !$board[$to]) return false;
return min(len($board[$common[0]]), len($board[$common[1]])) <= max(len($board[$from]), len($board[$to]));
}
?>