软件工程第二次作业
这个作业属于哪个课程 | 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.choice 和random.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,希望交付一个不错的游戏。