软件工程第二次个人作业
2024秋软件工程个人作业(第二次)
软件工程 | [班级链接]https://edu.cnblogs.com/campus/fzu/SE2024/ |
---|---|
作业要求:博客园 | <2024秋软件工程个人作业(第二次) - 作业 - 软件工程2024 - 班级博客 - 博客园 (cnblogs.com)> |
作业的目标 | 1.利用AIGC交互和pygame学习羊了个羊python小游戏开发 |
学号 | 102201102 |
项目在github的仓库链接
[y了个y]https://github.com/occultator3000/-
项目概述
本项目是一个基于Python和Pygame库开发的简单消除类游戏——“羊了个羊”风格的小游戏。游戏目标是通过点击消除匹配的图案,所有图案消除完毕则玩家获胜,游戏设有时间限制,时间耗尽则游戏失败。
特色功能
- 道具系统:增设了打乱卡牌和移出三个卡牌到卡槽外的道具,玩家在游戏过程中可以使用这些道具帮助过关。
技术和算法
- Pygame框架:利用Pygame进行游戏开发,处理游戏窗口、事件、图形的显示。
- 图案匹配逻辑:开发了一套算法来处理图案的生成、分层摆放和匹配消除逻辑。
- 倒计时机制:实现了一个倒计时器,游戏中逐秒减少,时间到达零点时游戏自动结束。
实现思路
游戏开始时,系统根据选择的难度随机生成图案的排列。玩家通过点击图案,如果连续点击的三个图案相同,则这三个图案会被消除。系统会检查是否还有可消除的图案,如果没有,则玩家胜利;如果时间耗尽,则游戏失败。
代码结构
MainWindow
│
├── __init__(): 初始化主窗口和游戏的主要组件。
│ ├── init_game_region(): 设置游戏区域的布局和背景。
│ ├── init_pic_box(): 初始化图片框,用于显示游戏图形。
│ └── init_button_region(): 设置按钮区域,包括所有控制按钮。
│
├── update_ui(): 每秒调用,更新游戏界面和时间显示。
├── restart_game(): 重启或开始游戏,重置游戏状态。
├── show_cur_game(): 显示当前游戏状态,更新游戏画面。
├── move_up_cubes(): 处理方块上移逻辑。
├── show_image_on_pic_box(img: np.ndarray): 显示当前游戏画面。
├── click_pic_box(event: QtGui.QMouseEvent): 处理图片框的点击事件。
└── show_cube_num(): 显示当前剩余方块的数量。
Game
│
├── __init__(): 初始化游戏的状态和变量。
│ ├── random_cubes(): 随机生成游戏方块。
│ ├── get_init_move_up_positions(): 计算方块上移的初始位置。
│ └── get_slots_positions(): 获取底部方块的位置。
│
├── update_time(): 更新游戏倒计时。
├── draw_cubes(): 绘制当前游戏状态到背景图像。
├── handle_click_game(x: int, y: int): 处理游戏界面点击,移动方块。
├── is_game_over(): 检查游戏是否结束。
├── is_win(): 判断玩家是否赢得了游戏。
└── cal_iou(cube1: Cube, cube2: Cube): 计算两个方块的交集比(IoU)。
Cube
│
└── 初始化方块的位置、大小和类别。
PicBox (继承自 QLabel)
└── mouseReleaseEvent(): 处理鼠标释放事件,触发游戏逻辑。
图形化界面
start
full_box_failure
timeout_failure
button
gif展示
AIGC图片生成
测试设计与结果
测试用例
- 功能测试:检验游戏的每个功能点,如图案点击和消除等是否按预期工作。
- 界面测试:确保游戏的所有图形元素在不同分辨率和屏幕大小下正常显示,没有界面错位或覆盖的问题。
- 性能测试:测试游戏在连续运行下的性能,确保没有内存泄露和崩溃的情况。
测试结果
测试前期图形的错位覆盖,以及click反应迟钝,timeout无法正确倒计时,经过一系列修改,与ai的交互,测试显示游戏各项功能正常,界面友好且响应速度快。性能测试中未发现明显的资源消耗问题。
待继续完善的部分(持续进行)
1.背景图片
2.游戏开始界面/游戏失败界面
3.游戏音效
4.评分或排行系统
利用AIGC的分析
AIGC任务分解
子任务 | 利用AIGC技术,实现了什么功能 | 效果如何? |
---|---|---|
图案设计 | 利用文生图工具生成图案设计 | 设计感觉很一般,不好用,后来直接手机相册的贴纸拿来用了哈哈 |
代码生成 | 核心代码的生成如计时器设置,button和游戏界面的窗口设置,部分核心逻辑设置 | 使用GitHub Copilot生成部分游戏逻辑代码,利用chatGPT4 写大部分代码,但是很呆,还是需要一直不停的修改,核心代码沿用github开源项目。 |
初始化游戏窗口 | 初始化计时器,初始化button,初始化卡牌等等 | 初始化游戏窗口和相关资源 |
加载图案图片 | 图像识别与生成 | 从文件加载游戏图案图片 |
游戏结束设置 | 设置了两种失败的结局,一是卡槽满(沿用),二是超时 | 超时的设置使用GPT4感觉还挺顺利 |
AIGC技术的优缺点分析
优点:
- 效率提高:AIGC技术可以快速生成代码和资源,大幅度提高开发效率。
- 质量保证:在一定程度上,AIGC生成的代码质量稳定,可以减少人为错误。
缺点:
- 依赖性:过分依赖AIGC可能会减少开发者对代码的理解和掌握。
- 创意限制:自动生成的代码或设计可能缺乏创新性,使产品同质化。
- 代码编写不够优秀,前后矛盾导致很多不必要的报错
- 难以完成核心代码部分的逻辑,只能用于实现小的功能
PSP表格
任务名称 | 任务描述 | 预估耗时 (小时) | 实际耗时 (小时) |
---|---|---|---|
需求分析 | 分析游戏功能需求和功能模块 | 2 | 1.5 |
设计界面原型 | 可视化界面设计 | 2 | 3 |
编码实现 | 编写游戏功能,逻辑代码 | 8 | 14 |
测试模块 | 阶段性的对新增的模块进行测试 | 5 | 6 |
调试与修复 | 解决测试过程中发现的问题和错误 | 4 | 4 |
结论
在整个“羊了个羊”小游戏开发项目中,实践过程中的深刻感悟和心得体会可以从几个关键方面进行总结:
-
技术掌握与挑战
通过这个项目,我深刻体会到了掌握新技术和工具的重要性。使用 Python 和 PyQt5 进行游戏开发,让我对这些工具的理解更加深入,尤其是在图形界面的构建和事件处理方面。面对编程中的各种技术难题,如图像处理和用户交互的实现,我学会了不断寻找资源、阅读文档和利用在线社区的力量来克服难关。 -
项目管理与时间规划
项目管理的能力在这次实践中得到了显著的提升。通过实际应用 PSP 表格,我认识到了良好的时间管理和阶段性目标设定的重要性。在项目初期,我对某些任务的时间预估不够准确,这直接影响了后续工作的安排。随着项目的深入,我学会了如何根据实际进展调整工作计划,确保项目能够按时完成。 -
团队合作与沟通
虽然这是一个个人项目,但在开发过程中,我也寻求了来自同伴和导师的意见和帮助。这个过程加强了我的团队合作能力和沟通技巧。我学到了,有效的沟通能够极大地提升问题解决的效率,同时也能从他人的反馈中学习到新的观点和方法。 -
创新思维与解决问题
在面对设计和技术挑战时,创新思维显得尤为重要。例如,如何在有限的界面空间内提供丰富的用户互动体验,以及如何优化游戏的性能以支持更复杂的功能。通过不断试验和迭代,我逐步找到了解决方案,这个过程锻炼了我的创新能力和解决问题的技巧。 -
自我反思与持续学习
项目结束后的自我反思让我认识到了自己的不足之处,也确认了自己的成长路径。这个项目不仅仅是一个技术实践,更是一个自我提升的过程。我学到了在任何工作中,持续学习和自我反思都是不可或缺的。
总结来说,这个项目不仅提升了我的技术能力,更重要的是教会了我如何在实际工作中应用这些技术,如何管理一个项目,以及如何在团队中有效沟通和合作。这些经验对我未来的职业生涯和个人发展都具有重要的意义。
posted on 2024-09-18 23:08 occultator3000 阅读(17) 评论(0) 编辑 收藏 举报