软件工程课程第二次个人作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2024 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253 |
这个作业的目标 | 开发“羊了个羊”小游戏 |
学号 | 102202143 |
github代码链接
https://github.com/fzu-ljs/fzu-ljs.github.io/tree/master/软件工程第二次作业
以下是对这段代码的介绍:
一、项目前端设计
- 窗口设置:
- 设定了窗口大小为 1040x780 像素。
- 窗口标题为“羊了个羊游戏菜单”。
- 颜色设计:
- 定义了浅蓝色(LIGHT_BLUE)、黑色(BLACK)和白色(WHITE)三种颜色,用于不同的界面元素。
- 字体设计:
- 使用 Pygame 的字体系统初始化字体,设置了一种默认字体和大小为 36 像素。
- 菜单设计:
- 有四个菜单项,分别是“Easy”、“Rules”、“developing...”和“Exit”。菜单项垂直排列,每个菜单项高度为字体高度的 7 倍。
- 根据鼠标位置和点击事件,菜单项会以不同颜色突出显示,以表示选中状态。
- 游戏界面设计:
- 游戏区域以海底背景图为场景,通过加载和调整背景图片实现。
- 游戏区域是一个 5x5 的九宫格,每个格子有两层图案,交错显示。图案图片经过加载和缩放处理,大小为 70x70 像素。
- 底部有一个矩形框,用于存放被点击的图案。当相同图案数量达到三个及以上时,可以进行消除并得分。
- 屏幕左上角显示倒计时,时间限制为 60 秒。
- 得分显示在屏幕左上角,与倒计时相邻。
- 游戏结束时,显示“Game Over!”界面,包括最终得分、“Restart”按钮和排行榜(显示前五个最高得分)。
二、特色功能
- 音乐播放:
- 初始化音频模块,加载了主菜单音乐(“bgm2.mp3”)并循环播放。当进入游戏时,停止主菜单音乐,播放游戏音乐(“bgm1.mp3”)。
- 游戏规则展示:
- 点击“Rules”菜单项,会显示游戏规则文本,包括如何找到相同图片、三张相同图片可消除以及在限定时间内消除越多得分越高。同时提供“Back”按钮,可返回主菜单。
- 游戏逻辑:
- 玩家点击九宫格中的图案,若底部矩形框中相同图案数量达到三个及以上则消除并得分。
- 当底部矩形框中的图片数量达到 7 个且没有三个相同的图案时,游戏结束。
- 游戏有时间限制,总时间为 60 秒,倒计时显示在屏幕左上角。如果时间耗尽,游戏也会结束。
- 游戏结束后,可点击“Restart”按钮重新开始游戏,此时会重置游戏状态、得分、图片列表等。
- 退出确认:
- 点击“Exit”菜单项,会弹出确认退出对话框,包含“Yes”和“No”两个按钮供用户选择。
三、技术和算法
- 图形绘制技术:
- 使用 Pygame 的图形绘制功能,绘制窗口、菜单项、游戏区域的图案、底部矩形框以及游戏结束界面等。
- 通过加载和调整背景图片,为游戏增添了视觉效果。
- 事件处理技术:
- 有效地处理了鼠标点击、退出等事件,实现了菜单项的选择、游戏的开始、规则查看、退出确认等功能。
- 随机图案生成算法:
- 在初始化图案时,使用
random.choice
函数从加载的图案列表中随机选择图案,为每个格子生成两层随机图案。
- 在初始化图案时,使用
- 得分计算算法:
- 当玩家点击九宫格中的图案,被点击的图案会添加到底部矩形框中。如果底部矩形框中的相同图案数量达到三个及以上,就将这些相同图案从列表中移除,并增加得分。
- 游戏结束判断算法:
- 当底部矩形框中的图片数量达到 7 个时,检查是否有三个相同的图案。如果没有,则游戏结束。
- 当倒计时时间耗尽时,游戏也会结束。
以下是一个简单的流程图展示实现思路:
开始
|
|-- 初始化窗口、颜色、字体、音乐等
|
|-- 进入游戏主循环
| |
| |-- 如果游戏未结束
| | |
| | |-- 处理事件(鼠标点击菜单项等)
| | |
| | |-- 根据事件执行相应操作(开始游戏、显示规则等)
| | |
| | |-- 绘制菜单项和背景
| |
| |-- 如果游戏结束
| | |
| | |-- 绘制游戏结束界面
| | |
| | |-- 等待用户点击“Restart”按钮重新开始游戏
|
|-- 退出 Pygame
结束
测试:
一、测试样例设计
菜单选择测试:
测试目的:验证菜单选项的功能是否正常。
测试步骤:
启动游戏,检查主菜单是否正确显示四个菜单项。
点击 “Rules” 菜单项,检查是否正确显示游戏规则界面,并且 “Back” 按钮能正常返回主菜单。
点击 “Exit” 菜单项,检查是否弹出退出确认对话框,并且 “Yes” 和 “No” 按钮能正常响应。
点击 “Play Game” 菜单项,检查是否能正常进入游戏界面。
游戏逻辑测试:
测试目的:验证游戏的核心逻辑是否正确。
测试步骤:
进入游戏后,点击九宫格中的图案,检查图案是否能正确添加到底部矩形框中。
检查相同图案数量达到三个及以上时是否能正确消除并得分。
检查底部矩形框中的图片数量达到 7 个且没有三个相同图案时,游戏是否正确结束。
检查倒计时功能是否正常,时间耗尽时游戏是否结束。
重新开始游戏测试:
测试目的:验证重新开始游戏的功能是否正常。
测试步骤:
在游戏结束界面点击 “Restart” 按钮,检查游戏是否能正确重置状态并重新开始。
音乐播放测试:
测试目的:验证音乐播放功能是否正常。
测试步骤:
启动游戏,检查是否能正确播放主菜单音乐。
进入游戏后,检查主菜单音乐是否停止,并且游戏音乐是否正确播放。
重新开始游戏或返回主菜单时,检查音乐切换是否正确。
二、测试结果展示
假设进行了上述测试用例的测试,以下是可能的测试结果:
菜单选择测试结果:
主菜单正确显示四个菜单项,字体、颜色和布局正常。
点击 “Rules” 菜单项后,游戏规则界面正确显示,“Back” 按钮能正常返回主菜单。
点击 “Exit” 菜单项后,退出确认对话框正确弹出,“Yes” 和 “No” 按钮能正常响应。
点击 “Play Game” 菜单项后,能正常进入游戏界面。
游戏逻辑测试结果:
点击九宫格中的图案,图案能正确添加到底部矩形框中。
相同图案数量达到三个及以上时,能正确消除并得分,得分显示正确更新。
底部矩形框中的图片数量达到 7 个且没有三个相同图案时,游戏正确结束,显示 “Game Over!” 界面。
倒计时功能正常,时间耗尽时游戏正确结束。
重新开始游戏测试结果:
在游戏结束界面点击 “Restart” 按钮后,游戏能正确重置状态并重新开始,得分清零,图案列表清空,九宫格重新生成随机图案。
音乐播放测试结果:
启动游戏后,主菜单音乐能正确播放。
进入游戏后,主菜单音乐停止,游戏音乐正确播放。
重新开始游戏或返回主菜单时,音乐切换正确。
三、测试设计评价
优点:
测试用例涵盖了游戏的主要功能,包括菜单选择、游戏逻辑、重新开始游戏和音乐播放等方面,较为全面地测试了程序的功能。
针对游戏的核心逻辑,如图案的添加、消除和游戏结束条件等进行了详细的测试,有助于发现潜在的逻辑错误。
考虑了音乐播放功能的测试,确保游戏的音频效果正常。
不足之处:
没有对游戏的性能进行测试,例如在大量图案同时显示或快速点击的情况下,程序的性能表现如何。
没有对游戏的兼容性进行测试,例如在不同的操作系统或硬件环境下,程序是否能正常运行。
对于一些边界情况的测试不够充分,例如在倒计时刚好为 0 时点击图案,或者在底部矩形框即将满的时候进行特殊操作等。
总体而言,这些测试用例能够基本满足程序的测试需求,但还可以进一步完善和扩展,以提高测试的覆盖度和有效性。
AIGC表格任务:
小游戏任务 | 是否可利用 AIGC 预估 | 实际利用情况 | AIGC 优缺点及适用不适用情况 |
---|---|---|---|
设计游戏界面 | 可以利用 AIGC 生成界面设计的创意和草图 | 实际利用 | 优点:可以快速生成多种设计创意,提供灵感。缺点:可能缺乏独特性和针对性,需要人工调整。适合用于获取设计灵感,不适合直接生成最终的游戏界面,因为需要考虑游戏风格的一致性和用户体验的特殊性。 |
开发游戏逻辑 | 部分可利用,如生成一些逻辑描述作为参考,但实际代码仍需人工编写 | 实际利用 | 优点:可以帮助梳理复杂的逻辑关系,提供思路。缺点:难以准确生成可执行的代码。适合用于辅助设计游戏逻辑框架,不适合直接实现游戏核心逻辑代码。 |
制作游戏图形资源 | 可以利用 AIGC 生成一些简单的图形元素或提供创意 | 实际利用 | 优点:快速生成图形资源,节省时间和人力。缺点:可能风格不一致,质量不稳定。适合生成一些简单的背景元素或装饰,不适合制作高精度的游戏主角或关键元素。 |
编写游戏规则说明 | 可以利用 AIGC 生成规则说明的初稿 | 实际利用 | 优点:快速生成文本内容,语言丰富。缺点:可能不够准确和简洁,需要人工编辑。适合生成初步的规则说明,不适合直接作为最终版本。 |
学到的内容 | 心得体会 |
---|---|
使用 Pygame 库设置窗口大小、标题和颜色 | 了解了如何通过简单的代码设置游戏窗口的基本属性,为游戏提供了一个可视化的界面基础。 |
初始化 Pygame 的字体系统并设置字体和大小 | 掌握了在游戏中添加文字说明和菜单选项的方法,增强了游戏的交互性和可读性。 |
处理鼠标点击事件以实现菜单项选择和游戏操作 | 学会了如何响应用户的输入,使游戏能够根据用户的操作进行相应的变化,提高了用户体验。 |
随机生成九宫格图案和底部矩形框中的图案 | 认识到了随机化在游戏中的重要性,可以增加游戏的趣味性和重复性。 |
实现游戏的核心逻辑,包括图案的消除、得分计算和游戏结束判断 | 深入理解了游戏逻辑的设计和实现,通过代码实现了复杂的游戏规则,提升了编程能力。 |
使用倒计时功能增加游戏的紧张感 | 学会了如何在游戏中添加时间限制,使游戏更具挑战性和吸引力。 |
显示游戏规则和排行榜 | 明白了如何为玩家提供游戏信息和反馈,帮助玩家更好地理解游戏规则和自己的成绩。 |
处理音乐播放和切换 | 掌握了在游戏中添加音频效果的方法,增强了游戏的氛围和娱乐性。 |
设计游戏主循环和不同的游戏状态 | 理解了游戏主循环的重要性,以及如何根据不同的游戏状态绘制不同的界面和处理用户输入。 |
PSP表格
以下是使用 PSP(Personal Software Process)表格对该任务进行分解:
阶段 | 任务描述 | 预估耗时 | 实际耗时 |
---|---|---|---|
计划 | 确定任务目标和范围 | 10 分钟 | 8 分钟 |
需求分析 | 分析游戏代码功能和测试需求 | 30 分钟 | 60 分钟 |
设计 | 设计测试样例和测试策略 | 30 分钟 | 60 分钟 |
编码 | 编写测试代码 | 200 分钟 | 240 分钟 |
测试 | 运行测试代码,记录测试结果 | 60 分钟 | 100分钟 |
分析 | 分析测试结果,评价测试设计 | 30 分钟 | 70 分钟 |
总结 | 总结任务完成过程和效果,提出改进方向 | 20 分钟 | 25 分钟 |
个人作业完成过程和效果评价:
做得好的地方:
- 较为全面地分析了游戏代码的功能,确定了多个关键测试点,如主菜单显示、游戏规则展示、游戏开始和结束等。
- 设计的测试样例涵盖了正常情况和一些边界情况,能够较好地验证游戏的稳定性和正确性。
- 在测试代码编写过程中,合理运用了模拟输入的方法,如使用
unittest.mock
模块来模拟鼠标点击事件和函数调用,提高了测试的可重复性和独立性。 - 对测试结果进行了认真分析,能够清晰地指出测试用例的优点和不足之处,为后续改进提供了有价值的参考。
可以改进的地方:
- 在需求分析阶段,可以更加深入地研究游戏代码的复杂逻辑部分,例如图案的随机生成算法和消除算法,以便设计更有针对性的测试用例。
- 测试代码可以进一步优化,例如增加对游戏性能的测试,如在大量图案同时显示或快速点击的情况下,测量游戏的响应时间和性能表现。
- 可以考虑使用持续集成工具来自动化测试过程,提高测试效率和可靠性。
- 在总结阶段,可以提出更具体的改进措施和下一步的行动计划,以便更好地指导后续的开发和测试工作。