2024秋软件工程个人作业(第二次)

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253
这个作业的目标 1.学会使用AIGC辅助编程 2.熟悉从设计到开发一个软件的步骤 3.对自己的任务结果进行反思
学号 102202108

1.项目展示

🏠这是项目代码所在的仓库

🔖这是项目代码所在的位置

2.项目介绍

#point1

项目的前端设计与特色功能

查看具体内容

前端设计:

🪟游戏窗口

  450x800像素的垂直布局,适合移动设备。

🪂多种界面

  主菜单
  难度选择
  游戏界面
  游戏结束界面
  高分榜

👓视觉元素

  使用自定义背景图片,根据不同的游戏状态切换。
  图标使用70x70像素的图片。
  使用浅色按钮增加视觉吸引力。

✏️文字渲染

  使用Pygame的字体渲染,不同大小用于标题和正文。

特色功能:

🧮三种难度级别

 (简单、中等、困难),影响图标数量和层数。

🎎匹配机制

  玩家需要选择三个相同的图标进行消除。

计时挑战

  所有难度级别都有60秒的时间限制。

🔑提示功能

  自动选择三个匹配的图标。

↩️撤销功能

  撤销上一次的消除操作。

🌍分数系统

  成功消除图标增加分数,使用撤销功能减少分数。

🏆高分记录

  每个难度级别都有独立的最高分记录,存储在JSON文件中。

🎯随机生成

  每次开始新游戏时,图标位置和类型都是随机生成的。

#point2

🪄项目中所使用的技术和特殊的算法及实现思路

查看具体内容
主要技术 实现方法
Pygame框架 用于创建游戏窗口,处理时间,绘制图形和管理游戏循环
面向对象编程 使用Icon和Button类来封装游戏元素,Game类作为主要的游戏逻辑容器
随机算法 在generate_icons方法中使用random模块生成随机的图标位置和类型
匹配算法 check_match方法使用集合来快速判断三个选中的图标是否相同
计时器实现 使用time模块计算游戏时间,在update方法中更新剩余时间
事件处理 在handle_event方法中集中处理所有用户输入,包括鼠标点击事件和键盘事件
资源管理 使用load_images和load_backgrounds函数加载和管理游戏资源
难度系统 通过调整图标数量和层数来实现不同的难度级别
文件I/O和JSON处理 使用JSON格式保存和加载高分记录

3.测试

#point1

📚测试样例及结果

查看具体内容

1. 启动游戏测试:

  操作:运行游戏
  预期结果:显示主菜单,包含"Start Game"、"High Scores"和"Quit"按钮

2. 难度选择测试:

  操作:点击"Start Game",然后选择难度(Easy/Medium/Hard)
  预期结果:进入相应难度的游戏界面,图标数量和层数应与难度相符

3. 游戏操作测试:

  操作:选择三个相同的图标
  预期结果:图标消除,分数增加30点

4. 提示功能测试:

  操作:在游戏中按"H"键
  预期结果:自动选中三个相同的图标并消除,提示次数减少1

5. 撤销功能测试:

  操作:消除一组图标后,按"U"键
  预期结果:上一次消除的图标重新出现,分数减少30点,撤销次数减少1

6. 时间限制测试:

  操作:等待60秒或直到所有图标被消除
  预期结果:游戏结束,显示"Game Over"或"Congratulations!"界面

7. 高分记录测试:

  操作:完成一局游戏,查看高分榜
  预期结果:如果得分高于之前的记录,新的高分应该被记录并显示

8. 退出游戏测试:

  操作:在主菜单或游戏结束界面点击"Quit"
  预期结果:游戏正常关闭,高分被保存

9. 不同难度图标数量测试:

  操作:分别选择Easy、Medium和Hard难度开始游戏
  预期结果:
    Easy: 3层,每层12个图标
    Medium: 4层,每层15个图标
    Hard: 5层,每层18个图标

10. 高分榜显示测试:

   操作:在主菜单点击"High Scores"
   预期结果:显示Easy、Medium和Hard三个难度的最高分

#point2

📢测试设计的评价与讨论

查看具体内容

本次测试主要注意以下几点:

🎭1. 图标是否正确生成和显示

🎏2. 消除机制是否正确

⏱️3. 计时器是否准确

🚨4. 提示和撤销功能是否正常工作

🎖️5. 高分是否正确保存和显示

🎰6. 不同难度级别的游戏是否有明显区别

✔️✔️测试用例基本满足程序测试的需求.

4.AIGC表格

学到的内容 心得体会
Pygame框架应用 运用Pygame工具包可以很方便地创建游戏窗口,绘制图形和管理游戏循环等,简化了我们的编程过程的同时使得程序的功能完善
面向对象编程实践 这里我学会了组织和封装游戏逻辑,通过这种封装的方式可以提高代码的可维护性,可复用性和可扩展性
事件处理 对用户的输入,鼠标点击,键盘事件等事件进行及时处理和响应对于整个游戏的体验感有非常重要的作用
随机算法的应用 在图标生成时就是利用随机算法,从而增加游戏的可玩性和挑战性
文件I/O和JSON处理 这里是整个游戏的基础,图标和背景图片都需要从本地文件读出并显示,而高分记录的保存和加载都是使用JSON格式
代码组织和模块化 整个游戏项目可以划分成不同的功能模块,而这些功能模块互相之间没有太大联系,所以可以独立编写,这样就可以把任务同时分给不同的人来完成,从而提高编程效率和可扩展性
调试技巧 我在尝试运行程序时经常出现闪退的情况,在直接无法找出错误的情况下,就用print语句输出调试信息,从而排查问题

5.PSP表格

PSP 预计耗时(分钟) 实际耗时(分钟)
• Analysis 120 180
  • Requirement analysis 40 60
  • Game design 80 120
• Design Specification 140 160
  • UI design 50 40
  • Class design 90 120
• Coding 570 520
  • Game initialization 120 100
  • Main menu implementation 90 90
  • Game logic implementation 180 160
  • Difficulty levels 60 60
  • Scoring system 60 60
  • High score management 60 50
• Code Review 60 50
• Test 240 240
  • Unit testing 120 100
  • Integration testing 120 140

🧸评价个人作业完成过程和最终效果

查看具体内容 这次作业由于是第一次编程小游戏这类程序,再加上编程能力本身不强,所以大多都是借助AIGC来编写的,但是借助AIGC来编程也并非是一帆风顺的。 我前前后后重新生成好几次才最终得到一个比较符合要求的程序,原因在于我首先是生成一个基本的游戏逻辑框架,然后再一步步添加辅助功能,但是随着功能的增加,程序整个运行效果反而是在变差,好几次出现了闪退的情况。具体什么原因我也不太了解,所以最后的程序虽然基本满足需求,但是离我自己想象的还差很远。这反反复复地耗费了我不少时间,原因也有我没有把游戏功能需求考虑好就直接开始了编程,下次还是按照该有的步骤来完成这样一个程序。
posted @ 2024-09-18 19:12  bushiwanglujie  阅读(23)  评论(0编辑  收藏  举报