Python Pygame 实现简易滑块接球游戏教程

Elena
Elena
发布时间:2026-10-14 | 5人浏览过
原创

本文介绍如何使用Python的Pygame库开发一个简单的滑块接小球游戏。通过绘制圆形、矩形及随机数生成,演示基本的鼠标交互与碰撞逻辑。文章提供完整代码解析,涵盖游戏初始化、主循环处理、球体运动控制及生命值计分机制,适合Python初学者练习基础游戏开发思维。

Pygame滑块接球游戏简介

本文将使用Pygame库创建一个滑块接小球的示例游戏,供读者参考学习。

首先展示游戏运行效果截图。

该游戏逻辑简单直观,主要涉及Pygame中的圆形绘制、矩形绘制以及随机数生成等功能。通过此案例,可以锻炼基础的鼠标控制能力、游戏设计思维以及简单的碰撞判断逻辑。接下来直接展示代码实现。

游戏参数初始化与设置

在编写代码前,需先明确游戏运行所需的各项参数。

游戏核心逻辑与主循环实现


pygame.init()
screen = pygame.display.set_mode((800, 600))
# 生命和得分
lives = 3
score = 0
# 设置颜色
white = 255, 255, 255
yellow = 255, 255, 0
black = 0, 0, 0
red = 220, 50, 50
# 设置字体
font = pygame.font.Font(None, 38)
pygame.mouse.set_visible(False)
game_over = True
# 设置鼠标坐标及鼠标事件参数
# 鼠标坐标
mouse_x = mouse_y = 0
# 滑板坐标
pos_x = 300
pos_y = 580
# 球坐标
ball_x = random.randint(0, 500)
ball_y = -50
# 球半径
radius = 30
# 下落速度
vel = 0.5

def print_text(font, x, y, text, color=white):
    imgText = font.render(text, True, color)
    screen.blit(imgText, (x, y))

以下是对关键参数的解释:

变量game_over初始设置为True,目的是让游戏在启动时处于暂停状态,等待用户鼠标点击后才开始运行。这一机制同时也用于处理游戏结束后重新开始的情况。此外,pygame.mouse.set_visible(False)用于隐藏系统鼠标指针,使游戏体验更沉浸。

接下来是游戏的核心主体部分代码。


# 主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
        elif event.type == pygame.MOUSEMOTION:
            mouse_x, mouse_y = event.pos
            move_x, move_y = event.rel
        elif event.type == pygame.MOUSEBUTTONDOWN:
            lives = 3
            score = 0
            game_over = False

    keys = pygame.key.get_pressed()
    if keys[K_ESCAPE]:
        exit()

    screen.fill((0, 0, 10))

    if game_over:
        print_text(font, 220, 300, "Press MouseButton To Start", white)
    else:
        # 球落到了地上
        if ball_y > 600:
            ball_y = -50
            ball_x = random.randint(0, 800)
            lives -= 1
            if lives == 0:
                game_over = True
        # 球被滑板接住了
        elif pos_y < ball_y and pos_x < ball_x < pos_x + 120:
            score += 10
            ball_y = -50
            ball_x = random.randint(0, 800)
        # 既没有落地上也没被接住的时候,则不断增加y坐标数值使球从顶部落下
        else:
            ball_y += vel
            ball_pos = int(ball_x), int(ball_y)
            pygame.draw.circle(screen, yellow, ball_pos, radius, 0)

        # 滑板不要划出边界
        pos_x = mouse_x
        if pos_x < 0:
            pos_x = 0
        elif pos_x > 700:
            pos_x = 700

        # 画滑板并跟随鼠标左右移动
        pygame.draw.rect(screen, white, (pos_x, 580, 100, 20), 0)
        print_text(font, 50, 0, "Score: " + str(score), red)
        print_text(font, 650, 0, "Lives:" + str(lives), red)

    pygame.display.update()

基本逻辑如下:当球体下落至屏幕底部,或者与滑块发生接触时,通过重置球体的y坐标使其回到屏幕顶部。具体判断条件为:当球体的y坐标大于滑块的y坐标(即球到达滑块高度),且球体的x坐标位于滑块的x坐标范围内时,判定为碰撞成功,球体随即重置到顶部。该游戏逻辑较为简单,后续在引入Sprite精灵类时,将采用更规范的用法及更严谨的碰撞计算方法。

总结与展望

以上是本文的全部内容,希望对各位的学习有所帮助,欢迎大家继续支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表