软件工程第二次个人作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2024 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253 |
这个作业的目标 | 借助AIGC工具,设计一个类似“羊了个羊”的消除小游戏 |
学号 | 102202115 |
项目展示🐳
Github仓库链接:https://github.com/nymph4x/nymph4x.git
项目介绍🐬
该项目是一个基于Pygame库开发的益智类消除游戏,名为"鱼了个鱼"。玩家需要通过点击匹配三张相同图案的卡片来将它们消除,并在规定时间内清空所有卡片即可获胜。游戏包含不同的难度模式,并提供了简单的用户界面,包括主菜单、游戏界面以及游戏结束界面。
前端设计与特色功能🍧
- 图像设计: 游戏中采用多种图像背景和卡片图案,背景图案包括主菜单、游戏进行中的场景以及游戏胜利/失败的背景。
- 卡片互动: 玩家点击卡片进行匹配操作,点击三张相同的卡片即消除,卡片之间的交互响应流畅。
- 倒计时功能: 在游戏中,玩家需要在规定时间内完成匹配,提供了实时倒计时显示功能。
- 难度选择: 玩家可在游戏开始前选择"简单模式"或"困难模式",每种模式对应不同数量的卡片和时间限制。
- 反馈机制: 游戏中,当匹配错误或成功消除时,卡片会有视觉反馈(边框或消除效果)。
项目使用技术和特殊算法✨
- Pygame: Pygame是一个基于Python的游戏开发库,用于处理图像、音效、键盘鼠标事件等。
- 图像加载与缩放: 使用pygame.image.load()加载图片,并通过pygame.transform.scale()对图片进行适配屏幕尺寸的缩放。
- 卡片的堆叠逻辑: 卡片放置时有两个层次,模拟了堆叠的效果,游戏在布局时随机生成卡片的坐标,并考虑不让相同卡片重叠过多。
- 匹配逻辑: 通过在卡片类Card中使用selected和cleared标记卡片的状态,匹配时检查选中的三张卡片是否具有相同的图片,并通过移除标记来清除卡片。
实现思路🍀
- 卡片生成: 随机生成位置和层次的卡片,并确保卡片在生成时不完全重叠。
- 卡片匹配: 检测玩家点击的三张卡片是否相同,如果匹配成功,则标记卡片为cleared并从游戏中移除;如果不匹配,卡片将恢复未选中状态。
- 时间倒计时: 使用pygame.time.get_ticks()函数记录游戏开始后的时间,并在游戏界面显示剩余时间。
下图展示了游戏逻辑和卡片匹配过程:
+--------------------+ +---------------+
| 玩家点击卡片 | -> | 匹配三张卡片 |
+--------------------+ +-------+-------+
|
+--------------------------+
| 全部匹配成功? |
+-------+-----------+-------+
| |
是 | | 否
| |
+---------------------+ |
| 消除选中卡片,继续 | |
+---------------------+ |
|
+-----------------------------+
| 重置已选卡片,玩家继续选择 |
+-----------------------------+
测试🍥
针对“鱼了个鱼”游戏的功能,编写以下测试样例来确保游戏逻辑和用户界面工作正常。
测试样例1:正常匹配三张相同卡片
测试步骤:
- 运行游戏并选择"简单模式"。
- 在游戏中找到三张相同的卡片,点击它们依次进行匹配。
- 检查是否成功消除这三张卡片。
测试样例2:错误匹配三张不同卡片
测试步骤:
- 运行游戏并选择"简单模式"。
- 在游戏中点击三张不同的卡片。
- 检查卡片是否会被恢复为未选中状态(卡片的边框颜色恢复为默认状态)。
测试样例3:倒计时结束
测试步骤:
- 运行游戏并选择"困难模式"。
- 等待60秒的倒计时结束,不进行任何操作。
- 检查是否进入失败界面。
测试样例4:胜利条件
测试步骤:
- 运行游戏并选择"简单模式"。
- 匹配并消除所有卡片。
- 检查是否进入胜利界面。
测试样例5:主菜单按钮交互
测试步骤:
- 运行游戏并进入主菜单。
- 点击"Start Game"按钮进入游戏,或点击"Easy Mode"和"Hard Mode"按钮。
- 检查按钮是否可以正常响应。
测试结果展示🍡
主菜单:
游戏界面(简单模式):
游戏界面(困难模式):
结束界面(胜利):
结束界面(失败):
动态测试:
上传到了github上:https://github.com/nymph4x/nymph4x/blob/main/动态测试.mp4
测试设计评价
- 覆盖范围: 测试用例涵盖了游戏的关键功能,包括匹配逻辑、计时功能、胜利/失败条件、菜单交互等。基本涵盖了用户可能遇到的常见场景。
- 功能验证: 通过这些测试,验证了卡片匹配的正确性、倒计时功能、游戏的胜负判断,以及用户界面的交互效果。
- 边界测试: 进行了错误匹配和倒计时结束的场景测试,确保游戏在异常操作和时间限制到期后能正常处理。
- 可扩展性: 未来可以增加更多边界测试,例如:
- 多层卡片的匹配(考虑卡片的Z轴层次)。
- 考虑更多复杂的游戏逻辑(如更高难度的卡片数量和时间限制)。
总结
通过以上测试,基本覆盖了游戏的核心功能,确保游戏可以按预期运行,用户体验流畅。测试用例满足了程序的主要需求,并提供了可靠的保障。
AIGC表格🎊
使用AIGC工具生成了以下表格,记录了项目中的学习内容及心得体会:
子任务 | 借助何种AIGC技术,实现了什么功能 | 效果如何 |
---|---|---|
界面设计与美术素材 | 使用Craiyon生成游戏的背景图和卡片图案 | 效果良好,Craiyon生成的图像提供了卡片的多样性和界面设计的灵活性。图像生成省去了手动设计的时间。 |
代码生成与优化 | 使用GitHub Copilot自动补全部分Pygame代码,实现卡片逻辑 | Copilot帮助补全代码逻辑,提升了代码编写效率,尤其是常用的Pygame操作、事件处理和基础UI设计部分。 |
测试用例设计 | 使用ChatGPT设计详细的测试用例 | ChatGPT生成了多个符合需求的测试用例,涵盖了匹配、倒计时、菜单交互等,确保功能完整性和覆盖率。 |
功能描述与文档撰写 | 使用ChatGPT撰写项目文档,介绍代码功能、项目思路和测试方案 | ChatGPT生成的文档清晰且易于理解,节省了编写时间,文档内容涵盖了项目各个功能模块及测试设计的详尽描述。 |
AIGC技术的优缺点
-
优点:
- 快速生成内容: AIGC技术可以帮助快速生成美术素材、代码和文档,减少开发时间,提升开发效率。
- 辅助设计与创作: 在项目设计阶段,AIGC工具可以提供有用的建议和创意,特别适用于生成图像、测试用例和代码优化。
- 持续学习与改进: 基于历史数据和反馈,AIGC工具能够自我改进,提供更符合需求的生成结果。
-
缺点:
- 对创意限制: 在图像和代码生成上,AIGC的灵活性有限,有时不能完全满足个性化需求,需要手动调整和修改。
- 无法处理复杂逻辑: 对于复杂的游戏逻辑设计和具体算法实现,AIGC的理解和生成能力有限,可能需要人工介入进行修改。
- 缺乏精确度: 对于非常具体的需求,AIGC生成的内容可能不够准确,需要进一步调整和优化。
适用场景与限制
- 适合用在:
- 生成简单素材(如图像、代码片段、测试用例)。
- 辅助文档撰写和初步代码编写,尤其是常见的框架搭建和逻辑实现。
- 不适合用在:
- 复杂的业务逻辑设计和细致的算法优化。
- 精确的用户交互设计,尤其是涉及大量个性化元素时,AIGC可能无法完全满足需求。
PSP表格🎉
PSP 阶段 | 预估耗时(分钟) | 实际耗时(分钟) | 评价 |
---|---|---|---|
需求分析 | 30 | 50 | 基本按照预期,需求明确清晰 |
程序设计 | 100 | 120 | 卡片生成和匹配逻辑稍复杂,耗时略超 |
编码实现 | 300 | 350 | Pygame的学习曲线稍高,特别是图像处理部分 |
测试与调试 | 40 | 60 | 测试全面,发现了一些边界情况,修正后顺利通过 |
总结与文档撰写 | 60 | 60 | 需要梳理清楚思路,且细化功能模块。 |
个人作业评价🎈
- 优点: 完成了从需求分析、设计、编码到测试的完整流程,提升了对Pygame库的理解和应用能力,能够通过合理的算法设计实现游戏的逻辑。
- 不足: 图像处理部分可以更进一步优化,例如同层卡片不可重叠,提升游戏的视觉效果,卡片上方若有覆盖无法选中。