occultator3000

导航

软件工程第二次个人作业

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图片生成

测试设计与结果

测试用例

  1. 功能测试:检验游戏的每个功能点,如图案点击和消除等是否按预期工作。
  2. 界面测试:确保游戏的所有图形元素在不同分辨率和屏幕大小下正常显示,没有界面错位或覆盖的问题。
  3. 性能测试:测试游戏在连续运行下的性能,确保没有内存泄露和崩溃的情况。

测试结果

测试前期图形的错位覆盖,以及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

结论

在整个“羊了个羊”小游戏开发项目中,实践过程中的深刻感悟和心得体会可以从几个关键方面进行总结:

  1. 技术掌握与挑战
    通过这个项目,我深刻体会到了掌握新技术和工具的重要性。使用 Python 和 PyQt5 进行游戏开发,让我对这些工具的理解更加深入,尤其是在图形界面的构建和事件处理方面。面对编程中的各种技术难题,如图像处理和用户交互的实现,我学会了不断寻找资源、阅读文档和利用在线社区的力量来克服难关。

  2. 项目管理与时间规划
    项目管理的能力在这次实践中得到了显著的提升。通过实际应用 PSP 表格,我认识到了良好的时间管理和阶段性目标设定的重要性。在项目初期,我对某些任务的时间预估不够准确,这直接影响了后续工作的安排。随着项目的深入,我学会了如何根据实际进展调整工作计划,确保项目能够按时完成。

  3. 团队合作与沟通
    虽然这是一个个人项目,但在开发过程中,我也寻求了来自同伴和导师的意见和帮助。这个过程加强了我的团队合作能力和沟通技巧。我学到了,有效的沟通能够极大地提升问题解决的效率,同时也能从他人的反馈中学习到新的观点和方法。

  4. 创新思维与解决问题
    在面对设计和技术挑战时,创新思维显得尤为重要。例如,如何在有限的界面空间内提供丰富的用户互动体验,以及如何优化游戏的性能以支持更复杂的功能。通过不断试验和迭代,我逐步找到了解决方案,这个过程锻炼了我的创新能力和解决问题的技巧。

  5. 自我反思与持续学习
    项目结束后的自我反思让我认识到了自己的不足之处,也确认了自己的成长路径。这个项目不仅仅是一个技术实践,更是一个自我提升的过程。我学到了在任何工作中,持续学习和自我反思都是不可或缺的。

总结来说,这个项目不仅提升了我的技术能力,更重要的是教会了我如何在实际工作中应用这些技术,如何管理一个项目,以及如何在团队中有效沟通和合作。这些经验对我未来的职业生涯和个人发展都具有重要的意义。

posted on 2024-09-18 23:08  occultator3000  阅读(17)  评论(0编辑  收藏  举报