用户:
...凉风...查看:0 回复:1 评论:0 创建时间:2019-08-16T23:07:12
【作品展示】

【作品介绍】
井字棋人机大战
快来挑战机器啦!
操作简单但赢不容易哦!
【作品源代码】
O = "O"
X = "X"
EMPTY = " "
TIE = "TIE"
NUM = 9
human = "X"
computer = "O"
def js():
"""游戏说明"""
print("""
游戏说明
棋盘分为9个部分
0 | 1 | 2
------------
3 | 4 | 5
------------
6 | 7 | 8
位置从0开始,直接输入位置数字
你为X,电脑为O
连成一条线即胜利""")
def ask_number(question,low,high): #下的位置
""" zdwz"""
response = -1
while response not in range(low,high):
response = int(input(question))#返回位置
return response
def new_board(): #创建棋盘
"""new game"""
board = [] #创建空列表
for sqare in range(NUM):
board.append(EMPTY) #创建空白元素
return board
def display(board): #打印棋盘
"""display game board on creen"""
print("\t",board[0],"|",board[1],"|",board[2])
print(" ---------")
print("\t",board[3],"|",board[4],"|",board[5])
print(" ---------")
print("\t",board[6],"|",board[7],"|",board[8],"\n")
def legal_moves(board): #接收棋盘,检查合法性
"""legare"""
moves = []
for 喵 in range(NUM): #检查是否有空位
if board[喵] == EMPTY:
moves.append(喵)
return moves #返回空位
def winner(board): #判断输赢
"""game winner"""
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))
for row in WIN:
if board[row[0]] == board[row[1]] == board[row[2]] == human: #检查是否有连线
winner = human
return winner
elif board[row[0]] == board[row[1]] == board[row[2]] == computer: #检查是否有连线
winner = computer
return winner
elif EMPTY not in board: #检查是否有空位
return TIE
return None
def human_move(board,human): #玩家动棋
"""GET human move"""
legal = legal_moves(board) #获取合法位置
move = None
while move not in legal:
move = ask_number("请输入0 - 8:",0,NUM)
if move not in legal:
print("\n此位置已被占用,请重新选择\n")
print("Fine...")
return move #返回玩家选的位置
def computer_move(board,computer,human): #电脑动棋
"""MAKE computer move"""
board = board[:] #创建棋盘副本
BEST = (4,0,2,6,8,1,3,5,7) #最佳位置
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: #选择最佳位置
if move in legal_moves(board):
print("电脑:",move)
return move
def next_turn(turn): #返回下一个行棋方
"""turn"""
if turn == "X":
return O
else:
return X
def congrat_winner(the_winner,computer,human): #返回输赢
"""winner"""
if the_winner == human:
print("你赢了!\n")
elif the_winner == computer:
print("你输了!")
else:
print("平局!\n")
def main(): #执行主程序
js()
turn = X #当前下棋方
board = new_board()
display(board) #创建棋盘
while not winner(board):
if turn == human: #玩家下
move = human_move(board,human)
board[move] = human
elif turn == computer:
move = computer_move(board,computer,human) #电脑下
board[move] = computer
display(board) #打印棋盘
the_winner = winner(board)
turn = next_turn(turn) #切换下棋方
congrat_winner(the_winner,computer,human)
main()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn