编写五子棋的完整python代码_python实现五子棋程序
时间: 2023-07-23 09:08:44 浏览: 126
好的,以下是五子棋的完整Python代码:
```python
import numpy as np
# 定义棋盘大小
BOARD_SIZE = 15
# 定义棋子类型
EMPTY = 0
BLACK = 1
WHITE = 2
class Board:
def __init__(self):
self.board = np.zeros((BOARD_SIZE, BOARD_SIZE), dtype=np.int32)
self.current_player = BLACK
def get(self, x, y):
return self.board[x][y]
def put(self, x, y):
self.board[x][y] = self.current_player
def switch_player(self):
self.current_player = WHITE if self.current_player == BLACK else BLACK
def is_valid_move(self, x, y):
if x < 0 or x >= BOARD_SIZE or y < 0 or y >= BOARD_SIZE:
return False
if self.board[x][y] != EMPTY:
return False
return True
def is_game_over(self):
# 判断横向是否有五子相连
for i in range(BOARD_SIZE):
for j in range(BOARD_SIZE - 4):
if self.board[i][j] == self.board[i][j+1] == self.board[i][j+2] == self.board[i][j+3] == self.board[i][j+4] and self.board[i][j] != EMPTY:
return True
# 判断竖向是否有五子相连
for i in range(BOARD_SIZE - 4):
for j in range(BOARD_SIZE):
if self.board[i][j] == self.board[i+1][j] == self.board[i+2][j] == self.board[i+3][j] == self.board[i+4][j] and self.board[i][j] != EMPTY:
return True
# 判断左上到右下是否有五子相连
for i in range(BOARD_SIZE - 4):
for j in range(BOARD_SIZE - 4):
if self.board[i][j] == self.board[i+1][j+1] == self.board[i+2][j+2] == self.board[i+3][j+3] == self.board[i+4][j+4] and self.board[i][j] != EMPTY:
return True
# 判断左下到右上是否有五子相连
for i in range(4, BOARD_SIZE):
for j in range(BOARD_SIZE - 4):
if self.board[i][j] == self.board[i-1][j+1] == self.board[i-2][j+2] == self.board[i-3][j+3] == self.board[i-4][j+4] and self.board[i][j] != EMPTY:
return True
return False
def __str__(self):
result = ' '
for i in range(BOARD_SIZE):
result += str(i) + ' '
result += '\n'
for i in range(BOARD_SIZE):
result += str(i) + ' '
for j in range(BOARD_SIZE):
if self.board[i][j] == EMPTY:
result += '+ '
elif self.board[i][j] == BLACK:
result += 'X '
else:
result += 'O '
result += '\n'
return result
board = Board()
while True:
print(board)
if board.current_player == BLACK:
print('黑方落子:')
else:
print('白方落子:')
x = int(input('请输入x坐标:'))
y = int(input('请输入y坐标:'))
if board.is_valid_move(x, y):
board.put(x, y)
if board.is_game_over():
print(board)
print('游戏结束!')
break
board.switch_player()
else:
print('无效的落子!')
```
这个代码实现了一个文本版的五子棋游戏,可以在命令行中运行。玩家先输入x坐标,然后输入y坐标,程序会检测这个落子是否有效,并将棋子放在棋盘上。当有一方获胜时,程序会打印出游戏结束的消息。
阅读全文