Ejemplo n.º 1
0
    def run(self, player1 = "local_player", player2 = "local_player"):
        self.running = False
        self.clock = pygame.time.Clock() #to track FPS
        self.fps= 0

        ChessBoardAssets.load_assets()

        self.board_pos_mouseover_label = render_text("0 / 0", (100, 100, 200))

        self.game_board = GameBoard()

        self.white_pieces = []
        self.black_pieces = []

        self.captured_pieces = []
        
        self.fill_board()


        self.turn = TURN.PLAYER_1
        self.moves = []

        if player1 == "local_player":
            self.player1 = Player("black", self.game_board, self.white_pieces, self.black_pieces)
        elif player1 == "ai_player":
            self.player1 = RandomAI("black", self.game_board, self.white_pieces, self.black_pieces)

        if player2 == "local_player":
            self.player2 = Player("white", self.game_board, self.white_pieces, self.black_pieces)
        elif player2 == "ai_player":
            self.player2 = RandomAI("white", self.game_board, self.white_pieces, self.black_pieces)

        self.mainLoop()
Ejemplo n.º 2
0
    def SetUp(self):
        game_params = TkinterGameSetupParams()
        (player1Type, player1Depth, player2Type, player2Depth) = game_params.GetGameSetupParams()

        if player1Type == 'AI':
            if player1Depth > 0:
                self.ai_players[chess.WHITE] = AI(self.board, chess.WHITE, player1Depth)
            else:
                self.ai_players[chess.WHITE] = RandomAI()

        if player2Type == 'AI':
            if player2Depth > 0:
                self.ai_players[chess.BLACK] = AI(self.board, chess.BLACK, player2Depth)
            else:
                self.ai_players[chess.BLACK] = RandomAI(self.board)
Ejemplo n.º 3
0
                playerTurn = not playerTurn
            except (ValueError, IndexError):
                continue


while True:
    command = input("Enter board size and plane nr: ")
    cmd = command.split()
    if len(cmd) == 2:
        if int(cmd[0]) > 5:
            if int(cmd[1]) * 2 < int(cmd[0]):
                break
            else:
                print("Too many planes!")
        else:
            print("Board too small!")
    else:
        print("Invalid input!")

boardPlayer = Board(int(cmd[0]))
boardAI = Board(int(cmd[0]))

algorithm = RandomAI(int(cmd[0]))

pop = RandAIPopulate(boardAI, int(cmd[1]))

game = Game(boardPlayer, boardAI, algorithm, int(cmd[1]))

ui = UI(game)

ui.start()
Ejemplo n.º 4
0
class ChessGame:
    def __init__(self):
        pass

    def run(self, player1 = "local_player", player2 = "local_player"):
        self.running = False
        self.clock = pygame.time.Clock() #to track FPS
        self.fps= 0

        ChessBoardAssets.load_assets()

        self.board_pos_mouseover_label = render_text("0 / 0", (100, 100, 200))

        self.game_board = GameBoard()

        self.white_pieces = []
        self.black_pieces = []

        self.captured_pieces = []
        
        self.fill_board()


        self.turn = TURN.PLAYER_1
        self.moves = []

        if player1 == "local_player":
            self.player1 = Player("black", self.game_board, self.white_pieces, self.black_pieces)
        elif player1 == "ai_player":
            self.player1 = RandomAI("black", self.game_board, self.white_pieces, self.black_pieces)

        if player2 == "local_player":
            self.player2 = Player("white", self.game_board, self.white_pieces, self.black_pieces)
        elif player2 == "ai_player":
            self.player2 = RandomAI("white", self.game_board, self.white_pieces, self.black_pieces)

        self.mainLoop()


    #wait until a key is pressed, then return
    def waitForKey(self):
        press=False
        while not press:
            for event in pygame.event.get():
                if event.type == KEYUP:
                    press = True
             
    #enter the main loop, possibly setting max FPS
    def mainLoop(self, fps=0):
        self.running = True
        self.fps= fps
        
        while self.running:
            pygame.display.set_caption("FPS: %i" % self.clock.get_fps())
            
            events = pygame.event.get()
            self.player1.handleEvents(events, self.turn==TURN.PLAYER_1, self)
            self.player2.handleEvents(events, self.turn==TURN.PLAYER_2, self)

            self.update()
            self.draw()
            pygame.display.flip()
            self.clock.tick(self.fps)
            
    def update(self):
        self.game_board.update(self.white_pieces + self.black_pieces)
        self.player1.update(self.captured_pieces)
        self.player2.update(self.captured_pieces)

        if self.turn == TURN.PLAYER_1:
            move = self.player1.get_move()

        elif self.turn == TURN.PLAYER_2:
            move = self.player2.get_move()

        if move: # if received move, execute it
            move.execute(self.white_pieces, self.black_pieces, self.captured_pieces)
            self.moves.append(move)
            self.turn = (self.turn + 1) % 2
        # wait for p1 move, execute - wait for p2 move, execute (with time limit?)

        
    def draw(self):
        self.game_board.draw()
        for piece in self.black_pieces:
            piece.draw()
        for piece in self.white_pieces:
            piece.draw()

        if Options.show_captured_pieces: # draw captured pieces on the side of the board
            xoffset = 10
            for piece in self.captured_pieces: #Refactor: move this to piece class?
                piece.draw(xoffset)
                xoffset += 5


        self.draw_color_helpers()
        
        screen.blit(self.board_pos_mouseover_label, (10, 450))


       
    def draw_color_helpers(self):
        if self.turn == TURN.PLAYER_1 and self.player1.type == "local_player" and self.player1.selected_piece:
            if Options.highlight_selected:
                screen.blit(ChessBoardAssets.selected_piece, (self.player1.selected_piece.board_x * tile_size + offset[0], self.player1.selected_piece.board_y * tile_size + offset[1]))# draw selected

            for pos in self.player1.selected_piece.possible_moves: # draw possible captures & moves
                if Options.highlight_capturable and self.game_board.board[pos[0]][pos[1]].occupying_piece:
                    screen.blit(ChessBoardAssets.possible_capture, (pos[0] * tile_size + offset[0], pos[1] * tile_size + offset[1])) # draw possible captures
                elif Options.highlight_possible_moves:
                    screen.blit(ChessBoardAssets.possible_move, (pos[0] * tile_size + offset[0], pos[1] * tile_size + offset[1])) # draw possible moves

        elif self.turn == TURN.PLAYER_2 and self.player2.type == "local_player" and self.player2.selected_piece:
            if Options.highlight_selected:
                screen.blit(ChessBoardAssets.selected_piece, (self.player2.selected_piece.board_x * tile_size + offset[0], self.player2.selected_piece.board_y * tile_size + offset[1]))

            for pos in self.player2.selected_piece.possible_moves:
                if Options.highlight_capturable and self.game_board.board[pos[0]][pos[1]].occupying_piece:
                    screen.blit(ChessBoardAssets.possible_capture, (pos[0] * tile_size + offset[0], pos[1] * tile_size + offset[1])) # draw possible captures
                elif Options.highlight_possible_moves:
                    screen.blit(ChessBoardAssets.possible_move, (pos[0] * tile_size + offset[0], pos[1] * tile_size + offset[1])) # draw possible moves


    def fill_board(self):
        for i in range(8):
            self.black_pieces.append(Pawn("black", i, 6, tile_size, tile_size, ChessBoardAssets.black_pawn_surface))
            self.white_pieces.append(Pawn("white", i, 1, tile_size, tile_size, ChessBoardAssets.white_pawn_surface))

        # rooks
        self.black_pieces.append(Rook("black", 7, 7, tile_size, tile_size, ChessBoardAssets.black_rook_surface))
        self.black_pieces.append(Rook("black", 0, 7, tile_size, tile_size, ChessBoardAssets.black_rook_surface))

        self.white_pieces.append(Rook("white", 7, 0, tile_size, tile_size, ChessBoardAssets.white_rook_surface))
        self.white_pieces.append(Rook("white", 0, 0, tile_size, tile_size, ChessBoardAssets.white_rook_surface))

        # Bishop
        self.black_pieces.append(Bishop("black", 5, 7, tile_size, tile_size, ChessBoardAssets.black_bishop_surface))
        self.black_pieces.append(Bishop("black", 2, 7, tile_size, tile_size, ChessBoardAssets.black_bishop_surface))

        self.white_pieces.append(Bishop("white", 5, 0, tile_size, tile_size, ChessBoardAssets.white_bishop_surface))
        self.white_pieces.append(Bishop("white", 2, 0, tile_size, tile_size, ChessBoardAssets.white_bishop_surface))

        # knights
        self.black_pieces.append(Knight("black", 6, 7, tile_size, tile_size, ChessBoardAssets.black_knight_surface))
        self.black_pieces.append(Knight("black", 1, 7, tile_size, tile_size, ChessBoardAssets.black_knight_surface))

        self.white_pieces.append(Knight("white", 6, 0, tile_size, tile_size, ChessBoardAssets.white_knight_surface))
        self.white_pieces.append(Knight("white", 1, 0, tile_size, tile_size, ChessBoardAssets.white_knight_surface))

        # Queens
        self.black_pieces.append(Queen("black", 3, 7, tile_size, tile_size, ChessBoardAssets.black_queen_surface))
        self.white_pieces.append(Queen("white", 3, 0, tile_size, tile_size, ChessBoardAssets.white_queen_surface))

        # Kings
        self.black_pieces.append(King("black", 4, 7, tile_size, tile_size, ChessBoardAssets.black_king_surface))
        self.white_pieces.append(King("white", 4, 0, tile_size, tile_size, ChessBoardAssets.white_king_surface))

    def keyDown(self, key):
        pass
        
    def keyUp(self, key):
        pass
    
    def mouseUp(self, button, pos):
        pass
        
    def mouseMotion(self, buttons, pos, rel):
        pass
Ejemplo n.º 5
0
        factorial(player_count / factorial(player_count - 2)))
    return round_count * permutation_count


def _get_print_interval(round_count, player_count, print_count):
    interval = int(_get_match_count(round_count, player_count) / print_count)
    return interval if interval != 0 else 1


if __name__ == "__main__":
    game = TicTacToe()

    from timeit import default_timer as timer

    p1 = Player("player1", WeightedGameStateAI())
    p2 = Player("player2", WeightedGameStateAI())
    p3 = Player("player3", RandomAI())

    start = timer()
    # Training round
    game.play_tournament(50, [p1, p2, p3])
    stop = timer()
    print("Training finished in {0} seconds.".format(stop - start))

    start = timer()
    # Actual tournament
    res = game.play_tournament(10, [p1, p2, p3])
    stop = timer()
    print("Tournament finished in {0} seconds.".format(stop - start))
    print("Results:\n{0}".format(res))