软件工程第二次作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2024/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253 |
这个作业的目标 | 实现羊了个羊 |
学号 | 102202131 |
项目展示:github链接:https://github.com/PZn000/sheep
项目介绍
这是一个简单的界面游戏,前端设计相对简单,主要是使用Python的pygame库来创建窗口、加载图像和响应事件。以下是项目的特色功能和前端设计的介绍:
游戏开始界面
游戏游玩界面
游戏失败界面
游戏成功界面
前端设计与特色功能
- 游戏界面:游戏界面简洁明了,主要由背景图、牌堆、底部牌组、时间显示和分数显示组成。
- 牌堆:牌堆位于屏幕的上部,玩家可以点击牌堆的牌来收集它们。
- 底部牌组:底部牌组位于屏幕的下部,用于存放玩家翻开的牌。当收集相同三张的牌,即可消除他们,而当底部牌组中的牌达到7张时,游戏结束。
- 时间显示:屏幕顶部显示倒计时时间,随着游戏的进行而减少。
- 分数显示:屏幕顶部显示玩家的得分,每成功匹配一组牌就会增加分数。
- 游戏结束屏幕:当时间耗尽或牌堆为空时,游戏结束,屏幕会显示游戏结束的消息和分数。
技术和算法
- pygame库:用于创建游戏窗口、加载图像、处理鼠标事件和绘制文本。
- 排序和搜索算法:使用列表推导式和排序函数来更新高分排行榜。
- 随机算法:使用
random.shuffle
函数来随机打乱牌堆,确保游戏的可玩性。
实现思路
- 初始化游戏:在游戏开始时,加载背景图像和牌面图像,创建牌堆和底部牌组,设置初始分数和时间。
- 游戏循环:游戏主循环负责处理鼠标事件、更新游戏状态和绘制游戏界面。
- 鼠标点击事件:当玩家点击牌堆中的牌时,则将其移动到底部牌组,当收集三张相同的牌时,即可消除他们。
- 更新分数:当实现三消时,更新分数。
- 绘制游戏界面:在游戏循环中,根据游戏状态绘制游戏界面,包括牌堆、底部牌组、时间显示和分数显示。
测试用例
-
测试用例1:游戏开始
- 测试步骤:
- 游戏开始前,
GAME_STATE
应该是 0。 - 点击开始按钮后,
GAME_STATE
应该变为 1。 - 牌堆和底部牌组应该被初始化
- 游戏开始前,
- 预期结果:
- 游戏开始前,
GAME_STATE
为 0。 - 点击开始按钮后,
GAME_STATE
为 1。 - 牌堆和底部牌组应该有牌。
- 游戏开始前,
- 测试步骤:
-
测试用例2:匹配牌
- 测试步骤:
- 选择三张相同的牌。
- 点击这三张牌,确认它们被移动到底部牌组。
- 确认分数增加了100。
- 预期结果:
- 点击后,三张牌应该从牌堆中消失并出现在底部牌组,然后三张集齐后从底部牌组消失。
- 分数应该增加100。
- 测试步骤:
-
测试用例3:游戏失败
- 测试步骤:
- 当底部牌组中的牌达到7张时,确认游戏失败。
- 预期结果:
- 游戏失败,
GAME_STATE
应该变为 3。 - 游戏失败屏幕应该显示。
- 游戏失败,
- 测试步骤:
-
测试用例4:时间耗尽
- 测试步骤:
- 在游戏进行中,模拟时间耗尽。
- 预期结果:
- 游戏失败,
GAME_STATE
应该变为 3。 - 游戏失败屏幕应该显示。
- 游戏失败,
- 测试步骤:
测试设计评价:
测试用例设计得相对简单,涵盖了游戏的主要功能。它们测试了游戏开始、翻牌、匹配牌、游戏结束和时间耗尽的情况。这些测试用例应该足以验证游戏的基本功能。
讨论:
尽管这些测试用例可以满足基本的程序测试需求,但为了更全面地测试游戏,我们应该考虑编写更多的测试用例来覆盖更多的边界情况和异常情况。同时,可以考虑使用自动化测试工具来提高测试效率。
心得体会
序号 | 内容 | 心得体会 | 应用场景 |
---|---|---|---|
1 | Pygame 库的使用 | 掌握了如何使用 Pygame 创建游戏窗口、加载图像和处理事件。 | 开发图形界面游戏 |
2 | Actor 类和精灵动画 | 学习了如何使用 Actor 类创建游戏角色和实现简单的动画效果。 | 开发游戏中的角色和动画效果 |
3 | 游戏逻辑设计 | 理解了如何设计游戏的基本逻辑,包括初始化、更新和绘制游戏状态。 | 开发游戏的核心玩法 |
4 | 事件处理 | 学会了如何处理鼠标点击事件,并根据事件触发游戏行为。 | 开发交互式游戏 |
5 | 文件读写操作 | 掌握了如何从文件读取和写入数据,用于保存和加载游戏高分。 | 开发需要保存游戏状态的程序 |
6 | 数据结构 | 使用列表和字典来管理游戏中的数据,如牌堆、底部牌组和排行榜。 | 组织和存储游戏数据 |
7 | 排序算法 | 学会了如何使用排序算法来更新高分排行榜。 | 开发需要排名或排序功能的程序 |
8 | 随机算法 | 使用随机算法来打乱牌堆,增加游戏的可玩性。 | 开发需要随机性的游戏或程序 |
9 | 时间管理 | 学习了如何使用时间管理来控制游戏的倒计时。 | 开发有时间限制的游戏或程序 |
10 | 错误处理 | 掌握了如何处理可能的运行时错误,如文件不存在等。 | 开发完整的程序 |
PSP表格
任务 | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
需求分析 | 60 | 55 |
设计阶段 | 120 | 130 |
代码实现 | 180 | 200 |
代码复查 | 60 | 70 |
测试阶段 | 60 | 70 |
文档编写 | 30 | 25 |
总计 | 510 | 550 |
评价个人作业的完成过程和最终效果:
-
做得好的地方:
- 需求分析和设计阶段较为准确,预估耗时与实际耗时相差不大,说明在项目规划阶段进行了充分的分析和规划。
- 代码实现阶段虽然实际耗时略超预估,但整体上仍然在可控范围内,表明编程技能和效率较高。
- 测试阶段发现了一些问题并及时修复,保证了软件的质量。
-
可以改进的地方:
- 代码复查和测试阶段的实际耗时都超过了预估,可能需要改进代码复查的方法和测试策略,以更高效地发现和解决问题。
- 文档编写阶段耗时较短,可能需要提高文档的详细度和质量,以便更好地记录和交流项目信息。