人机对战井字棋:用Python实现简单AI
人机对战井字棋:用Python实现简单AI
本程序实现了一个简单的人机对战的井字棋游戏,玩家可以选择先手或后手,并选择棋子是'X'还是'O'。程序会交替询问玩家下棋的位置,玩家需要输入行号和列号来指定下棋的位置。程序会根据玩家的选择更新棋盘,并检查是否有玩家获胜或者平局。如果有玩家获胜或者平局,游戏结束并打印相应的信息。
代码实现
class TicTacToe:
def __init__(self, size=3):
self.size = size
self.board = [['*' for _ in range(size)] for _ in range(size)]
self.player = None
def display_board(self):
for row in self.board:
print(' '.join(row))
print()
def set_player(self):
choice = input("请选择先后手(1. 先手 2. 后手):")
if choice == '1':
self.player = 'X'
else:
self.player = 'O'
def make_move(self, row, col):
if self.board[row][col] == '*':
self.board[row][col] = self.player
else:
print("该位置已经有棋子,请重新选择")
def check_win(self):
for i in range(self.size):
# 检查行
if self.board[i][0] == self.board[i][1] == self.board[i][2] != '*':
return True
# 检查列
if self.board[0][i] == self.board[1][i] == self.board[2][i] != '*':
return True
# 检查对角线
if self.board[0][0] == self.board[1][1] == self.board[2][2] != '*':
return True
if self.board[0][2] == self.board[1][1] == self.board[2][0] != '*':
return True
return False
def play(self):
self.set_player()
while True:
self.display_board()
if self.check_win():
print("恭喜玩家 {} 获胜!".format(self.player))
break
if all(self.board[i][j] != '*' for i in range(self.size) for j in range(self.size)):
print("平局!")
break
print("玩家 {} 的回合".format(self.player))
row = int(input("请输入要下棋的行号:"))
col = int(input("请输入要下棋的列号:"))
self.make_move(row, col)
if self.player == 'X':
self.player = 'O'
else:
self.player = 'X'
测试代码
game = TicTacToe()
game.play()
增强智能性
可以通过以下方法增强程序的智能性:
- 积分规则: 可以从行、列、对角线上已有棋子的组合情况来计算每个位置的分值,例如“XX”计50分,“OO”计25分等等。
- 下棋策略: 计算机可以选择得分最高的空位下棋,或者采取更复杂的策略,例如预判对手的下一步棋,从而选择最佳的下棋位置。
通过以上方法,可以让计算机下棋更具策略性,从而提高游戏的可玩性。
原文地址: https://www.cveoy.top/t/topic/qgWR 著作权归作者所有。请勿转载和采集!