def static_eval(self): win_ai = CellState.to_char(CellState.AI) * self._win_length win_enemy = CellState.to_char(CellState.AI) * self._win_length rows = self.get_rows() cols = self.get_cols() diagonals = self.get_diagonals() antidiagonals = self.get_antidiagonals() if win_ai in rows or win_ai in cols or win_ai in diagonals or win_ai in antidiagonals: return inf elif win_enemy in rows or win_enemy in cols or win_enemy in diagonals or win_enemy in antidiagonals: return -inf total = 0 # Make it extremely slow for p in patterns.patterns: for row in rows: total += row.count(p["pattern"]) * p["weight"] for col in cols: total += col.count(p["pattern"]) * p["weight"] for diagonal in diagonals: total += diagonal.count(p["pattern"]) * p["weight"] for antidiagonal in antidiagonals: total += antidiagonal.count(p["pattern"]) * p["weight"] return total
def who_won(self): rows = self.get_rows() cols = self.get_cols() diagonals = self.get_diagonals() antidiagonals = self.get_antidiagonals() win_ai = CellState.to_char(CellState.AI) * self._win_length win_enemy = CellState.to_char(CellState.ENEMY) * self._win_length if win_ai in rows or win_ai in cols or win_ai in diagonals or win_ai in antidiagonals: return CellState.AI if win_enemy in rows or win_enemy in cols or win_enemy in diagonals or win_enemy in antidiagonals: return CellState.ENEMY return CellState.EMPTY
def to_string(row): return ''.join(CellState.to_char(cell) for cell in row)