编写五子棋的完整python代码_python实现五子棋程序
时间: 2023-07-23 07:08:44 浏览: 45
好的,下面是五子棋的完整 Python 代码实现:
```python
import numpy as np
# 定义棋盘大小
BOARD_SIZE = 15
# 定义棋子类型
EMPTY = 0
BLACK = 1
WHITE = 2
# 定义棋子颜色映射
STONE_COLOR = {
EMPTY: '.',
BLACK: 'X',
WHITE: 'O'
}
class Board:
""" 五子棋棋盘类 """
def __init__(self):
""" 初始化棋盘 """
self.board = np.zeros((BOARD_SIZE, BOARD_SIZE), dtype=np.int32)
def put_stone(self, x, y, color):
""" 落子 """
self.board[x][y] = color
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 get_winner(self):
""" 判断胜利者 """
for x in range(BOARD_SIZE):
for y in range(BOARD_SIZE):
if self.board[x][y] != EMPTY:
# 判断横向是否有连续五个相同颜色的棋子
if y + 4 < BOARD_SIZE and \
self.board[x][y] == self.board[x][y + 1] == self.board[x][y + 2] == self.board[x][y + 3] == self.board[x][y + 4]:
return self.board[x][y]
# 判断纵向是否有连续五个相同颜色的棋子
if x + 4 < BOARD_SIZE and \
self.board[x][y] == self.board[x + 1][y] == self.board[x + 2][y] == self.board[x + 3][y] == self.board[x + 4][y]:
return self.board[x][y]
# 判断左上到右下是否有连续五个相同颜色的棋子
if x + 4 < BOARD_SIZE and y + 4 < BOARD_SIZE and \
self.board[x][y] == self.board[x + 1][y + 1] == self.board[x + 2][y + 2] == self.board[x + 3][y + 3] == self.board[x + 4][y + 4]:
return self.board[x][y]
# 判断右上到左下是否有连续五个相同颜色的棋子
if x + 4 < BOARD_SIZE and y - 4 >= 0 and \
self.board[x][y] == self.board[x + 1][y - 1] == self.board[x + 2][y - 2] == self.board[x + 3][y - 3] == self.board[x + 4][y - 4]:
return self.board[x][y]
return EMPTY
def __str__(self):
""" 打印棋盘 """
board_str = ''
for i in range(BOARD_SIZE):
row_str = ' '.join([STONE_COLOR[self.board[i][j]] for j in range(BOARD_SIZE)])
board_str += row_str + '\n'
return board_str
class Game:
""" 五子棋游戏类 """
def __init__(self):
""" 初始化游戏 """
self.board = Board()
self.current_player = BLACK
def switch_player(self):
""" 切换下棋玩家 """
if self.current_player == BLACK:
self.current_player = WHITE
else:
self.current_player = BLACK
def play(self, x, y):
""" 下棋 """
if not self.board.is_valid_move(x, y):
print('Invalid move!')
return False
self.board.put_stone(x, y, self.current_player)
winner = self.board.get_winner()
if winner != EMPTY:
print('Game over, winner is {}'.format(STONE_COLOR[winner]))
return True
self.switch_player()
return False
```
以上就是五子棋的完整 Python 代码实现,包含了棋盘类和游戏类,可以在命令行中进行游戏。