软件工程第二次作业

news/2024/9/19 7:37:47/文章来源:https://www.cnblogs.com/aaaauv/p/18414866
这个作业属于哪个课程 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,希望交付一个不错的游戏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/797613.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win11 nimi主机安装软路由

硬件 带两个LAN口的mini主机 软件 win11家庭版 openwrt一 安装hyper-v虚拟机 由于是win11家庭版,启用或关闭 Windows 功能里没有hyper-v win11家庭版启用Hyper-V的方法 创建脚本pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.…

帝国cms认证码怎么取消

取消帝国CMS中的认证码(也称为验证码),可以通过以下几种方法来实现: 1. 通过后台设置取消 如果你只是想在某些特定的操作中取消认证码,比如在会员注册、登录或后台管理时不需要验证码,可以尝试通过后台设置来取消:登录后台:登录帝国CMS的后台管理系统。进入系统设置:在…

dedecms修改文档标题最大长度

在DedeCMS中修改文档标题的最大长度可以通过以下几种方法实现: 方法一:通过后台设置登录后台:登录到DedeCMS的后台管理系统。进入系统设置:在后台管理界面,找到“系统”->“系统基本参数”。修改文档标题长度:在“系统基本参数”设置中,找到“其他选项”->“文档标…

织梦在导航栏下拉菜单中怎么调用当前栏目子类

在织梦CMS (DEDECMS) 中,要在导航栏的下拉菜单中调用当前栏目的子类,可以使用channelartlist标签来实现。下面是如何实现这一功能的具体步骤: 步骤 1: 使用channelartlist标签 在织梦CMS中,可以利用channelartlist标签来调用当前栏目的子类。下面是一个示例代码:<ul>…

帝国cms怎么上传图片

在帝国CMS中上传图片可以通过多种方式实现,具体取决于你是想在文章中插入图片还是批量上传图片到服务器。下面是两种常见的上传图片的方法: 1. 在文章编辑时上传图片 当你在撰写或编辑文章时,可以直接上传图片并插入到文章内容中:登录后台:登录帝国CMS的后台管理系统。进入…

c#委托事件订阅模型

namespace WinFormsApp2 {delegate void ShowName(object sender);//声明委托类型,委托类型可以理解为一类方法的类型 ,如此处的showbuttonname方法便是符合showName类型public partial class Form1 : Form{private event ShowName btnclick; //声明事件,此处相当于实例…

织梦cms调取栏目高亮特殊样式的限制字节方法

在织梦CMS中,如果你想要调取栏目并且为当前访问的栏目添加高亮显示效果,同时限制字节数,可以采用以下方法: 方法一:使用runphp 如果你熟悉PHP编程,可以通过在模板中使用runphp标签来实现这一功能。不过需要注意的是,runphp标签的使用可能会带来一定的安全隐患,因为它允…

dede怎么添加自定义属性

在DedeCMS中添加自定义属性可以通过修改数据库表来实现。以下是具体的步骤:登录数据库管理工具:登录到你的数据库管理工具,如phpMyAdmin。修改dede_archives表:寻找dede_archives表,并打开其结构。 找到flag字段,这是一个枚举类型字段,用于存储文档的一些标志。 编辑fla…

帝国cms标签模板在哪下载

帝国CMS的标签模板可以从多个途径下载:帝国CMS官方网站:访问帝国CMS的官方网站:在导航栏中找到“模板”选项,浏览并下载所需的模板。注意,标签模板通常是以 .et 为后缀的文件。第三方模板市场:一些第三方模板市场也提供帝国CMS的模板下载,例如 TemplateMonster、ThemeFo…

织梦dedecms后台反应特别慢和经常卡住怎么办?

织梦DedeCMS后台反应特别慢和经常卡住的问题可以通过以下几个方面来解决:屏蔽安全提示:根据资料,织梦后台的安全提示执行缓慢可能是导致卡顿的原因之一。你可以尝试屏蔽相关的代码。具体操作是在织梦后台管理目录下的 templets/index_body.htm 文件中,将第25行至第35行的部…

二叉树的 Morris 中序遍历

回顾 问题陈述: 给定一棵二叉树,实现中序遍历并返回包含其中序序列的数组 例如给定下列二叉树:我们按照左、根、右的顺序递归遍历二叉树,得到以下遍历:最终中序遍历结果可以输出为: [3, 1, 9, 2, 4, 7, 5, 8, 6] Morris trick Morris 中序遍历是一种树遍历算法,旨在实现…

帝国cms生成文章图片怎么弄的

在帝国CMS中生成文章图片通常指的是为文章添加封面图或者特色图片。这里有两种情况:一种是手动添加图片,另一种是使用插件自动生成图片。 手动添加图片上传图片:首先,你需要将图片上传到帝国CMS的服务器上。可以通过后台的“文件管理”功能上传图片。插入图片到文章:在撰写…