软件工程课程第二次个人作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2024 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253 |
这个作业的目标 | 设计消除类小游戏,并在此过程中学会使用AIGC辅助写代码 |
学号 | 102202150 |
Github仓库链接 | https://github.com/Mysteriousx-w/Ice-Cream-Party |
软件工程课程第二次个人作业
🍨开发“Ice Cream Party”小游戏🍨
📋1.游戏规则📋
游戏分为简单模式和困难模式,简单模式有8种图像,困难模式有12种图像,游戏界面每个位置有随机多层图像,需要点击3个相同的才能消除,消除一个图像得10分(即消除一次得30分),达到目标分数1000分或者消除屏幕中所有得图像游戏胜利,超过时间180s⏰或者目前屏幕中没有3个匹配得图像则游戏失败。游戏胜利和失败后都可以选择回到开始界面开始下一轮游戏或者选择不同模式。
📖2. 项目介绍📖
- 图像生成
该项目的所有背景、界面、游戏图像均由智谱清言生成(因为之前有老师推荐过这个AI就想尝试一下)
但是因为该AI画图的局限性,导致画复杂图像时画出的图像线条不流畅,画风有点诡异,而且单词的拼写也有错误😟
游戏界面📟:
登录界面📱:
游戏成功界面🎉:
游戏失败界面👻:
时间超过界面⌛:
- 功能介绍
功能分类 | 功能描述 |
---|---|
初始化 | - 初始化 Pygame 模块 - 设置游戏窗口大小、帧率、颜色等常量 |
图像加载 | - 加载图案图片 - 加载背景图片 - 加载游戏结束、胜利和失败的图像 |
游戏板创建 | - 创建游戏板,每个位置可以有随机多张图片(实现多层图片消除) - 确保每种图案的数量是3的倍数 |
按钮区域 | - 定义按钮区域类,用于处理按钮的绘制和点击事件(包括简单、困难模式按钮以及游戏介绍返回开始界面按钮) |
分数和时间显示 | - 显示当前的分数和剩余时间 |
游戏结束界面 | - 显示游戏结束、胜利和失败的图像 |
游戏板绘制 | - 绘制游戏板上的图案和高亮选中的图案 |
匹配检查 | - 检查玩家选中的三个图案是否相同,如果是,则消除它们并增加分数 |
图案重新排列 | - 在消除图案后重新排列剩余的图案(每一个位置的所有层都消除之后下面位置的部分接到上面) |
可能的匹配检查 | - 检查游戏中是否还有可能的匹配(因为虽然每种图像是3的整数倍,但是由于图像是多层的,有的图像会隐藏在下层,所以会出现不能全部消除的情况,如果在游戏界面每个位置的第一层没有可以匹配的图像,而且又没有达到分数游戏失败) |
重置游戏 | - 重置游戏状态,包括分数、计时器和游戏板 |
主游戏循环 | - 处理事件 - 绘制界面 - 更新屏幕显示 |
难度选择 | - 提供简单和困难两种模式选择(简单模式有8种图像,困难模式有12种图像) |
重新开始 | - 游戏结束后,提供返回开始界面重新开始的选项 |
事件处理 | - 响应玩家的鼠标点击事件,用于选择图案或进行其他操作 |
图形用户界面 | - 提供图形用户界面,包括开始游戏按钮、难度选择按钮和游戏结束时的返回按钮 |
- 使用的技术和特殊的算法
技术/算法 | 描述 | 实现思路 |
---|---|---|
Pygame 库 | 游戏开发框架,用于创建游戏窗口、处理图像和用户输入等。 | 初始化 Pygame,设置窗口大小、帧率,加载图像资源,处理用户输入事件。 |
图像处理 | 加载和缩放图像资源以适应游戏板图块大小。 | 使用 Pygame 的 pygame.image.load 和 pygame.transform.scale 函数加载和缩放图像。 |
随机数生成 | 用于随机生成游戏板上的图案。 | 使用 Python 的 random.choice 函数从图案列表中随机选择图案。 |
事件处理 | 响应用户的鼠标点击和键盘操作。 | 在游戏循环中检查事件队列,根据事件类型调用相应的处理函数。 |
匹配算法 | 检查玩家选中的三个图案是否相同。 | 比较玩家选择的三个图案对象引用是否相同,如果相同则认为匹配成功。 |
穷举搜索算法 | 检查是否有可能的匹配 | 通过双层循环遍历游戏板上的每个图块,检查每个图块是否存在,并记录其位置。 |
重新排列算法 | 在消除图案后重新排列剩余图案。 | 从消除位置开始向下遍历,将下方图案上移填补空缺。 |
游戏逻辑控制 | 控制游戏的开始、进行和结束流程。 | 使用主循环控制游戏状态,通过条件判断游戏是否结束,如时间耗尽或达到胜利条件。 |
-
游戏的主要逻辑和流程:
graph TD A[游戏初始化] --> B[加载图像资源] A --> C[设置游戏参数] B --> D[创建游戏板] C --> D D --> E[进入主游戏循环] E --> F[事件处理] F --> G{检查事件类型} G -->|鼠标点击| H[选择图案] G -->|游戏结束| I[显示结束界面] H --> J[检查图案匹配] J -->|匹配成功| K[消除图案并计分] J -->|匹配失败| L[清空选择] K --> M[重新排列图案] M --> N[更新游戏状态] N --> O{检查游戏结束条件} O -->|时间结束| P[显示时间用尽界面] O -->|无匹配| T[显示游戏失败界面] O -->|玩家胜利| Q[显示胜利界面] O -->|继续游戏| E P --> R[等待玩家操作] Q --> R T --> R R -->|重新开始| D R -->|退出游戏| S[游戏结束]
📈3. AIGC表格📈
小任务 | 描述 | 预估可利用AIGC | 实际中利用AIGC | 实现功能 |
---|---|---|---|---|
初始化游戏环境 | 设置游戏窗口、加载资源、初始化变量等 | 否 | 否 | 游戏启动前的准备工作,包括加载图像资源、设置游戏参数等 |
创建游戏板 | 生成游戏板的布局和随机分配图案 | 是 | 是(Kimi) | 创建游戏板和图案的初始布局 |
事件处理 | 响应玩家的鼠标点击和键盘操作 | 是 | 是(Kimi) | 处理玩家的输入,如点击图案进行选择 |
匹配检查 | 检查玩家选中的图案是否匹配并消除 | 是 | 是(Copilot) | 检查图案是否匹配,并在匹配成功时消除图案 |
重新排列图案 | 在消除图案后重新排列剩余图案 | 是 | 是 (Copilot) | 消除图案后,将上方图案下移填补空缺 |
计分与计时 | 更新玩家的分数和游戏的剩余时间 | 否 | 否 | 根据玩家的操作更新分数和时间 |
检查游戏结束条件 | 判断游戏是否结束,如时间耗尽或无匹配 | 是 | 是(Kimi) | 检查游戏是否满足结束条件,如时间结束或无法再匹配 |
绘制游戏界面 | 将游戏的各个元素绘制到屏幕上 | 否 | 否 | 绘制游戏板、图案、分数、时间等界面元素 |
难度选择与游戏模式 | 提供不同难度的游戏模式供玩家选择 | 否 | 是 (Kimi) | 难度不同图案不同 |
游戏结束界面 | 显示游戏结束、胜利或失败的界面 | 是 | 否 | 在游戏结束时显示相应的结束界面,并提供重新开始的选项 |
- AIGC技术的优缺点,适合用在哪些方面,不适合实现哪些功能?
AIGC优点:可以实现一些较为复杂的算法,逻辑性强,如项目中的较为复杂的主游戏循环,事件处理,检查图案匹配,减少工作量,提高效率。适合用在实现复杂算法和书写逻辑性较强的代码上。
AIGC缺点:写出来的代码在细节方面或多或少有错误,需要比较细致的修改和大量测试,同时不具有创新性。不适合实现创新。
💻4.测试💻
- 测试计时功能和按钮功能,倒计时结束是否出现倒计时结束界面(测试时设为3秒),按简单按钮是否开始游戏,按返回按钮是否回到开始界面
- 测试计分功能,达到指定分数(测试时设为60分)后是否结束游戏,以及按返回按钮是否回到开始界面
- 测试检查匹配功能,如果目前界面上没有三个可以匹配的图像游戏失败
- 以上测试结果都与预期大致相同
📂5.扩展功能📂
- 提供简单和困难两张游戏模式,主要区别在于游戏界面的图像种类不同,简单模式8种图像,比较容易找到匹配,困难模式12种图像
- 实现分数系统,增加了获胜条件,分数到达1000分游戏也能成功
- 可能的匹配检查,因为虽然每种图像是3的整数倍,但是由于图像是多层的,有的图像会隐藏在下层,所以会出现不能全部消除的情况,如果在游戏界面每个位置的第一层没有可以匹配的图像,而且又没有达到分数则游戏失败
📉6.PSP表格📉
任务编号 | 任务描述 | 预估耗时(小时) | 实际耗时(小时) | 完成情况 | 自我评价 |
---|---|---|---|---|---|
1 | 初始化游戏环境 | 1 | 1 | 完成 | 任务较简单 |
2 | 加载图像资源 | 2 | 1 | 完成 | 图像使用AIGC生成 |
3 | 创建游戏板 | 3 | 3 | 完成 | 设计较合理,符合预期 |
4 | 事件处理(用户输入) | 5 | 6 | 完成 | 耗时略高,需优化事件管理 |
5 | 匹配检查 | 2 | 3 | 完成 | 算法效率良好 |
6 | 重新排列图案 | 3 | 4 | 完成 | 算法实现复杂,需简化 |
7 | 检查可能的匹配 | 2 | 3 | 完成 | 算法效率待提高 |
8 | 绘制游戏界面 | 4 | 5 | 完成 | 界面绘制耗时,考虑使用工具 |
9 | 游戏逻辑控制(主游戏循环) | 5 | 7 | 完成 | 逻辑复杂,需大量思考和进一步简化 |
10 | 计分系统 | 2 | 2 | 完成 | 简单直观,效果良好 |
11 | 计时系统 | 2 | 2 | 完成 | 计时准确且连续 |
12 | 游戏结束判断 | 2 | 1 | 完成 | 判断逻辑清晰,耗时少 |
总计 | 33 | 38 | 总体进度符合预期,完成速度较慢,部分任务需要优化 |
- 评价
完成过程:
代码组织:代码结构清晰,逻辑分明,模块化程度较高,这有助于后续的维护和扩展。
资源管理:图像资源加载和管理得当,使用了Pygame的图像处理功能,确保了游戏的视觉体验。
功能实现:基本游戏功能如事件处理、匹配检查、得分系统等都已实现,游戏的核心玩法已经具备。
用户界面:用户界面简洁,有基本的得分和时间显示
最终效果:
游戏可玩性:游戏的基本玩法已经实现,玩家可以进行游戏并获得基本的游戏体验
视觉体验:游戏加载了背景和图案图像,但可能需要更多的视觉设计来提升游戏的整体美感。
交互设计:游戏的交互设计简单直观,玩家容易上手。
改进之处:
代码测试:增加单元测试和集成测试,确保每个模块的稳定性和可靠性。
用户界面:增强用户界面的设计,提供更详细的游戏状态信息。
交互反馈:增加更多的交互反馈,如动画效果、声音效果等,提升玩家的游戏体验。
游戏逻辑:代码逻辑上还有一些不足,需要进一步调试和修改,还要考虑增加更多的游戏逻辑,如特殊图案、奖励系统、难度级别等,增加游戏的可玩性和挑战性。
总体来说,上述代码展示了一个基本完整的游戏开发过程,实现了游戏的核心功能。然而,为了提升游戏的整体质量和玩家体验,还需要在测试、资源管理、用户界面、交互设计等方面进行进一步的改进和优化。
附录
VScode下载Copilot插件并使用
学生认证通过可以免费使用