コード例 #1
0
ファイル: Game.py プロジェクト: gsiriani/MAA
class Game(object):

    def __init__(self):
        self._state = Board(8, 8)
        self._turn = SquareType.BLACK
        self._game_status = GameStatus.PLAYING
        self._last_move = None
        self._move_list = []

    def _log_to_file(self):
        pass
        '''
            with open('./logs/log_' + datetime.datetime.now().strftime('%f') + '.csv', 'w') as f:
            w = csv.writer(f)
            for move, color in self._move_list:
                if move:
                    w.writerow([move.get_row(), move.get_col(), color.name, self._game_status])
                else:
                    w.writerow(['pass', color.name, self._game_status])

                    '''

    def _do_move(self, move, color):
        if self._state.is_valid_move(move, color):
            for square in self._state.get_squares_to_mark(move, color):
                self._state.set_position(square[0], square[1], color)
            self._game_status = self._finished()
        else:
            if color == SquareType.BLACK:
                self._game_status = GameStatus.WHITE_WINS
            else:
                self._game_status = GameStatus.BLACK_WINS

    def _finished(self):
        if self._state.get_possible_moves(SquareType.BLACK) or self._state.get_possible_moves(SquareType.WHITE):
            return GameStatus.PLAYING
        results = defaultdict(int)
        for i in xrange(8):
            for j in xrange(8):
                results[self._state.get_position(i, j)] += 1
        if results[SquareType.BLACK] > results[SquareType.WHITE]:
            return GameStatus.BLACK_WINS
        if results[SquareType.BLACK] < results[SquareType.WHITE]:
            return GameStatus.WHITE_WINS
        if results[SquareType.BLACK] == results[SquareType.WHITE]:
            return GameStatus.DRAW
        return GameStatus.ERROR

    def _pass_turn(self):
        self._move_list.append((self._last_move, self._turn))
        if self._turn == SquareType.BLACK:
            self._turn = SquareType.WHITE
        elif self._turn == SquareType.WHITE:
            self._turn = SquareType.BLACK