2024秋软件工程个人作业(第二次)
这个作业属于哪个课程 | 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思想,加入观看坤哥视频获得重新本关的机会,增加游戏趣味性和可玩性
可以改进的地方:
可以增加更多的游戏难度
可以增加联网功能,实现排名,增添竞技性
完善观看视频的机制,将视频设置为时间未到不可关闭
提升美工,增加不同的音效