介绍
五子棋是一种古老而经典的策略游戏,通过在棋盘上落子,先在横、竖、斜方向上连成五子的一方获胜。本文将使用Python语言和Pygame库实现一个简单的五子棋游戏。
环境设置
- Python 3.x
- Pygame库
pip install pygame
项目结构
|- five_in_a_row_game.py # 主游戏文件
代码编写
import pygame
import sys
# 初始化Pygame
pygame.init()
# 设置窗口尺寸
WIDTH, HEIGHT = 600, 600
WINDOW_SIZE = (WIDTH, HEIGHT)
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption("五子棋")
# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (200, 200, 200)
# 绘制棋盘
def draw_board():
for i in range(1, 16):
pygame.draw.line(screen, BLACK, (40 * i, 40), (40 * i, 560), 2)
pygame.draw.line(screen, BLACK, (40, 40 * i), (560, 40 * i), 2)
pygame.draw.rect(screen, BLACK, (35, 35, 530, 530), 2)
for i in range(3):
for j in range(3):
pygame.draw.circle(screen, BLACK, (160 + 200 * i, 160 + 200 * j), 5, 0)
# 主游戏循环
def main():
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(WHITE)
draw_board()
pygame.display.update()
pygame.quit()
if __name__ == "__main__":
main()
详细解释
- 导入Pygame库并初始化。
- 设置窗口尺寸和标题。
- 定义棋盘颜色和尺寸,并绘制棋盘网格和边框。
- 编写主游戏循环,处理退出事件并绘制棋盘。
总结
通过这个简单的实现,我们成功地创建了一个基本的五子棋游戏框架,为后续功能的实现打下了基础。
扩展功能
- 添加落子功能,允许玩家和AI在棋盘上落子,并检测游戏胜负。
- 实现悔棋功能,允许玩家撤销上一步的落子。
- 设计美观的界面和游戏音效,提升用户体验。
import pygame
import sys
# 初始化Pygame
pygame.init()
# 设置窗口尺寸
WIDTH, HEIGHT = 600, 600
WINDOW_SIZE = (WIDTH, HEIGHT)
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption("五子棋")
# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (200, 200, 200)
BLUE = (0, 0, 255)
RED = (255, 0, 0)
# 加载音效
pygame.mixer.init()
drop_sound = pygame.mixer.Sound("drop.wav")
win_sound = pygame.mixer.Sound("win.wav")
# 定义棋盘大小
ROWS = 15
COLS = 15
GRID_SIZE = WIDTH // COLS
# 初始化棋盘
board = [[0] * COLS for _ in range(ROWS)]
# 绘制棋盘
def draw_board():
for i in range(1, ROWS):
pygame.draw.line(screen, BLACK, (0, i * GRID_SIZE), (WIDTH, i * GRID_SIZE), 2)
for j in range(1, COLS):
pygame.draw.line(screen, BLACK, (j * GRID_SIZE, 0), (j * GRID_SIZE, HEIGHT), 2)
# 绘制棋子
def draw_pieces():
for i in range(ROWS):
for j in range(COLS):
if board[i][j] == 1:
pygame.draw.circle(screen, BLUE, (j * GRID_SIZE + GRID_SIZE // 2, i * GRID_SIZE + GRID_SIZE // 2), GRID_SIZE // 2 - 5)
elif board[i][j] == 2:
pygame.draw.circle(screen, RED, (j * GRID_SIZE + GRID_SIZE // 2, i * GRID_SIZE + GRID_SIZE // 2), GRID_SIZE // 2 - 5)
# 下棋
def drop_piece(row, col, player):
board[row][col] = player
drop_sound.play()
# 判断胜负
def check_win(player):
# 检查横向
for i in range(ROWS):
for j in range(COLS - 4):
if board[i][j] == player and board[i][j+1] == player and board[i][j+2] == player and board[i][j+3] == player and board[i][j+4] == player:
win_sound.play()
return True
# 检查纵向
for i in range(ROWS - 4):
for j in range(COLS):
if board[i][j] == player and board[i+1][j] == player and board[i+2][j] == player and board[i+3][j] == player and board[i+4][j] == player:
win_sound.play()
return True
# 检查斜向(左上到右下)
for i in range(ROWS - 4):
for j in range(COLS - 4):
if board[i][j] == player and board[i+1][j+1] == player and board[i+2][j+2] == player and board[i+3][j+3] == player and board[i+4][j+4] == player:
win_sound.play()
return True
# 检查斜向(右上到左下)
for i in range(4, ROWS):
for j in range(COLS - 4):
if board[i][j] == player and board[i-1][j+1] == player and board[i-2][j+2] == player and board[i-3][j+3] == player and board[i-4][j+4] == player:
win_sound.play()
return True
return False
# 悔棋
def undo_move():
for i in range(ROWS):
for j in range(COLS):
board[i][j] = 0
# 主游戏循环
def main():
player = 1
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
mouseX = event.pos[0]
mouseY = event.pos[1]
clicked_row = mouseY // GRID_SIZE
clicked_col = mouseX // GRID_SIZE
if board[clicked_row][clicked_col] == 0:
drop_piece(clicked_row, clicked_col, player)
if check_win(player):
print("Player", player, "wins!")
player = 3 - player # 切换玩家
elif event.button == 3: # 右键悔棋
undo_move()
screen.fill(WHITE)
draw_board()
draw_pieces()
pygame.display.update()
if __name__ == "__main__":
main()
这段代码实现了基本的五子棋游戏功能,包括落子、胜负判断和悔棋功能以及添加了两种音效:落子音效和胜利音效。你只需要将drop.wav
和win.wav
替换成你喜欢的音效文件。界面方面,你可以进一步美化棋盘、棋子等元素。