用python写一个五子棋
时间: 2024-01-08 14:46:16 浏览: 21
好的,下面是用 Python 写的五子棋游戏代码:
```python
import numpy as np
# 定义棋盘大小
BOARD_SIZE = 15
class Board(object):
def __init__(self):
self.board = np.zeros((BOARD_SIZE, BOARD_SIZE))
self.current_player = 1
self.game_over = False
# 判断棋子是否在棋盘内
def in_board(self, x, y):
return x >= 0 and x < BOARD_SIZE and y >= 0 and y < BOARD_SIZE
# 判断该位置是否为空
def is_empty(self, x, y):
return self.board[x][y] == 0
# 落子
def move(self, x, y):
if not self.in_board(x, y):
print('该位置不在棋盘内,请重新落子!')
return False
if not self.is_empty(x, y):
print('该位置已经有棋子,请重新落子!')
return False
self.board[x][y] = self.current_player
self.current_player = 3 - self.current_player
return True
# 判断是否有五子连珠
def check_win(self, x, y):
directions = ((0, 1), (1, 0), (1, 1), (-1, 1))
for dx, dy in directions:
count = 1
for i in range(1, 5):
new_x, new_y = x + i * dx, y + i * dy
if self.in_board(new_x, new_y) and self.board[new_x][new_y] == self.board[x][y]:
count += 1
else:
break
for i in range(1, 5):
new_x, new_y = x - i * dx, y - i * dy
if self.in_board(new_x, new_y) and self.board[new_x][new_y] == self.board[x][y]:
count += 1
else:
break
if count >= 5:
return True
return False
# 判断游戏是否结束
def is_game_over(self):
for x in range(BOARD_SIZE):
for y in range(BOARD_SIZE):
if self.board[x][y] == 0:
continue
if self.check_win(x, y):
self.game_over = True
return True
return False
# 打印棋盘
def print_board(self):
print(' ', end='')
for i in range(BOARD_SIZE):
print(chr(ord('a') + i), end=' ')
print()
for i in range(BOARD_SIZE):
print('%2d' % (i + 1), end=' ')
for j in range(BOARD_SIZE):
if self.board[i][j] == 1:
print('●', end=' ')
elif self.board[i][j] == 2:
print('○', end=' ')
else:
print('+', end=' ')
print()
# 游戏主函数
def main():
board = Board()
while not board.is_game_over():
board.print_board()
if board.current_player == 1:
print('轮到黑方下棋(●):', end='')
else:
print('轮到白方下棋(○):', end='')
move = input()
x, y = ord(move[0]) - ord('a'), int(move[1:]) - 1
if board.move(x, y):
print()
else:
print('请重新输入落子位置!')
board.print_board()
if board.current_player == 1:
print('白方(○)获胜!')
else:
print('黑方(●)获胜!')
if __name__ == '__main__':
main()
```
这个程序使用了 numpy 库来实现二维棋盘的数据存储和处理,代码中实现了落子、判断是否有五子连珠、判断游戏是否结束和打印棋盘等功能。