Python PyGame五子棋小游戏攻略
游戏规则
五子棋是一种双人对弈的纯策略型棋类游戏,通常使用黑白两色棋子,在15x15的棋盘上进行对弈。游戏的规则如下:
- 先手执黑子,后手执白子。
- 黑方先走,双方轮流落子。
- 每次落子只能在棋盘上空余的交叉点处落子。
- 若一方在横/竖/斜方向上形成了连续5个子,则获胜。
PyGame五子棋小游戏制作
第一步:准备工作
安装pygame模块;创建游戏窗口和棋盘。
import pygame
import sys
pygame.init() # 初始化
# 创建窗口
WIDTH = 640
HEIGHT = 640
SIZE = 40
LINE_WIDTH = 2
CELL_COUNT = 15
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("PyGame五子棋小游戏")
# 创建棋盘
board = [[-1] * CELL_COUNT for _ in range(CELL_COUNT)]
第二步:实现落子功能
在棋盘上点击空余的交叉点处即可落子。为了避免重复落子,需要在每次落子后将该位置标记为黑棋或白棋。
# 实现落子功能
def draw_chess_piece(row, col, player):
if row < 0 or row >= CELL_COUNT or col < 0 or col >= CELL_COUNT:
return
if player == 1:
pygame.draw.circle(screen, (0, 0, 0), (col*SIZE+SIZE//2, row*SIZE+SIZE//2), SIZE//2-LINE_WIDTH)
board[row][col] = 1
else:
pygame.draw.circle(screen, (255, 255, 255), (col*SIZE+SIZE//2, row*SIZE+SIZE//2), SIZE//2-LINE_WIDTH)
board[row][col] = 0
pygame.display.update()
第三步:实现胜负判断
在落子后判断当前玩家是否胜利。遍历每个落子点的8个方向,检查是否有相同颜色的棋子连续5个,若有则游戏结束。
# 检查某个位置是否连成五子
def check_win(row, col):
directions = [(1, 0), (0, 1), (1, 1), (1, -1)]
for direction in directions:
count = 1
r, c = row, col
while True:
r += direction[0]
c += direction[1]
if r < 0 or r >= CELL_COUNT or c < 0 or c >= CELL_COUNT or board[r][c] != board[row][col]:
break
count += 1
if count >= 5:
return True
return False
第四步:实现游戏主循环
在游戏循环中,监听玩家点击事件,并在棋盘上落子。每次落子后判断胜负,若游戏结束则弹出胜负信息,否则交换玩家。
# 游戏主循环
player = 1
game_over = False
font = pygame.font.SysFont(None, 48)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if not game_over:
x, y = pygame.mouse.get_pos()
row, col = y//SIZE, x//SIZE
if board[row][col] == -1:
draw_chess_piece(row, col, player)
if check_win(row, col):
text = f"Player {player} 胜利"
game_over = True
else:
player = 1 - player # 交换玩家
if game_over:
pygame.time.delay(1000)
screen.fill((255, 255, 255))
text_width, text_height = font.size(text)
x = (WIDTH - text_width) // 2
y = (HEIGHT - text_height) // 2
screen.blit(font.render(text, True, (0, 0, 0)), (x, y))
# 绘制棋盘网格
for i in range(CELL_COUNT):
pygame.draw.line(screen, (0, 0, 0), (i*SIZE+SIZE//2, SIZE//2), (i*SIZE+SIZE//2, HEIGHT-SIZE//2), LINE_WIDTH)
pygame.draw.line(screen, (0, 0, 0), (SIZE//2, i*SIZE+SIZE//2), (WIDTH-SIZE//2, i*SIZE+SIZE//2), LINE_WIDTH)
pygame.display.update()
示例说明
示范1:实现自定义棋盘大小
在创建游戏窗口和棋盘时,可自定义棋盘的格子数量、格子大小。例如:
CELL_COUNT = 19
SIZE = 30
WIDTH = CELL_COUNT * SIZE
HEIGHT = CELL_COUNT * SIZE
这样就可以创建出19x19的棋盘,每个格子的大小为30。
示例2:实现电脑AI
在游戏主循环中,可以利用一些算法实现电脑AI,让电脑自动下棋,增加游戏的趣味性。
例如,在玩家下完第一步后,电脑的第一步落子可以随机在周围八个位置中选择一个:
elif player == 0:
if len(empty_positions) == CELL_COUNT ** 2 - 1:
row, col = CELL_COUNT // 2, CELL_COUNT // 2
else:
row, col = random.choice(empty_positions)
draw_chess_piece(row, col, player)
empty_positions.remove((row, col))
if check_win(row, col):
text = f"Player {player} 胜利"
game_over = True
else:
player = 1 - player # 交换玩家
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python PyGame五子棋小游戏 - Python技术站