用python写一个字符界面人机对战的五子棋游戏,游戏难度中等
时间: 2024-05-09 13:15:22 浏览: 142
好的,我来写一个五子棋游戏的代码,难度中等,采用字符界面,使用Python语言实现。
首先,我们需要定义一个棋盘,使用一个二维列表来表示:
```python
board = [['+' for i in range(15)] for j in range(15)]
```
其中,'+'表示空位,'O'表示玩家棋子,'X'表示电脑棋子。
接着,我们需要定义一个函数来打印出棋盘:
```python
def print_board(board):
print(' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15')
for i in range(15):
print(chr(i + ord('A')), end=' ')
for j in range(15):
print(board[i][j], end=' ')
print()
```
这个函数会输出一个15x15的棋盘,每个位置都有一个坐标。
接下来,我们需要定义一个判断胜负的函数,这里采用的是枚举所有五个棋子连成一线的情况,判断是否有五个相同的棋子连成一线:
```python
def check_win(board, row, col):
directions = [(0, 1), (1, 0), (1, 1), (1, -1)]
for d in directions:
count = 1
for i in range(1, 5):
r = row + i * d[0]
c = col + i * d[1]
if r < 0 or r >= 15 or c < 0 or c >= 15 or board[r][c] != board[row][col]:
break
count += 1
for i in range(1, 5):
r = row - i * d[0]
c = col - i * d[1]
if r < 0 or r >= 15 or c < 0 or c >= 15 or board[r][c] != board[row][col]:
break
count += 1
if count >= 5:
return True
return False
```
其中,directions表示四个方向,分别为横向、纵向、正斜线、反斜线。
接着,我们需要定义一个函数来判断是否下满了棋子:
```python
def check_full(board):
for i in range(15):
for j in range(15):
if board[i][j] == '+':
return False
return True
```
最后,我们需要编写游戏主体代码,实现人机对战:
```python
import random
def game():
board = [['+' for i in range(15)] for j in range(15)]
player = 'O'
computer = 'X'
while True:
print_board(board)
if player == 'O':
move = input('请落子,例如 A1:')
row = ord(move[0]) - ord('A')
col = int(move[1:]) - 1
if row < 0 or row >= 15 or col < 0 or col >= 15 or board[row][col] != '+':
print('落子无效,请重新输入。')
continue
board[row][col] = player
if check_win(board, row, col):
print_board(board)
print('恭喜,你获得胜利!')
break
if check_full(board):
print_board(board)
print('平局!')
break
player, computer = computer, player
else:
row, col = random.randint(0, 14), random.randint(0, 14)
while board[row][col] != '+':
row, col = random.randint(0, 14), random.randint(0, 14)
board[row][col] = computer
if check_win(board, row, col):
print_board(board)
print('很遗憾,你失败了。')
break
if check_full(board):
print_board(board)
print('平局!')
break
player, computer = computer, player
game()
```
这个代码中,我们使用了一个while循环来不断交替落子,直到游戏结束。其中,player表示玩家,computer表示电脑,每次交替落子后,都要检查是否有一方获胜或者平局。如果是玩家落子,就需要等待玩家输入坐标,如果是电脑落子,则随机生成一个坐标。
这就是一个基于字符界面的五子棋游戏,难度中等。
阅读全文