软件工程第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253
这个作业的目标 变大变强
学号 102201542

项目名称:e了个mo

github作业仓库链接:(https://github.com/zqh666nb/e-mo)
!!!运行main.py

项目演示

因为不想搞动图,当然也不想把视频上传到某个网站上,这里就一步一步演示:

(1)开始界面:


追求极致简洁,也符合emo风格。

(2)难度选择(第一个特点):


是的,你没看错,这是本次游戏唯一一个附加分项,它和羊了个羊不一样的是,它是有难度选择的嘻嘻。羊了个羊需要第一关过了才能挑战第二关,但是我们难度选择可以让你直接进入和第二关一样的困难模式
但说实话就是作者偷懒了,本来要做四关的,但是想想真没这个必要。而且这个游戏貌似简单模式也不容小觑捏,请看下文:

(3)简单或困难模式界面(玩法机制穿插):

简单模式:


困难模式:


是的,你没看错,简单模式与困难模式的区别就在于倒计时,简单模式的倒计时有90秒,而困难模式只有20秒的时间!!

(4)胜利或者失败界面:

胜利
WIN!!
失败
LOSE
作者在两个背景板选择上又偷懒了

玩法机制:

游戏的消除机制的难度引来史诗级增强,首先,你以为只要挑选三个一样的在槽位中就可以消除吗?
不,大错特错!你必须保证选中的三个图案不仅一致,而且还要在槽位中连续,才能对图案进行消除:


就像这种情况,傻了吧,是无法消除滴!!
不讲人性的图片分层设计:
你会看到有三张偏移的图片,它们形成了一个图片块,你的每次点击只能选中最上方的图片,然后第二层的图片才能再点击选中:


就像这样,你无法看到第二层图片具体是什么样,只能看到轮廓,仅凭轮廓无法分辨出是哪种图案哦
作者已经设计程序emo了,加点阴间设计也没什么吧,顺便提一嘴,如果有人能通关困难模式,截图私信作者领奶茶喝,仅限前5名。
胜利条件以及AIGC提供创意:
AIGC图案设计:
这么好的设计当然离不开好的AI,我手上的这个gpt的图片生成器使用的是最新的DALL—E生成工具,游戏的UI图案就是在这里设计的哦:





胜利条件:
当然是在规定时间内消除界面上所有图片啦,但是这里好像存在一个bug,好了作者又要emo了。
其实也不算bug,就是当界面上都没有图案时,槽位里的图案并没有完全消除干净,但是小于槽位上限,依然是判定成功的。
算是降低了点难度吧,作者也不想太为难玩家。
失败条件:
你说呢,胜利条件我都说明了,自己玩一下就懂了。

特色算法以及测试:

特色算法:

算法/机制 说明
随机块生成 使用random.choicerandom.shuffle随机生成图案组合,并将其打乱以生成游戏中的图案块。
碰撞检测 通过pygame.Rect.collidepoint函数检测鼠标点击是否在特定的按钮区域或块区域中。
图案匹配检测 check_slots函数中检查槽位中是否有三个连续相同的图案,使用简单的循环进行逐个比较。
消除匹配图案 remove_matching函数中通过扫描槽位中的图案并移除匹配的三个连续相同图案,然后将剩余图案向左对齐。
倒计时显示 使用pygame.time.get_ticks计算游戏剩余时间,并使用pygame.font显示倒计时。
背景图和UI渲染 使用pygame.image.load加载背景图,并根据不同的游戏状态(主菜单、胜利、失败、游戏进行中)渲染不同的背景和界面。
事件处理机制 通过pygame.event.get()循环监听事件,包括鼠标点击和退出游戏的事件处理。

!!这里重点讲一下随机块生成算法,作者为了保证每一关都有解,现实从三种图案中随机选择一个图案并将对选择图案生成3张一样的图,以此类推生成33张图,然后在33张图中每三个随机组合搭配生成一个块,其中这三张图还使用了上文提到的堆叠分层机制。

测试:

1.编写测试代码:

这个测试代码是用Copilot编写的。。。
2.测试结果如下:

主要是测试连续三个图案能否成功进行消除,测试没问题。至于页面交互,重新进入,这个手动测试都更快吧。

AIGC子任务表格以及项目学习表格:

AIGC子任务表格:

子任务 描述 状态 备注
初始化 Pygame 初始化 Pygame 库并设置基本参数(窗口尺寸、常量等)。 完成
加载图案图片 加载和缩放图案图片,处理图案资源。 完成
加载背景图片 加载主菜单、游戏板、胜利和失败背景图片,并调整大小。 完成
创建游戏板 生成游戏块,随机选择图案并将其分配给游戏块。 完成
绘制按钮函数 绘制游戏界面上的按钮并处理鼠标悬停状态。 完成
绘制主菜单 绘制主菜单界面,包括开始游戏和退出游戏按钮。 完成
绘制难度选择界面 绘制难度选择界面,提供简单和困难选项。 完成
绘制游戏板 绘制游戏板,包括游戏块和它们的图案。 完成
绘制槽位 绘制槽位区域,包括插槽和插槽中的图案。 完成
检查槽位 检查槽位中是否有三个连续的相同图案。 完成
消除匹配图案 移除槽位中匹配的三个连续相同的图案,并重新排列剩余图案。 完成
显示倒计时 显示剩余时间的倒计时。 完成
绘制胜利界面 绘制胜利界面,显示胜利信息和重新开始、退出游戏按钮。 完成
绘制失败界面 绘制失败界面,显示失败信息和重新开始、退出游戏按钮。 完成
处理用户输入 处理用户点击事件,根据点击位置更新游戏状态(选择难度、点击块、点击按钮等)。 完成
更新游戏状态 更新游戏状态,包括计时器、游戏结果和游戏是否激活。 完成
主游戏循环 实现主游戏循环,处理事件、更新游戏状态和渲染界面。 完成
重置游戏 在重新开始游戏时重置游戏状态,包括游戏块、槽位、计时器和结果。 完成

AIGC项目学习表格:

日期 学习内容 任务描述 完成情况 收获与反思
Day 1 Pygame 基础知识 学习 Pygame 的基本用法,如窗口创建、事件处理等。 完成 理解了 Pygame 的基本概念和用法。
Day 1 游戏界面设计 设计主菜单、游戏板和结果界面,并实现相关功能。 完成 学会了如何设计和实现游戏界面,掌握了布局和视觉效果。
Day 2 游戏逻辑编写 实现游戏逻辑,如图案生成、槽位检查和图案消除。 完成 掌握了游戏逻辑的实现,包括如何处理图案和检查匹配。
Day 2 难度选择与计时器 添加难度选择界面,并实现倒计时功能。 完成 理解了如何实现不同难度和倒计时功能。
Day 3 用户交互与按钮处理 实现用户交互,包括按钮点击和游戏状态更新。 完成 学会了如何处理用户输入和更新游戏状态。
Day 3 游戏重置与结果处理 实现游戏重置功能,并处理胜利和失败界面。 完成 理解了游戏重置的逻辑和如何处理游戏结果。
Day 3 项目优化与代码重构 代码优化和重构,提升代码可读性和可维护性。 完成 提高了代码的组织性和可维护性。
Day 4 测试与调试 进行全面测试,修复发现的 bugs 和问题。 进行中 学习了如何系统地测试和调试游戏。
Day 5 文档编写与总结 编写项目文档,总结学习过程和项目经验。 待完成 准备总结和文档编写,以便后续参考和分享。

PSP表格:

PSP (个人软件过程) 记录

阶段 预估耗时 (小时) 实际耗时 (小时)
项目分析,理解羊了个羊 2 1.2
构建逻辑模型和大体框架 1 0.8
相关内容学习以及编写框架 4 2
投入项目开发->编写代码 10 9
调试和修改 1 5
测试 1 0.1
复盘与总结 0.8 0.5
上传到git仓库 0.2 0.5
仓库项目维护 持续跟进 持续跟进

个人心得体会:好累好累,有的时候仿写还有调试真的会让人emo,还有的时候会想bug想的睡不着觉,all in all,希望交付一个不错的游戏。

posted @ 2024-09-15 15:11  哎哎呦呦喂喂0211  阅读(125)  评论(0编辑  收藏  举报