示例#1
0
文件: player.py 项目: dannywi/gomoku
def _test_print_jump_table():
    my_board = board.board()
    p1 = player(my_board, my_board.player_1, my_board.mark_player_1)
    p1.dump_jump_table()
    print("********** player move ************")
    p1.move()
    p1.dump_jump_table()
示例#2
0
def _test_play():
    n_times = 1
    for trial in range(n_times):
        # as we use go_board, we need to use its size 19x19
        my_board = board.board(size=19)
        my_board.verbose = False
        gui_go_board = go_board(None)

        # wire gui click to board
        #   player 1: auto_player, white
        #   player 2: gui, black

        evaluators = [
            {
                'fn': eval_func.own_bingo,
                'weight': 5.0
            },
            {
                'fn': eval_func.opp_bingo,
                'weight': 5.0
            },
            {
                'fn': eval_func.own_almost_bingo,
                'weight': 2.0
            },
            {
                'fn': eval_func.opp_almost_bingo,
                'weight': 2.0
            },
            #{'fn': eval_func.freedom,            'weight': 1.0},
            {
                'fn': eval_func.center,
                'weight': 1.0
            },
        ]
        auto_player = player(my_board, my_board.player_1,
                             my_board.mark_player_1, evaluators)

        def move_auto_player(board, gui_board):
            if auto_player.move():
                player, (row, col) = board.get_last_move()
                # print(player, col, row)
                gui_board.put_stone(row, col, "white")
                # board.print_board()   # uncomment to see if gui and board are in synch

        # move_auto_player(my_board, gui_board) # uncomment to have computer play first

        def on_gui_move(board, move, gui_board):
            # register gui move to board
            col, row = move
            board.player_2((row, col))

            if board.finished() is False:
                move_auto_player(board, gui_board)

            if board.finished() is True:
                gui_board.set_move_allowed(False)

        # on put stone, call my_board's player 2
        put_stone_fn = lambda event: gui_go_board.put_black_on_click(
            event,
            callback_fn=lambda col, row: on_gui_move(my_board,
                                                     (col, row), gui_go_board))
        gui_go_board.set_on_click_callback(put_stone_fn)

        gui_go_board.pack()
        gui_go_board.mainloop()
示例#3
0
def _test_play(n_times):
    my_board = board.board()
    my_board.verbose = False
    fin_moves = []
    wins = {}
    wins[my_board.mark_player_1] = 0
    wins[my_board.mark_player_2] = 0

    last_finished_board = None

    for trial in range(n_times):
        my_board.reset()

        evaluators1 = [
            {'fn': eval_func.own_bingo,          'weight': 5.0},
            {'fn': eval_func.opp_bingo,          'weight': 5.0},
            {'fn': eval_func.own_almost_bingo,   'weight': 2.0},
            {'fn': eval_func.opp_almost_bingo,   'weight': 2.0},
            #{'fn': eval_func.freedom,            'weight': 1.0},
            {'fn': eval_func.center,             'weight': 1.0},
        ]
        p1 = player(my_board, my_board.player_1, my_board.mark_player_1, evaluators1)

        evaluators2 = [
            {'fn': eval_func.own_bingo,          'weight': 5.0},
            {'fn': eval_func.opp_bingo,          'weight': 5.0},
            {'fn': eval_func.own_almost_bingo,   'weight': 2.0},
            {'fn': eval_func.opp_almost_bingo,   'weight': 2.0},
            #{'fn': eval_func.freedom,            'weight': 1.0},
            {'fn': eval_func.center,             'weight': 1.0},
        ]

        p2 = player(my_board, my_board.player_2, my_board.mark_player_2, evaluators2)

        # interesting fact: this monte carlo shows first player have an edge
        players = [p1, p2]
        
        winner = " "
        num_moves = -1
        for i in range(my_board.board_size() ** 2):
            p = players[i % 2]
            p.move()
            if my_board.finished():
                #board.print_board()
                fin_moves.append(i)
                wins[p.mark()] += 1
                last_finished_board = copy.deepcopy(my_board)
                winner = p.mark()
                num_moves = i
                break
        print("{} === PLAYER {} WINS === # moves [{}]".format(trial, winner, num_moves))

    if last_finished_board is None:
        my_board.print_board()
    else:
        last_finished_board.print_board()

    avg_moves = 0
    if len(fin_moves) > 0:
        avg_moves = sum(fin_moves) / float(len(fin_moves))
    
    print("avg moves: {:.3f}, wins: {}".format(avg_moves, wins))
示例#4
0
args = vars(parser.parse_args())

if args['log']=='y':
    toLog=True
else:
    toLog=False

if args['seed'] == "":
    val = None

elif args['seed'] != "":
    val = args['seed']


gameboard = board("Red", toLog)

trainee = opponent('Red', seed(None), toLog)
trainer = opponent('Black', seed(val), toLog)

trainer.genPieceProgram()
trainer.genMoveProgram()

trainee.genPieceProgram()
trainee.genMoveProgram()

winStatus =trainGame()

points = score(gameboard.Red, gameboard.Black, winStatus)

print points
示例#5
0
        gameboard.moveCount +=1
        if gameboard.moveCount == 60:
            log('Draw')
            break
        gameLoop = gameboard.win()


parser = argparse.ArgumentParser(description='Input commands.')

parser.add_argument('-color', default='Red', choices=['Red', 'Black'], help='Select a color you wish to play agaisnt the computer r or b')

parser.add_argument('-seed', default='', help='Seed value to generate the opponent')

args = vars(parser.parse_args())

gameboard = board(args['color'], True)

if args['seed'] == "":
    val = None

elif args['seed'] != "":
    val = args['seed']

if args['color']=='Red':
    comp = opponent('Black', seed(val), True)
elif args['color']=='Black':
    comp = opponent('Red', seed(val), True)

comp.genPieceProgram()
comp.genMoveProgram()