Python开发飞机大战全教程(三)

简介: 教程来源 https://zlpow.cn 本教程详解Pygame碰撞检测与游戏状态管理:涵盖子弹/敌机、玩家/敌机的碰撞处理,Rect矩形检测原理及自定义方法;并实现游戏结束判定、R键重开、分数实时显示及居中提示功能。

第五部分:碰撞检测

碰撞检测是游戏的核心机制。Pygame提供了多种碰撞检测函数。

5.1 子弹与敌机碰撞
当子弹击中敌机时,两者都应该消失,玩家获得分数。

# 碰撞检测:子弹 vs 敌机
# groupcollide(group1, group2, dokill1, dokill2, collided=None)
# dokill1=True表示group1中的精灵在碰撞后消失
# dokill2=True表示group2中的精灵在碰撞后消失
# 该函数返回一个字典,键是被碰撞的group1精灵,值是被撞到的group2精灵列表
hits = pygame.sprite.groupcollide(bullets, enemies, True, True)
for hit in hits:
    score += 10

5.2 玩家与敌机碰撞
玩家碰到敌机游戏结束。

# spritecollide(sprite, group, dokill, collided=None)
# 检测单个精灵是否与组中的任何精灵碰撞
if pygame.sprite.spritecollide(player, enemies, False):
    game_over = True

5.3 碰撞检测原理
Pygame的碰撞检测默认使用矩形碰撞(Rect Collision),即检测两个矩形是否重叠。这对于矩形或近似矩形的游戏对象非常高效。

如果精灵的形状不是矩形(比如三角形飞机),可以自定义碰撞检测函数。

第六部分:游戏状态与分数显示

6.1 游戏结束和重新开始
我们需要变量记录游戏是否结束。游戏结束时,停止生成新敌机,停止碰撞检测,玩家无法移动。

game_over = False  # 游戏是否结束

# 主循环中
if not game_over:
    # 只有游戏未结束时才更新游戏逻辑
    # 生成敌机、更新位置、碰撞检测等
    pass
else:
    # 游戏结束时,显示提示文字,等待按R键重开
    pass

6.2 重新开始功能
当游戏结束且按下“R”键时,重置所有变量和精灵。

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_r and game_over:
        # 重置游戏状态
        game_over = False
        score = 0

        # 清除所有子弹和敌机
        for sprite in all_sprites:
            if sprite != player:
                sprite.kill()

        # 重置玩家位置
        player.rect.centerx = SCREEN_WIDTH // 2
        player.rect.bottom = SCREEN_HEIGHT - 10

6.3 分数显示
Pygame提供了文字渲染功能,需要在游戏初始化时加载字体。

# 初始化字体模块
pygame.font.init()
# 创建字体对象(None表示默认字体,36表示字体大小)
font = pygame.font.Font(None, 36)

# 在主循环中渲染分数
score_text = font.render(f"Score: {score}", True, (255, 255, 255))
# 绘制到屏幕上(左上角坐标10,10)
screen.blit(score_text, (10, 10))

font.render(text, antialias, color, background=None):

text:要渲染的文字

antialias:是否开启抗锯齿(True使文字边缘平滑)

color:文字颜色

6.4 游戏结束文字

if game_over:
    # 渲染游戏结束文字
    game_over_text = font.render("GAME OVER - Press R to restart", True, (255, 0, 0))
    # 获取文字矩形,用于居中
    text_rect = game_over_text.get_rect(center=(SCREEN_WIDTH//2, SCREEN_HEIGHT//2))
    screen.blit(game_over_text, text_rect)

来源:
https://rvtst.cn

相关文章
|
7天前
|
缓存 人工智能 自然语言处理
我对比了8个Claude API中转站,踩了不少坑,总结给你
本文是个人开发者耗时1周实测的8大Claude中转平台横向评测,聚焦Claude Code真实体验:以加权均价(¥/M token)、内部汇率、缓存支持、模型真实性及稳定性为核心指标。
2973 20
|
19天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
16956 53
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
14天前
|
人工智能 JavaScript Ubuntu
低成本搭建AIP自动化写作系统:Hermes保姆级使用教程,长文和逐步实操贴图
我带着怀疑的态度,深度使用了几天,聚焦微信公众号AIP自动化写作场景,写出来的几篇文章,几乎没有什么修改,至少合乎我本人的意愿,而且排版风格,也越来越完善,同样是起码过得了我自己这一关。 这个其实OpenClaw早可以实现了,但是目前我觉得最大的区别是,Hermes会自主总结提炼,并更新你的写作技能。 相信就冲这一点,就值得一试。 这篇帖子主要就Hermes部署使用,作一个非常详细的介绍,几乎一步一贴图。 关于Hermes,无论你赞成哪种声音,我希望都是你自己动手行动过,发自内心的选择!
3117 29
|
4天前
|
人工智能 测试技术 API
阿里Qwen3.6-27B正式开源:网友直呼“太牛了”!
阿里云千问3.6系列重磅开源Qwen3.6-27B稠密大模型!官网:https://t.aliyun.com/U/JbblVp 仅270亿参数,编程能力媲美千亿模型,在SWE-bench等权威基准中表现卓越。支持多模态理解、本地部署及OpenClaw等智能体集成,已开放Hugging Face与ModelScope下载。
|
3天前
|
机器学习/深度学习 缓存 测试技术
DeepSeek-V4开源:百万上下文,Agent能力比肩顶级闭源模型
DeepSeek-V4正式开源!含V4-Pro(1.6T参数)与V4-Flash(284B参数)双版本,均支持百万token上下文。首创混合注意力架构,Agent能力、世界知识与推理性能全面领先开源模型,数学/代码评测比肩顶级闭源模型。
1593 6
|
3天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
1258 6