c语言井字棋人机对战,井字棋python程序
本文主要介绍python的井字游戏实现人机对战。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
本文分享python实现人机对战井字游戏的具体代码,供大家参考。具体内容如下
在游戏简介:,中,如果一方领先于另一方(水平、垂直和倾斜)形成三对,它将获胜。在游戏中,输入方块位置代码的形式如下:
设计前的思路:
在游戏中,棋盘上存储着玩家和电脑的信息,没有没有招式的空地方。因为人机大战,需要实现计算机智能。这里有一个为这个电脑机器人设计的简单策略:
如果有一招能让电脑机器人赢这一轮,那就选那一招。
否则,如果有一步棋可以让玩家赢得这一轮,那么就选择那一步棋。
否则,电脑机器人应该选择最佳位置行走。
最佳位置是中间,其次是四角。
定义第一个元组best _魏徵来存储最佳网格位置:
按优劣顺序排列的下棋位置
贝斯特魏徵=(4,0,2,6,8,1,3,5,7)
判断井字游戏输赢的方法只有八种。每种获胜方式都写成一个元组,用嵌套元组表示:
win=((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))
代码:
#全局常数
贝斯特魏徵=(4,0,2,6,8,1,3,5,7)
win=((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))
X=X
O=O
EMPTY=
#定义生成新棋盘的函数
def new_board():
board=[]
对于范围(9):内的平方值
board.append(空)
滑板
#问谁应该下棋
def ask_yes_no(问题):
响应=无
#如果输入不是 y , n ,继续重新输入
而响应不在( y , n):中
回应=输入(问题)。下部()
返回响应
#问谁先走,第一路是X,第二路是o。
#函数返回计算机和播放器的角色代码。
定义件数():
Go_first=ask_yes_no(你先走吗,玩家(y/n): )
if go_first==y:
打印( n玩家,你先来。)
人类=X
电脑=O
else:
打印( n计算机先打印)
计算机=X
人类=O
返回计算机,人类
#显示棋盘
def显示_板(板):
2=board2=board[:] #创建副本,修改不会影响原列表板。
对于范围内的I(透镜(板)):
if板[i]==EMPTY:
board2[i]=i
打印( t ,board2[0], ,board2[1], ,board2[2])
打印( t ,-)
print(t ,板2[3], ,板2[4], ,板2[5])
打印( t ,-)
print(t ,board2[6], ,board2[7], ,board2[8], n )
#输入您要放置的位置编号。
def ask_number(问题,低,高):
响应=无
而响应不在范围内(低、高):
response=int(input(question))
返回响应
#生成可以合法下棋的位置序列(即未下过的位置)
def legal_moves(棋盘):
移动=[]
对于范围(9):中的I
if board[i] == EMPTY:
moves.append(i)
return moves
#判断输赢
def winner(board):
for row in win:
if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
winner = board[row[0]]
return winner #返回赢方
#棋盘没有空位置
if EMPTY not in board:
return "True" #"平局和棋,游戏结束"
return False
#人走棋
def human_move(board, human):
legal = legal_moves(board)
move = None
while move not in legal:
move = ask_number("你走那个位置? (0 - 9):", 0, 9)
if move not in legal:
print("n此位置已经落过子了")
return move
#电脑走棋
def computer_move(board, computer, human):
# make a copy to work with since function will be changing list
board = board[:] #创建副本,修改不影响原来列表board
#按优劣顺序排序的下棋位置best_weizhi
# 如果电脑能赢,就走那个位置
for move in legal_moves(board):
board[move] = computer
if winner(board) == computer:
print("电脑下棋位置是" ,move)
return move
# 取消走棋方案
board[move] = EMPTY
# 如果玩家能赢,就堵住那个位置
for move in legal_moves(board):
board[move] = human
if winner(board) == human:
print("电脑下棋位置是" ,move)
return move
#取消走棋方案
board[move] = EMPTY
#不是上面情况则,也就是这一轮时都赢不了则
#从最佳下棋位置表中挑出第一个合法位置
for move in best_weizhi:
if move in legal_moves(board):
print("电脑下棋位置是" ,move)
return move
#转换角色
def next_turn(turn):
if turn == X:
return O
else:
return X
#主方法:
def main():
computer, human = pieces()
turn = X
board = new_board()
display_board(board)
while not winner(board):
if turn == human:
move = human_move(board, human)
board[move] = human
else:
move = computer_move(board, computer, human)
board[move] = computer
display_board(board)
turn = next_turn(turn)
the_winner = winner(board)
#游戏结束输出输赢信息
if the_winner == computer:
print("电脑赢!n")
elif the_winner == human:
print("玩家赢!n")
elif the_winner == "True": #"平局"
print("平局,和棋,游戏结束n")
# start the program
main()
input("按任意键退出游戏.")
在最后附上结果图:
至此一个简单的井字棋就完成了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。