4*4 棋


def dis_board(board):
#显示出棋盘
print("\t{0} | {1} | {2} | {3}".format(board[0], board[1], board[2], board[3]))
print("\t_ | _ | _ | _")
print("\t{0} | {1} | {2} | {3}".format(board[4], board[5], board[6], board[7]))
print("\t_ | _ | _ | _")
print("\t{0} | {1} | {2} | {3}".format(board[8], board[9], board[10], board[11]))
print("\t_ | _ | _ | _")
print("\t{0} | {1} | {2} | {3}".format(board[12], board[13], board[14], board[15]))
def _moves(board):
#寻求可落子的位置
moves = []
for i in range(16):
if board[i] in list("0123456789ABCDEF"): #遍历了棋盘的位置如果位置为0-8那么这个位置可以落子
moves.append(i)
return moves
def playermove(board):
#询问并确定玩家的选择落子位置,无效落子重复询问
move = 16
while move not in _moves(board):
move = int(input("请选择落子位置(0-15):"))
return move
def computermove(board,computerletter,playerletter):
#核心算法:计算AI的落子位置
boardcopy = board.copy()
#规则一:判断如果某位置落子可以获胜,则选择这个位置
for move in _moves(boardcopy):
boardcopy[move] = computerletter
if winner(boardcopy):
return move
boardcopy[move] = str(move)
#规则二:某个位置玩家下一步落子就可以获胜,则选择该位置
for move in _moves(boardcopy):
boardcopy[move] = playerletter
if winner(boardcopy):
return move
boardcopy[move] = str(move)
#规则三:按照中心、角、边的选择空的位置
for move in(5,6,9,10,0,3,12,15,1,2,4,8,7,11,13,14):
if move in _moves(board):
return move
def winner(board):
#判断所给棋子是否获胜
_to_win = {(0,1,2,3),(4,5,6,7),(8,9,10,11),(12,13,14,15),(0,4,8,12),(1,5,9,13),(2,6,10,14),(3,7,11,15),(0,5,10,15),(3,6,9,12)}
for r in _to_win:
if board[r[0]] == board[r[1]] == board[r[2]] == board[r[3]]:
return True
return False
def Tie(board):
#判断是否平局
for i in list("012345678ABCDEF"):
if i in board:
return False
return True
def tic_tac_toe():
#井字棋
board = list("0123456789ABCDEF")
playerletter = input("请选择棋子x(玩家)或者o(AI)--(x先走,o后走):")
if playerletter in("X","x"):
turn = "player"
playerletter = "x"
computerletter = "o"
else:
turn = "AI"
computerletter = "x"
playerletter = "o"
print("{}先走!".format(turn))
while True:
dis_board(board)
if turn == 'player':
move = playermove(board)
board[move] = playerletter
if winner(board):
dis_board(board)
print("恭喜玩家获胜!")
break
else:
turn = "AI"
else:
move = computermove(board, computerletter, playerletter)
print("人工智能AI落子位置:",move)
board[move] = computerletter
if winner(board):
dis_board(board)
print("人工智能AI获胜!")
break
else:
turn = "player"
if Tie(board):
dis_board(board)
print('平局!')
break
if __name__=='__main__':
tic_tac_toe()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值