예제 #1
0
class Game():
    def __init__(self, visualize=False):
        self.visualize = visualize
        self.board = Board(params.shape, params.size, params.openCells)
        if visualize:
            self.viz = Visualizer(self.board)

    def move_cell(self, pos, direction):
        cell_to_move = self.board.get_cell(pos)
        cell_to_move.move(direction)
        if self.visualize:
            self.viz.add_game_state(self.board)  # Update the visualization

        return self.get_state()

    def game_won(self):
        return self.board.get_remaining_pegs() == 1

    def get_legal_moves(self):
        return self.board.get_legal_moves()

    def is_finished(self):
        return len(self.board.get_legal_moves()
                   ) == 0 or self.board.get_remaining_pegs() == 1

    def get_status(self):
        if self.game_won():
            return 1
        elif self.is_finished() and not self.game_won():
            return -1
        else:
            return 0

    def get_state(self):
        board = self.board.get_state()
        legal_moves = self.get_legal_moves()
        status = self.get_status()
        if self.is_finished() and not self.game_won():
            reward = params.lose
        elif self.game_won():
            reward = params.win
        else:
            reward = params.default
        return (board, legal_moves, reward, status)

    def get_remaining_pegs(self):
        return self.board.get_remaining_pegs()

    def show(self):
        if self.visualize:
            self.viz.show()