一、项目背景:为什么做这个游戏?

最近“抓大鹅”类游戏在短视频平台爆火,这类游戏操作简单却充满趣味性,非常适合用来学习游戏开发基础。本文将用Python的Pygame库带你实现一个极简版抓大鹅游戏,全程代码不足200行,即使是编程新手也能轻松理解。

二、准备工作:环境搭建

1. 安装Pygame库

pip install pygame

2. 游戏功能规划

  • 玩家操作:用鼠标点击移动的大鹅
  • 核心机制:大鹅随机移动,点击得分,限时60秒
  • 界面元素:得分显示、倒计时、游戏结束提示

三、代码实现:分模块解析

1. 初始化设置

import pygame
import random
import time

# 初始化Pygame
pygame.init()

# 窗口设置
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("抓大鹅小游戏")

# 颜色定义
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

# 字体设置
font = pygame.font.SysFont("华文黑体", 36)

2. 大鹅类设计

class Goose:
    def __init__(self):
        self.radius = 50  # 大鹅半径
        self.color = GREEN
        self.reset_position()  # 初始化位置
        
    def reset_position(self):
        """随机生成大鹅位置"""
        self.x = random.randint(self.radius, SCREEN_WIDTH - self.radius)
        self.y = random.randint(self.radius, SCREEN_HEIGHT - self.radius)
        
    def draw(self):
        """绘制大鹅"""
        pygame.draw.circle(screen, self.color, (self.x, self.y), self.radius)

3. 游戏主循环

def main():
    goose = Goose()
    score = 0
    start_time = time.time()
    running = True

    while running:
        # 事件处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            if event.type == pygame.MOUSEBUTTONDOWN:
                # 点击检测
                mouse_pos = pygame.mouse.get_pos()
                if (mouse_pos[0] - goose.x)**2 + (mouse_pos[1] - goose.y)**2 < goose.radius**2:
                    score += 1
                    goose.reset_position()  # 得分后重新生成位置

        # 界面绘制
        screen.fill(WHITE)
        
        # 绘制大鹅
        goose.draw()
        
        # 绘制得分和倒计时
        elapsed_time = int(time.time() - start_time)
        remaining_time = 60 - elapsed_time
        
        # 显示得分
        score_text = font.render(f"得分: {score}", True, RED)
        screen.blit(score_text, (20, 20))
        
        # 显示倒计时
        time_text = font.render(f"剩余时间: {remaining_time}s", True, RED)
        screen.blit(time_text, (SCREEN_WIDTH - 200, 20))
        
        # 游戏结束判断
        if remaining_time <= 0:
            game_over_text = font.render("游戏结束!得分: {}".format(score), True, RED)
            text_rect = game_over_text.get_rect(center=(SCREEN_WIDTH//2, SCREEN_HEIGHT//2))
            screen.blit(game_over_text, text_rect)
            pygame.display.update()
            pygame.time.delay(2000)  # 停留2秒
            running = False
        
        pygame.display.update()
        pygame.time.delay(50)  # 控制帧率

    pygame.quit()

if __name__ == "__main__":
    main()

四、运行效果演示

窗口中绿色大鹅随机移动,鼠标点击得分,上方显示分数和剩余时间,时间耗尽后显示最终得分)

五、代码优化建议(进阶方向)

  1. 音效添加

    # 增加点击音效
    click_sound = pygame.mixer.Sound("click.wav")
    # 在点击得分处添加:
    click_sound.play()
  2. 难度升级
  3. 增加大鹅移动速度(定时改变半径或位置间隔)
  4. 添加多个大鹅同时出现
  5. 界面美化
  6. 使用图片素材代替纯色圆形(pygame.image.load()加载图片)
  7. 添加开始菜单和重新游戏按钮

六、总结:从代码到游戏思维

通过这个项目,你将学会:

  • Pygame的基本初始化和窗口管理
  • 随机事件处理(大鹅位置生成)
  • 碰撞检测算法(圆形距离计算)
  • 游戏状态管理(得分、倒计时)

游戏开发的核心是将现实逻辑转化为代码逻辑,建议初学者多尝试修改参数(如大鹅大小、移动速度),观察效果变化,逐步培养“游戏思维”。下次我们可以尝试添加障碍物和道具系统,让游戏更具挑战性!


程序员老叶
1 声望0 粉丝

十年老程序猿一枚