2024秋软件工程个人作业(第二次)

news/2024/12/29 11:32:03/文章来源:https://www.cnblogs.com/acedia7/p/18410760
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253
这个作业的目标 要求使用Python编写一个“羊了个羊”风格的消除类小游戏。对开发过程进行实践,更加熟悉aigc工具
学号 102202135

一、项目展示

GitHub仓库链接:https://github.com/acedia7/yanglegeyang-for-ikun


二、项目介绍

项目的前端设计

1. UI布局与整体风格
本游戏采用了简洁的卡通风格背景,配合轻松的配色设计,增强了玩家的沉浸感和趣味性。游戏的主要背景是淡绿色的草地场景,游戏元素如“牌堆”、“图标”等都设计得较为简洁,符合游戏整体轻松愉快的风格。
主界面布局:
牌堆区域:玩家需要操作的牌堆位牌堆由多个小方块组成
选牌栏:位于排队区域的下方,当选牌栏中相同的牌等于三张,则自动消除该三张牌,当栏中牌数大于7时,游戏失败
时间倒计时与关卡信息:倒计时和关卡信息显示在屏幕的上方,来展示玩家当前的关卡和剩余时间等信息。
图标设计:在右上角有一个广告图标,点击广告图标可以进入视屏,玩家可以欣赏坤哥的舞姿和歌声,此时游戏暂停30秒,30秒后游戏重新从本难度开始,给玩家以娱乐的同时也增加了额外的趣味性。
2. 主要交互
游戏开始界面:
游戏一开始会显示标题“ikun”以及一个“开始游戏”的按钮。玩家点击按钮后,游戏进入第一个关卡,倒计时开始,并且牌堆和其他界面元素出现。
游戏胜利和失败界面:
胜利界面:当玩家通过关卡时,会显示一条消息“You Win! You are the real IKUN”,并且进入下一个关卡。
失败界面:当时间用尽或牌堆堆满时,显示“You Lose!”字样,并提供一个重新开始按钮,玩家可以通过点击按钮重新开始游戏。
3. 响应式动画与画面更新
游戏的所有画面更新通过 draw() 函数实现,这个函数通过调用 Pygame Zero 的 screen.draw.text() 和 screen.blit() 实现界面元素的绘制。
动态绘制:所有的动态元素如倒计时、牌堆、按钮等都会通过 clock.schedule_interval() 和 update_timer() 等时间函数进行定时更新,保证了游戏的流畅性。


项目的特色功能

1. 多关卡机制
2. 倒计时与暂停功能
3. 视频播放功能


描述完成项目中所使用的技术和特殊的算法,并展示实现思路

1. 关卡生成算法
关卡生成使用了随机排列和层级叠加的策略。这是为了确保每个关卡的牌堆布局有所不同,增加游戏的随机性和趣味性。
技术: Random Shuffle 算法。
实现思路:
关卡中的牌通过随机排列 (shuffle) 被分配给不同的层级。
每一层的牌数量逐渐减少,底层的牌被更多的牌覆盖,形成一种叠加式布局。
不同关卡的难度通过增加牌的数量和层数来实现(如第一关较少牌,第三关最多)。
2. 游戏状态管理
游戏的状态分为多个部分,包括开始界面、游戏运行状态、游戏胜利、失败等状态。通过逻辑判断控制游戏的各个阶段的显示内容和玩家交互。
技术: 状态机。
实现思路:
游戏使用了多个布尔变量(如 is_start_screen, game_over, game_complete)来管理不同的状态。
开始时,显示游戏标题和开始按钮;玩家点击后,进入游戏状态。
当玩家通过所有关卡时,显示胜利信息,而如果玩家在时间内未完成游戏,则进入失败状态。
3. 倒计时与暂停控制
游戏的每一关都有倒计时功能,同时还设计了暂停和恢复游戏的功能。这一部分使用了时钟机制和暂停标志来控制游戏的时间流逝。
技术: Clock 机制。
实现思路:
每个关卡都有初始时间,通过时钟每秒减少时间。
倒计时会与游戏的暂停状态同步,暂停时停止倒计时,恢复时继续倒计时。
当倒计时归零时,自动结束游戏并显示失败界面。
4. 玩家交互与事件处理
玩家通过鼠标点击操作进行游戏,通过点击牌堆中的牌来消除匹配的牌,并从牌堆中移除。
技术: 事件处理机制。
实现思路:
游戏使用了点击事件监控,玩家点击牌堆中的牌时,程序会检查该牌是否可以被选中(即没有被其他牌覆盖)。
玩家成功选择牌后,检查是否有三张相同的牌可以消除。
如果牌堆中超过7张牌,则游戏结束。
5. 游戏胜利/失败条件判断
在游戏过程中,系统实时监测玩家的操作是否符合胜利条件或者导致失败。
技术: 逻辑判断。
实现思路:
游戏通过持续检查玩家的操作,当牌堆中没有剩余牌时,游戏判定为胜利,进入下一关。
当牌堆中超过7张牌时,判定为失败。
每一关结束后,自动跳转到下一关,直至通过所有关卡。
6. 视频播放与暂停功能
游戏中特别设计了点击图标播放视频的功能,视频播放过程中,游戏会自动暂停,且视频结束后游戏恢复进行。
技术: 系统命令调用与事件同步。
实现思路:
点击图标后,调用系统命令播放视频文件。
游戏暂停时,背景音乐和倒计时同时暂停,等到视频播放结束后,恢复游戏状态。
7. 关卡进度与难度递增
游戏的难度通过关卡的递增表现,每一关的牌堆数量和层数都会相应增加,使得游戏更加具有挑战性。
技术: 逐步递增难度算法。
实现思路:
游戏设计了3个关卡,每一关的牌堆数量增加,层数递增,且每层的牌排列更加复杂。
随着关卡的推进,倒计时的总时间也会相应调整,给予玩家不同的挑战。
通过这些技术和算法的整合,这款游戏实现了随机性、挑战性和趣味性,增加了玩家的参与感和体验感。


测试

考虑到该项目的制作时基于pygame-zero的框架,由于该框架的特殊性,可视化的测试用例难以写出,所以我将代码逻辑简单的封装在新的文件里,使用测试案例对逻辑进行检验。
由于该测试案例的特殊性,所以只能检验游戏逻辑是否正常,其他的很难检验出来,需要开发者自行游玩得到结论,所以该测试案例并不成熟,不能推广使用,只能简单测试。


AIGC表格

PSP表格

个人作业评价

完成效果:
项目基本按计划完成,游戏的核心逻辑如关卡生成、倒计时、玩家交互、游戏胜利/失败判断等均得以实现。
测试阶段出现了一些耗时的部分,特别是在关卡逻辑和游戏状态的测试中耗时比预期多。

哪里做得好

任务分解清晰: 各个子任务合理划分,编码、测试等部分执行有序。
功能实现顺畅: 游戏逻辑的核心部分实现效果良好,游戏关卡生成、状态管理等功能流畅。
任务趣味性足:引入了ikun思想,加入观看坤哥视频获得重新本关的机会,增加游戏趣味性和可玩性

可以改进的地方:

可以增加更多的游戏难度
可以增加联网功能,实现排名,增添竞技性
完善观看视频的机制,将视频设置为时间未到不可关闭
提升美工,增加不同的音效

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

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

相关文章

PbootCMS网站apache伪静态规则

<IfModule mod_rewrite.c>Options +FollowSymlinksRewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php?p=$1 [QSA,PT,L]</IfModule>扫码添加技术【解决问题】专注中小企业网站建设、网站安全1…

PbootCMS网站nginx伪静态规则

nginx #请复制下面伪静态配置到nginx配置文件中: #规则适合PbootCMS V2.0+版本location / {if (!-e $request_filename){rewrite ^/(.*)$ /index.php?p=$1 last;} }扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、J…

记一次SSH无法远程

故障现象 主机无法使用ssh远程 输入密码之后报错如下# Permission denied (password,keyboard-interactive).原因 看起来好像是远端设置了不允许用户名和密码登录 其实是客户端设置问题 修复或者注释# ChallengeResponseAuthentication no

bluecms搭建和代码审计(SQL)

bluecms搭建 将bluecms的源码文件bluecms放在www目录下,进入bluecms/install/index.php目录安装bluecms填写数据库配置信息和管理员账号信息填写完上述信息后,会自动在bluecms数据库下创建这些文件返回主界面 http://127.0.0.1/bluecms后发现管理员不能从前台登录, 需要从ht…

KubeSphere 社区双周报| 2024.08.30-09.12

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2024.08.30-09.12。 贡献者名单近期重要更新 KubeS…

Appium+python框架搭建

一、Appium-Python-Client ①安装依赖库也就大家说的客户端,这里的客户端指的是我编辑代码的界面,因为代码界面我要引入webdriver所以叫客户端,其实本质是一个依赖库跟selenium差不多 ②安装的命令:pip install Appium-Python-Client(python环境所以安装python包) ③Appi…

2576. 求出最多标记下标

给你一个下标从 0 开始的整数数组 nums 。 一开始,所有下标都没有被标记。你可以执行以下操作任意次: 选择两个 互不相同且未标记 的下标 i 和 j ,满足 2 * nums[i] <= nums[j] ,标记下标 i 和 j 。 请你执行上述操作任意次,返回 nums 中最多可以标记的下标数目。 示例…

**** oracle 数据库-监听故障处理-故障单

**** 数据库-监听故障处理-故障单**** 数据库-监听故障处理故障反馈人张**工单接收时间2024年9月11日 9:10审核/复核人张**/张***处理完毕时间2024年9月11日 9:22报告人柏*报告时间2024年9月11日11:22故障环境IP: 180.5.115.** 数据库版本: 10.2.0.4.0故障现象告警时间: 起…

Spring声明式事务不生效?

背景 本篇博文将会讲一讲Spring中使用@Transactional注解会出现的不生效问题。事务的生效与否,一般不是我们冒烟自测的范围,测试也不会去测,但是一旦上线后,事务出现不生效的情况,就可能引发较大的问题,甚至会带来损失。所以,使用好事务注解是非常重要的,尤其是注意哪些…

UE4(5)逆向学习笔记(二)——寻找GWorld,GName和GUObjectArray

目录0.前言1.准备1.1 下载游戏《死寂(DeathlyStillness)》1.2 下载UE源码2.寻找GWorld3.寻找GName4.寻找GUObjectArray5.开始Dump5.结尾 0.前言 笔记(一)中我们了解了GWorld,GName和GUObjectArray是什么,也知道了想要使用UEDumper要获取到它们的偏移。 这次我们就以游戏《…

一个用于管理多个 Node.js 版本的安装和切换开源工具

大家好,今天给大家分享一个用于管理多个Node.js版本的工具 NVM(Node Version Manager),它允许开发者在同一台机器上安装和使用不同版本的Node.js,解决了版本兼容性问题,为开发者提供了极大的便利。在开发环境中,特别是在处理多个项目时,每个项目可能依赖于不同版本的 N…

2552.统计上升四元组

题目描述: 给你一个长度为 n 下标从 0 开始的整数数组 nums ,它包含 1 到 n 的所有数字,请你返回上升四元组的数目。 如果一个四元组 (i, j, k, l) 满足以下条件,我们称它是上升的: 0 <= i < j < k < l < n 且 nums[i] < nums[k] < nums[j] < num…