python实现人机交互_人机交互 - 问答 - Python中文网

# COMPUTER AI

def computer_move():

best_move = minimax_recurse(game_board,active_player, 0)

print "The best move is ", best_move

make_move(game_board,best_move, active_player)

print "COMPUTER MOVE DONE"

def minimax_recurse(game_board,player,depth):

winner = is_winner(game_board)

if winner == active_player :

return 1

elif winner is not active_player :

return -1

elif len(get_move_list(game_board)) == 0 :

return 0

if player == player1 :

other_player = player2

other_player = player1

if player == active_player :

alpha = -1

alpha = 1

movelist = get_move_list(game_board)

for move in movelist :

board2 = game_board

make_move(board2,move,player)

subalpha = minimax_recurse(board2, other_player, depth + 1)

if player == active_player :

if depth == 0 and alpha <= subalpha:

best_move = move

alpha = max(alpha,subalpha)

return alpha

else :

alpha = min(alpha,subalpha)

return alpha

# BOARD FUNCTIONS

game_board = ([1,2,3],[4,5,6],[7,8,9])

def print_board(board) :

for row in board :

print row

def make_move(game_board,player_move,active_player):

x = 0

y = 0

player_move = int(player_move)

if player_move == 1 :

x = 0

y = 0

elif player_move == 2 :

x = 0

y = 1

elif player_move == 3 :

x = 0

y = 2

elif player_move == 4 :

x = 1

y = 0

elif player_move == 5 :

x = 1

y = 1

elif player_move == 6 :

x = 1

y = 2

elif player_move == 7 :

x = 2

y = 0

elif player_move == 8 :

x = 2

y = 1

elif player_move == 9 :

x = 2

y = 2

elif player_move >= 10 :

print "value is too high"

skip = False

return board

if game_board[x][y] == "O" or game_board[x][y] == "X" :

print "move not avaiable"

return game_board

game_board[x][y] = active_player

return game_board

def is_winner(board):

for i in range (0,3) :

if board[i][0] == player1 and board[i][1] == player1 and board[i][2] == player1 :

return player1

if board[i][0] == player2 and board[i][1] == player2 and board[i][2] == player2 :

return player2

# checking for obliqual, that's quite bad and slow check but it works

if board[0][0] == player1 and board[1][1] == player1 and board[2][2] == player1 :

return player1

if board[0][0] == player2 and board[1][1] == player2 and board[2][2] == player2 :

return player2

if board[2][0] == player1 and board[1][1] == player1 and board[0][2] == player1 :

return player1

if board[2][0] == player2 and board[1][1] == player2 and board[0][2] == player2 :

return player2

return None

def get_move_list (game_board) :

move = [0]

for row in game_board :

for i in row :

if isinstance(i,int) == True :

move.append(i)

move.remove(0)

return move

# Main Loop

player1 = "X"

player2 = "O"

print_board(game_board)

while True :

active_player = player1

# this is for player move

print get_move_list(game_board)

player_move = int(raw_input("Please insert your move >>> "))

make_move(game_board,player_move,active_player)

print_board(game_board)

if is_winner(game_board) == player1 :

print "Player1 is the winner"

break

if is_winner(game_board) == player2 :

print "Player2 is the winner"

break

print get_move_list(game_board)

# computer time

active_player = player2

computer_move()

print_board(game_board)

if is_winner(game_board) == player1 :

print "Player1 is the winner"

break

if is_winner(game_board) == player2 :

print "Player2 is the winner"

break

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值