这个作业属于哪个课程 |
软件工程 |
这个作业要求在哪里 |
查看作业要求 |
这个作业的目标 |
学会从0开始写一个小游戏,学会pygame的使用 |
学号 |
102202112刘莹 |
一、🛠️ 工具准备
- 安装 Pygame
- 使用到的 AIGC 工具:
- Craiyon、豆包:生成游戏背景图和游戏图标
- ChatGPT:编写部分代码
二、🎮 游戏设计逻辑
(一)游戏界面设计
- 使用 Craiyon 设计游戏背景并进行修改
- 使用豆包设计游戏中用于消除的图标
- 使用豆包设计游戏中的按键
(二)游戏规则设计
1. 游戏目标
游戏分为两个模式:简单模式 和 困难模式。玩家通过点击和消除相同图标获得高分,依据模式要求在限定时间内消除所有图标来通关。
2. 游戏模式
- 简单模式:
- 图标:每种图标出现2次或2的倍数次,共8种不同的图标。
- 目标:倒计时结束前清除所有图标获胜。
- 困难模式:
- 图标:每种图标出现3次或3的倍数次,共10种不同的图标。
- 空格:界面底部有五个空格。
- 目标:倒计时结束前清除所有图标获胜,五个空格被填满则游戏结束。
(三)🔊 游戏音效设计
- 点击音效:图标被点击时播放。
- 消除音效:图标匹配成功时播放。
- 成功音效:游戏成功结束时播放。
- 失败音效:游戏失败时播放。
(四)🖥️ 游戏界面
1. 主菜单
- 选择模式:点击“简单模式”或“困难模式”开始游戏。
- 游戏说明:点击查看游戏规则。
- 退出游戏:退出游戏。
2. 游戏进行中
- 图标显示:界面上显示图标,玩家可以点击选择。
- 倒计时:倒计时从30秒开始,时间以红色显示在屏幕上方。
- 分数:屏幕右上角显示当前得分。
3. 游戏结束
- 成功:清除所有图标或达到指定分数后,显示“通关啦”的图片,并有“重新开始”和“退出游戏”按钮。
- 失败:倒计时结束未完成目标,显示“游戏结束”图片,并提供“重新开始”和“退出游戏”按钮。
4. 按钮功能
- 重新开始:点击返回主菜单。
- 退出游戏:退出游戏程序。
(五)📚 操作指南
- 选择图标:点击屏幕上的图标进行选择。
- 放置图标:选中图标后,自动放置在底部空格中。
- 消除图标:若底部有三个或更多相同图标,它们会被消除,得分增加。
三、🎥 游戏展示及过程
- 游戏主界面
- 游戏过程界面(困难模式)
- 游戏成功通关界面
- 游戏失败界面
- 游戏说明界面
- 游戏图标展示
四、📂 项目展示
(一)项目代码:
GitHub 项目地址
(二)项目介绍
1. 前端设计与特色功能
- 前端设计:基于 Pygame 开发,整个设计注重用户体验和界面友好性。
- 主界面设计:
- 功能菜单:主界面提供了模式选择、游戏说明和退出游戏三个选项,玩家可以轻松选择进入相应的功能。
- 背景设计:游戏背景简洁明了,与游戏整体风格保持一致,使玩家可以专注于游戏本身。
- 游戏界面
- 图标布局:游戏中会出现若干可点击的图标,布局合理,方便玩家点击。
- 倒计时与分数:倒计时和分数显示在屏幕上方,红色字体醒目,帮助玩家时刻了解剩余时间和当前得分。
- 按钮布局:重新开始和退出游戏按钮放置在图片中央,操作直观。
- 特色功能:
- 双模式选择:提供了简单模式和困难模式,两者在规则上保持一致,但难度不同。玩家可以根据自己的水平进行挑战。
- 音效系统:每个操作(点击、消除、胜利、失败)都有不同的音效,增强玩家的沉浸感。
- 计时机制:游戏中提供了倒计时功能,玩家需要在规定时间内达成目标,增加了紧张感和挑战性。
2. 使用技术及算法:使用Pygame进行游戏前端界面的渲染和交互处理
- 技术栈
- Pygame库:用于游戏界面绘制、事件处理、音效播放和图像加载。
- Python:作为游戏的主要开发语言,处理逻辑控制和数据交互。
- 图标点击与消除检测算法
- 点击检测:通过Pygame的事件处理功能,监听鼠标点击事件。当鼠标点击图标时,检测该点击是否位于图标的区域内。如果命中,则选中该图标。
- 叠层图标检测识别:为了解决图标重叠时的点击优先问题,在点击检测时,首先按图标的显示顺序进行排序,确保点击最上层的图标能被优先识别。
- 消除算法:当底部栏中出现三个及以上相同图标时,触发消除逻辑,通过遍历底部栏中的图标,检查是否满足条件(相同图标个数>=3),如果满足则调用消除函数,移除相应图标并播放音效,同时更新分数。。
- 游戏结束状态判断与音效处理
- 倒计时实现:通过每帧更新机制实现实时倒计时功能。
- 游戏结束判断:
- 成功判断:如果在规定时间内成功消除所有图标或达到指定分数,播放成功音效并显示成功图片。
- 失败判断:如果时间耗尽且未完成目标,则播放失败音效并显示失败图片。
依据游戏状态播放不同的音效,并切换到对应的结束界面。
(三)项目测试
(四)AIGC表格:学习内容及心得体会
序号 |
学习内容 |
心得体会 |
1 |
Pygame库的使用 |
学会了如何使用Pygame创建简单的2D游戏界面、加载图像、处理用户输入,以及播放音效,实用性很强。 |
2 |
事件监听与响应机制 |
掌握了Pygame的事件监听机制,通过处理用户输入(如鼠标点击、键盘操作)来改变游戏状态,提高了对事件驱动开发的理解。 |
3 |
图标点击与消除逻辑 |
通过实现图标点击、消除算法,理解了如何管理游戏对象的状态与交互,体会到了逻辑结构在游戏开发中的重要性。 |
4 |
时间与倒计时机制 |
学习了如何实现时间管理,特别是在游戏中实现倒计时功能,提升了对游戏进程控制的理解。 |
5 |
游戏结束判断 |
在不同条件下判断游戏胜利或失败,理解了如何根据游戏状态调整用户界面和音效,为游戏逻辑增加了更多细节与趣味性。 |
6 |
用户体验设计 |
从界面布局到操作交互,注重用户体验,意识到图像、音效等细节在提升游戏可玩性方面的作用。 |
7 |
调试与问题解决 |
通过调试代码,解决了如图标点击层级等问题,学会了如何快速定位和解决游戏开发中的实际问题。 |
8 |
算法优化 |
在图标消除、倒计时等算法的优化上,深刻体会到如何在游戏开发中平衡性能与功能性。 |
9 |
音效管理与互动 |
为不同操作添加音效后,增强了游戏的互动性,体会到了声音在游戏体验中的重要性。 |
10 |
项目管理与开发流程控制 |
学会了如何合理分配开发任务,使用PSP表格对任务进行分解,提升了项目管理的意识。 |
(五)PSP表格:任务分解与时间管理
PSP阶段 |
任务内容 |
预估耗时 (小时) |
实际耗时 (小时) |
备注 |
计划 |
预估项目开发时间,制定整体开发计划 |
1 |
1 |
规划了每个开发阶段的主要任务和预计所需时间。 |
需求分析 |
分析并确定游戏的功能需求 |
2 |
2.5 |
深入分析了用户交互、音效反馈、图标消除等需求,超出预期时间。 |
设计 |
界面设计、音效布局、游戏逻辑设计 |
3 |
3.5 |
界面设计花费了更多时间,尤其是重叠图标点击问题的处理。 |
实现编码 |
编写Pygame代码,处理图标消除、倒计时、游戏结束判断等逻辑 |
8 |
9 |
编写代码过程中遇到一些调试问题,如图标点击层级和音效播放的细节处理。 |
测试 |
对游戏各个功能进行全面测试,确保逻辑正确 |
3 |
4 |
测试中发现了一些意外行为,尤其是在音效和界面切换上,需要进行多次调整。 |
调试与修正 |
修复调试过程中出现的BUG |
2 |
3 |
修复了如倒计时不准、音效错位等问题,耗时略超预期。 |
评审 |
项目整体评估,分析是否满足需求,优化细节 |
2 |
2 |
进行整体检查和评估,最终效果基本达到预期。 |
文档撰写 |
撰写项目文档,整理代码注释及项目说明 |
2 |
1.5 |
文档撰写顺利完成,时间略低于预期。 |
总结与反思 |
总结整个项目的开发经验,撰写心得体会 |
1 |
1 |
对开发过程中的问题与经验进行总结,并提出改进方向。 |
总耗时 |
|
24 |
27.5 |
整个项目实际耗时略高于预期,主要集中在设计和调试阶段。 |
五、📝 个人小结
在本次项目中,通过使用 Pygame,我学会了如何从零开发一个2D游戏,尤其是在界面设计、音效系统和逻辑处理上有了很大进步。我深刻认识到细节设计的重要性,比如图标点击识别和音效加入对游戏体验的提升。通过 PSP 表格的管理,我的时间分配和项目管理能力也得到了锻炼。未来,我会更加注重开发过程中的细节优化,继续提升自己的开发技能和用户体验设计能力。