软件工程第二次个人作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253
这个作业的目标 借助AIGC工具完成一个类似“羊了个羊”的Python小游戏
学号 10220249

项目代码已上传至个人GitHub仓库:GitHub仓库地址

1. 游戏介绍

1.1 游戏简介

游戏名为《秀了又秀》,参考了《羊了个羊》小游戏,是一款充满乐趣和挑战的策略消除游戏。

1.2 游戏玩法

  • 消除挑战:将方块点击使其位于下方方框,当出现三个相同种类的方块即可消除,消除越多,得分越高;但是要注意,下方最多只能存在7个方块。

1.3 前端设计与特色功能

1.精美的画面:游戏采用可爱的动漫风格,冰雪风景,所有图片均有AI生成,经过后期微调。
2.简单的操作:只需简单的点击,即可享受游戏的乐趣。
3.背景音乐:游戏设置了欢快的游戏背景音乐,增加游戏体验。
4.游戏名设置:进入游戏,为自己设置一个响亮的名字吧。
5.增添时间限制:为游戏增加紧张刺激感,由于难度较大,时间设置为五分钟。
6.增添功能按键:增加了撤销按键以及restart按键,增加游戏体验。
7.分数排行榜机制:每成功点击一次为自己增加10分,同时每使用一次撤销键,扣除10分,最终排行榜依据总分数和所用时间进行排行。

1.4 技术实现

  • 底层框架:使用Python进行实现,主体使用pygame框架,包括使用pygame完成图片的大小,以及音乐的播放。
  • 游戏算法:游戏共有12类张牌,每类12张;程序将144张牌随机打乱,放入7层的金字塔结构中,并且金字塔的每层堆叠也增加了随机排放,增加不规律性,增大游戏趣味性,由于会产生额外的4张卡片,将其放置于牌堆下方。设置最上层的方块为可点击,其他下层方块状态为补课点击,并覆盖上阴影。
  • 额外功能:游戏增加了撤销和重启功能,并且实现了和用户名绑定的排行榜,为实现游戏公平,撤销功能计入分数计算。

1.5 实现思路

1.初始化:游戏开始时,初始化Pygame库,设置屏幕大小,加载和调试卡牌图案以及背景图片的大小以匹配屏幕大小,并初始化牌组。
2.主游戏循环:游戏的主循环负责处理用户的输入、更新游戏状态、绘制界面并更新显示。
3.鼠标点击事件:当玩家点击牌堆中的牌时,则将其移动到底部的牌堆栈。检测到栈中有三张相同的课牌时,即可消除他们,并重新排列栈。
4.图案匹配:当检测到栈中有三张相同的课牌时,即可消除他们,并重新排列栈。
5.计时器:游戏开始时启动一个计时器,实时更新剩余时间,并在时间耗尽时结束游戏。
6.分数机制:每点击一次卡牌到下方牌堆,分数加10分,胜利后结算总分数,并更新排行榜。
7.功能性按键:在游戏界面上又撤销键和重启键,撤销键每次扣除10点分数,重启键这重新开始游戏。
8.游戏结算:当所有图案被消除时则显示游戏胜利,诺下方卡牌栈大于7张或时间耗尽时,则显示游戏结束界面。但是只有胜利完成游戏才会显示排行榜。

2.测试

2.1测试用例

测试用例 1:启动游戏

  • 目的:验证游戏能否正常启动并显示初始页面。
  • 步骤:运行程序。
  • 预期结果:游戏窗口正常打开,显示初始页面,播放bgm音乐。

测试用例 2:输入用户名

  • 目的:验证玩家能否正常输入用户名。
  • 步骤:点击用户输入框。
  • 预期结果:成功输入用户名,按enter键后成功进入游戏页面。

测试用例 3:查看排行榜功能

  • 目的:验证能否正常查看排行榜。
  • 步骤:点击排行榜,进入后点击返回。
  • 预期结果:正常显示排行榜,进入后点击返回回到初始页面。

测试用例 4:卡牌生成

  • 目的:验证游戏能否正确显示并堆叠卡牌。
  • 步骤:进入游戏,观察图案。
  • 预期结果:所有卡牌正常堆叠,并随机排放,并正确显示在位置上。

测试用例 5:卡牌点击

  • 目的:验证卡牌被点击后能否正常运行。
  • 步骤:点击上层卡牌和点击下层卡牌,以及四张额外卡牌,观察结果。
  • 预期结果:上层卡牌和额外4张卡牌可以被点击,并成功进入下方牌栈中,而下层卡牌无法被点击。

测试用例 6:卡牌匹配

  • 目的:验证牌栈中有三张相同卡牌时是否会进行消除。
  • 步骤:陆续点击三张相同卡牌,观察牌栈中的变化。
  • 预期结果:三张相同卡牌消除,牌栈重新排列。

测试用例 7:功能性按键

  • 目的:验证功能性按键能否正常使用。
  • 步骤:在游戏时,使用功能性按键,观察结果。
  • 预期结果:使用撤销键,所点击卡牌回到原本的牌堆位置;使用重启键,卡牌初始化。

测试用例 8:游戏失败条件

  • 目的:验证游戏在时间耗尽或牌栈超出7张时游戏失败。
  • 步骤:分别触发失败条件。
  • 预期结果:游戏结束,显示失败页面。

测试用例 9:游戏胜利条件

  • 目的:验证玩家能否实现游戏胜利。
  • 步骤:成功在游戏时间内消除所有卡牌。
  • 预期结果:游戏结束,进入游戏胜利画面,显示排行榜信息。

2.2测试设计评价

  • 全面性:测试用例覆盖了游戏的主要功能,包括启动、用户名输入、排行榜查看、卡牌点击、卡牌匹配,牌栈的限额、功能性按键使用、分数机制、游戏失败以及胜利条件。这些测试用例能够全面覆盖了游戏的基本功能。
  • 有效性:测试用例针对了游戏的核心玩法和功能设计测试用例,确保了关键路径被测试。
  • 可验证性:测试结果是可观察和可验证的,以便于测试人员能够明确判断功能是否正常。
  • 错误揭示:能够揭示潜在的错误和问题,帮助开发者修复。

2.3讨论

  • 当前的测试策略已经覆盖了游戏的核心功能和玩家交互。
  • 尽管现有的测试用例已经相当全面,但仍有一些领域可以进一步增强测试的深度和广度:
  • 异常输入测试:测试游戏在面对意料之外的用户行为时的鲁棒性。
  • 性能测试:评估游戏在高负载条件下的性能,确保游戏在资源消耗(如CPU、内存)方面的表现符合预期。

3. 游戏展示

3.1 游戏流程

  • 初始界面:用户名输入、查看排行榜。
  • 游戏界面:在规定时间内完成游戏。
  • 结算页面:游戏失败显示失败页面或者游戏成功显示胜利画面,并将所得分数和时间计入排行榜(排行榜只计入前10名)

3.2 初始页面

初始页面展示

用户名设置提示语和激活状态,当点击时才会进行用户名的输入,最后按回车键结束输出。

点击排行榜进行查看

3.3 游戏页面展示

点击方块开始游戏!

3.4游戏失败页面

游戏失败,火彩人跪地痛哭

3.5游戏胜利页面

4. AIGC表格

4.1AIGC表格任务

子任务 任务详情 预估是否使用AI 实际情况
牌堆的堆叠逻辑 使用什么方法时牌堆进行堆叠 参考网上的开源代码
游戏规则设定 设计牌堆的堆栈和消除的规则 自行设计
游戏界面设计 设计简洁明了的游戏主界面,包括道具栏、得分显示等区域。 使用AI,整体实现,存在一些小问题,但不影响具体使用
游戏元素制作 设计各种图案的方块元素,使其具有辨识度和美观性。 使用AI,生成的元素比较随机,需要自己后期调整
道具设计 设计多种道具,如撤回一步、洗牌等,并设定其使用规则。 使用AI,整体,但存在一定的问题,做出意外动作时会出现BUG
得分系统设计 建立合理的得分机制,根据消除的速度、步数等因素给予不同的分数。 与预估的有一定差异,但是仍然是一个合理的分数机制

4.2 AIGC生成学到的内容和体会

项目中学到的内容 心得体会
了解了游戏界面设计的重要性,如何布局能提升用户体验。 一个好的游戏界面可以吸引玩家,让他们更愿意投入时间去玩游戏。在设计过程中,需要不断考虑用户的操作习惯和视觉感受。
掌握了关卡设计的技巧,平衡难度与趣味性。 关卡设计是游戏的核心之一,难度过高会让玩家受挫,难度过低又会缺乏挑战。要不断调整和测试,找到最佳的平衡点。
学会了制作有特色的游戏元素,提升游戏的美观度。 精美的游戏元素能增加游戏的吸引力,同时也需要考虑其与整体游戏风格的协调性。
明确了消除规则的重要性以及如何制定清晰合理的规则。 规则是游戏的基础,必须简单易懂且具有逻辑性,这样玩家才能快速上手并享受游戏过程。
懂得了道具设计的思路,如何让道具既实用又不过于强大。 道具可以为游戏增加趣味性和策略性,但不能让道具破坏游戏的平衡性,要让玩家在使用道具时感到有成就感。
体会到音效在游戏中的作用,合适的音效能增强氛围。 音效可以让游戏更加生动,不同的音效可以反馈玩家的操作结果,营造出紧张或轻松的游戏氛围。
理解了得分系统设计的原则,激励玩家不断挑战。 得分系统可以激发玩家的竞争意识,让他们有目标地去玩游戏,同时也需要保证公平性。
感受到游戏测试的必要性,及时发现问题并改进。 游戏测试是保证游戏质量的关键环节,通过测试可以发现各种漏洞和不足之处,从而进行优化,为玩家提供更好的游戏体验。

4.3 PSP表格

任务描述 预估耗时(小时) 实际耗时(小时)
游戏界面设计 2 3
关卡设计 3 2
游戏元素制作 1 1.5
消除规则设定 2 1
道具设计 1 2
音效制作 0.1 0.1
得分系统设计 0.5 0.5
游戏测试 1 1
代码复查 0.5 05

5.新的体会

1.使用AIGC设计游戏的感想

  • AIGC可以通过你给他的语言设计出代码,可以基本上实现你的要求,但是总会遗留一些问题存在,你说明的越详细,它设计的越完善。
  • 完成越复杂的问题,它犯的错就越多。
  • 你可以根据它给你代码的问题所在提出问题,并用你的思路进行更改,它可以很好的解决。
  • 但是如果你用相同的话语和他沟通,而且没有指出问题所在,它有可能会相同的错误一错再错。

2.总结

  • 使用AIGC设计代码可以减少很多工作量,但是我们现在还无法完全依赖它。
  • 但是如果你有很好的代码基础,给他完善的指令,把你的思路传达给他,或者明确指出它的错误,它会给你很好的反馈,达到更好的体验效果
  • AI很好用,但是如果你有知识基础就更好用!
posted @ 2024-09-18 22:33  oolone  阅读(9)  评论(0编辑  收藏  举报