python五子棋源代码
时间: 2023-06-22 11:37:56 浏览: 220
【Python项目小游戏源代码】五子棋控制台版(附程序使用说明+配置文件).zip
以下是一个简单的 Python 五子棋游戏源代码:
```python
import numpy as np
import pygame
# 定义棋盘大小
BOARD_SIZE = 15
# 定义棋子大小
PIECE_SIZE = 30
# 定义棋盘坐标偏移量
OFFSET = (PIECE_SIZE // 2, PIECE_SIZE // 2)
# 定义棋盘颜色
BOARD_COLOR = (188, 122, 88)
# 定义黑棋颜色
BLACK_COLOR = (0, 0, 0)
# 定义白棋颜色
WHITE_COLOR = (255, 255, 255)
# 初始化棋盘
board = np.zeros((BOARD_SIZE, BOARD_SIZE), dtype=np.int)
# 初始化 Pygame
pygame.init()
# 创建窗口
screen = pygame.display.set_mode((BOARD_SIZE * PIECE_SIZE, BOARD_SIZE * PIECE_SIZE))
# 设置窗口标题
pygame.display.set_caption('五子棋')
# 画棋盘
def draw_board():
for i in range(BOARD_SIZE):
pygame.draw.line(screen, BOARD_COLOR, (OFFSET[0], i * PIECE_SIZE + OFFSET[1]),
((BOARD_SIZE - 1) * PIECE_SIZE + OFFSET[0], i * PIECE_SIZE + OFFSET[1]))
pygame.draw.line(screen, BOARD_COLOR, (i * PIECE_SIZE + OFFSET[0], OFFSET[1]),
(i * PIECE_SIZE + OFFSET[0], (BOARD_SIZE - 1) * PIECE_SIZE + OFFSET[1]))
# 画棋子
def draw_piece(x, y, color):
pygame.draw.circle(screen, color, (x * PIECE_SIZE + OFFSET[0], y * PIECE_SIZE + OFFSET[1]), PIECE_SIZE // 2)
# 判断是否胜利
def is_win(x, y, color):
# 判断横向是否有五个棋子相连
count = 0
for i in range(BOARD_SIZE):
if board[x][i] == color:
count += 1
else:
count = 0
if count == 5:
return True
# 判断纵向是否有五个棋子相连
count = 0
for i in range(BOARD_SIZE):
if board[i][y] == color:
count += 1
else:
count = 0
if count == 5:
return True
# 判断左上到右下是否有五个棋子相连
count = 0
for i in range(-4, 5):
if x + i < 0 or x + i >= BOARD_SIZE or y + i < 0 or y + i >= BOARD_SIZE:
continue
if board[x + i][y + i] == color:
count += 1
else:
count = 0
if count == 5:
return True
# 判断右上到左下是否有五个棋子相连
count = 0
for i in range(-4, 5):
if x + i < 0 or x + i >= BOARD_SIZE or y - i < 0 or y - i >= BOARD_SIZE:
continue
if board[x + i][y - i] == color:
count += 1
else:
count = 0
if count == 5:
return True
return False
# 游戏循环
def game_loop():
# 设置当前玩家为黑棋
player = BLACK_COLOR
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.MOUSEBUTTONDOWN:
x, y = event.pos
# 计算棋子所在的行列
row = (y - OFFSET[1]) // PIECE_SIZE
col = (x - OFFSET[0]) // PIECE_SIZE
# 判断是否已经下过棋
if board[row][col] == 0:
# 下棋
board[row][col] = player
# 画棋子
draw_piece(col, row, player)
# 判断是否胜利
if is_win(row, col, player):
# 显示胜利信息
if player == BLACK_COLOR:
print('黑棋胜利!')
else:
print('白棋胜利!')
# 重新开始游戏
board.fill(0)
draw_board()
player = BLACK_COLOR
else:
# 切换玩家
player = WHITE_COLOR if player == BLACK_COLOR else BLACK_COLOR
# 刷新屏幕
pygame.display.update()
# 画棋盘
draw_board()
# 进入游戏循环
game_loop()
# 退出 Pygame
pygame.quit()
```
这个程序实现了一个基本的五子棋游戏,包括棋盘的绘制、棋子的下子和胜利判断等功能。但是它还有一些不足之处,比如没有实现禁手规则,也没有加入悔棋和重新开始游戏的功能。
阅读全文