Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
 def to_string(row):
     return ''.join(CellState.to_char(cell) for cell in row)