用python编写一个字符界面的五子棋人机对战程序,游戏难度中等
时间: 2024-05-01 10:24:07 浏览: 115
基于python实现五子棋人机对战
5星 · 资源好评率100%
好的,让我们开始!
首先,我们需要安装一个名为curses的Python库,它是用于创建字符界面的标准库。如果您使用的是Linux或MacOS,则此库应该已经存在。如果您使用的是Windows,则需要安装该库。您可以通过在命令行中键入以下命令来安装它:
```
pip install windows-curses
```
接下来,我们将编写一个五子棋游戏的主程序。在这个程序中,我们将使用一个名为Gomoku的类来表示游戏状态。我们将使用一个名为Player的类来表示玩家和计算机玩家,并使它们实现相同的接口。最后,我们将使用一个名为Game的类来控制游戏流程。
下面是完整代码:
```python
import curses
import random
class Gomoku:
def __init__(self, size):
self.size = size
self.board = [[' ' for x in range(size)] for y in range(size)]
self.current_player = 'X'
self.winner = None
def __str__(self):
rows = []
for i in range(self.size):
row = '|'.join(self.board[i])
rows.append(row)
separator = '\n' + '-' * (2 * self.size - 1) + '\n'
return separator.join(rows)
def play(self, x, y):
if self.board[y][x] != ' ':
return False
self.board[y][x] = self.current_player
if self.check_win(x, y):
self.winner = self.current_player
self.current_player = 'O' if self.current_player == 'X' else 'X'
return True
def check_win(self, x, y):
directions = [
(1, 0),
(0, 1),
(1, 1),
(1, -1),
]
for dx, dy in directions:
count = 1
tx, ty = x + dx, y + dy
while tx < self.size and ty < self.size and self.board[ty][tx] == self.current_player:
count += 1
tx += dx
ty += dy
tx, ty = x - dx, y - dy
while tx >= 0 and ty >= 0 and self.board[ty][tx] == self.current_player:
count += 1
tx -= dx
ty -= dy
if count >= 5:
return True
return False
class Player:
def __init__(self, name):
self.name = name
def get_move(self, game):
while True:
try:
x = int(input('Enter x coordinate: '))
y = int(input('Enter y coordinate: '))
if game.play(x, y):
return
else:
print('That spot is already taken!')
except ValueError:
print('Invalid input! Please enter numbers.')
class ComputerPlayer(Player):
def get_move(self, game):
for y in range(game.size):
for x in range(game.size):
if game.board[y][x] == ' ':
if game.play(x, y):
return
raise Exception('No available moves!')
class Game:
def __init__(self, size, player1, player2):
self.game = Gomoku(size)
self.player1 = player1
self.player2 = player2
def play(self):
while not self.game.winner:
print(self.game)
if self.game.current_player == 'X':
self.player1.get_move(self.game)
else:
self.player2.get_move(self.game)
print(self.game)
print(f'{self.game.winner} wins!')
def main(stdscr):
size = 15
game = Game(size, Player('Human'), ComputerPlayer('Computer'))
game.play()
if __name__ == '__main__':
curses.wrapper(main)
```
我们定义了Gomoku类,它表示游戏状态。我们还定义了Player和ComputerPlayer类,它们表示玩家和计算机玩家,并实现了相同的接口。最后,我们定义了Game类,它控制游戏流程。
在主函数中,我们创建一个Game对象,并调用其play方法,以开始游戏。
游戏将在终端中进行。玩家可以通过输入x和y坐标来下棋。计算机玩家将随机选择一个可用的方格。
注意,我们使用了curses库来创建字符界面,并在最后使用了curses.wrapper函数来处理异常并恢复终端设置。
现在您可以尝试运行代码并开始玩中等难度的五子棋游戏了!
阅读全文