用Python制作一个简单的井字棋小程序,然后玩家是自己和AI。
这是一个用Python实现的基础井字棋游戏程序,其中玩家与对手AI轮流下棋,每次落子后判断是否有胜者或者平局,并输出结果。
以下是这个程序的设计思路:
以上就是这个井字棋游戏程序的设计思路的概述。
以下是一个简单的井字棋的Python程序,其中对手使用了基本的随机决策AI,代码注释中有详细的说明。
import random
def new_board():
"""
创建一个新的井字棋盘面,用'.'表示空位置
"""
return [['.' for i in range(3)] for j in range(3)]
def draw_board(board):
"""
绘制井字棋盘面
"""
for i in range(3):
print(' '.join(board[i]))
def get_winner(board):
"""
判断当前盘面的胜者,默认返回None,表示还没有胜者
"""
# 检查行
for row in board:
if row[0] != '.' and all(elem == row[0] for elem in row):
return row[0]
# 检查列
for col in range(3):
if board[0][col] != '.' and all(board[row][col] == board[0][col] for row in range(3)):
return board[0][col]
# 检查对角线
if board[1][1] != '.' and ((board[0][0] == board[1][1] == board[2][2]) or (board[0][2] == board[1][1] == board[2][0])):
return board[1][1]
# 如果都没有胜者,则返回None
return None
def is_full(board):
"""
判断盘面是否已满
"""
return all('.' not in row for row in board)
def get_possible_moves(board):
"""
找到当前状态下可以下的所有位置
"""
moves = []
for row in range(3):
for col in range(3):
if board[row][col] == '.':
moves.append((row, col))
return moves
def make_move(board, player, move):
"""
在盘面上放置棋子
"""
row, col = move
board[row][col] = player
def get_opponent(player):
"""
获取对手玩家标志
"""
return 'O' if player == 'X' else 'X'
def get_random_move(board):
"""
返回一个随机下棋位置
"""
moves = get_possible_moves(board)
return random.choice(moves)
def play():
"""
玩井字棋游戏
"""
board = new_board()
player_turn = True
while True:
draw_board(board)
# 判断胜负
winner = get_winner(board)
if winner is not None:
print(winner, 'win!')
break
elif is_full(board):
print('Tie!')
break
# 选择下棋位置
if player_turn:
# 玩家下棋
row = int(input('Enter row: '))
col = int(input('Enter column: '))
move = (row, col)
else:
# 对手下棋
print("AI's turn...")
move = get_random_move(board)
# 下棋
make_move(board, 'X' if player_turn else 'O', move)
# 切换玩家
player_turn = not player_turn
if __name__ == '__main__':
play()