function go($board, $colour, $cpu) { $col = 0; showBoard($board); $cols = cols($board); if ($cpu == 0) { while (!in_array($col, $cols)) { $msg = 'player ' . $colour . ' - please choose a column (' . implode(',', $cols) . '): '; $col = readline($msg); } } else { sleep(0.5); print 'cpu thinking... ' . "\n"; $col = $cols[array_rand($cols, 1)]; } sleep(1); array_push($board[$col], $colour); if (check($board, $col)) { win($board, $colour); sleep(1); return 1; } else { return $board; } }
/** * Save entity * * @param array $item * * @return bool */ function flat_save(array &$item) : bool { $attrs = $item['_entity']['attr']; $cols = cols($attrs, $item); $stmt = prep('UPDATE %s SET %s WHERE %s = :_id', $item['_entity']['tab'], implode(', ', array_column($cols, 'set')), $attrs['id']['col']); foreach ($cols as $uid => $col) { $stmt->bindValue($col['param'], $col['val'], $col['type']); } $stmt->bindValue(':_id', $item['_old']['id'], db_type($attrs['id'], $item['_old']['id'])); $stmt->execute(); return true; }
function validCols($board) { $all_values = [1, 2, 3, 4, 5, 6, 7, 8, 9]; $cols = cols($board); foreach ($cols as $row) { sort($row); if ($row != $all_values) { return false; } } return true; }
public function test_cols() { $this->assertEquals([[0, 4, 5, 6, 7, 8], [0, 3, 6, 9], [0, 8], [0, 1, 4, 8], [0, 1, 2, 6, 7, 8, 9], [0, 3, 5, 9], [0, 2], [0, 6, 7, 8], [0, 1, 3, 5, 6, 9]], cols([[5, 3, 0, 0, 7, 0, 0, 0, 0], [6, 0, 0, 1, 9, 5, 0, 0, 0], [0, 9, 8, 0, 0, 0, 0, 6, 0], [8, 0, 0, 0, 6, 0, 0, 0, 3], [4, 0, 0, 8, 0, 3, 0, 0, 1], [7, 0, 0, 0, 2, 0, 0, 0, 6], [0, 6, 0, 0, 0, 0, 2, 8, 0], [0, 0, 0, 4, 1, 9, 0, 0, 5], [0, 0, 0, 0, 8, 0, 0, 7, 9]])); $this->assertEquals([[1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9]], cols([[5, 3, 4, 6, 7, 8, 9, 1, 2], [6, 7, 2, 1, 9, 5, 3, 4, 8], [1, 9, 8, 3, 4, 2, 5, 6, 7], [8, 5, 9, 7, 6, 1, 4, 2, 3], [4, 2, 6, 8, 5, 3, 7, 9, 1], [7, 1, 3, 9, 2, 4, 8, 5, 6], [9, 6, 1, 5, 3, 7, 2, 8, 4], [2, 8, 7, 4, 1, 9, 6, 3, 5], [3, 4, 5, 2, 8, 6, 1, 7, 9]])); }