用户:
噩絔y查看:1 回复:1 评论:1 创建时间:2023-02-15T19:14:38
【作品展示】

【作品介绍】
6
【作品源代码】
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
连成一条线即胜利,来自噩絔y!""")
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