小小小仙贝

Loading...
BihuangChen  
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253
这个作业的目标 开发"羊了个羊"类消除类小游戏,合理运用 AIGC 工具提高效率
学号 102201225

项目展示:LET'S DESSERT! -- 一款简单轻松的消除类游戏

GitHub仓库链接:cbhhhhhh/homework2_LET_S_DESSERT at master (github.com)


写在前面

上课教加减法 作业布置微积分。从没自己做出一个完整的游戏,更没有两天内极限做出一个至少功能是完整的的游戏😭😭两天无数次利用AI实现预期功能,使用下来真的感慨只要掌握逻辑和框架,其他功能AI都可以来解决。无经验纯小白处女作。。各位老师助教手下留情😽😽

两天内最大感慨:


🍰 项目介绍与展示

🍩 游戏介绍

这是一款轻松简单的像素甜品风消除类小游戏,玩家在轻快音乐的伴随下,在甜品店环境下对美食进行消除。整个画风甜美温馨,难度适中,欢迎在闲暇时刻来甜品店消除一下~

🍩 游戏规则

1. 游戏进入主界面时,画面中随机生成3层依次遮挡的美食卡牌,每种卡牌的总数为3的整数倍。
2. 玩家通过点击选择三个卡牌进行匹配,无遮挡的卡牌可以被选中并标黄。如果连续选择三个相同卡牌,则被消除;若匹配失败则取消选择,允许玩家重新选择图案;游戏会不断检查剩余图案数量,当所有图案被成功消除时,玩家获胜。
3. 设置重排机制,根据难度设置一定数目的重排机会。玩家点击重排按钮后,画面中剩余的卡牌会重新随机排放,同时更新遮挡状态,丰富玩家游戏体验。
4. 设置倒计时机制,玩家需要在时间内完成所有图案的匹配消除,时间结束时游戏失败;玩家可以选择重新开始或退出游戏。
5. 设置难度选择机制,玩家可以根据需要选择难度,难度根据倒计时长短和重排次数进行设定。
6. 设置排行榜机制,成功完成消除后会记录完成时长,完成时长最少的前5次会被记录在排行榜当中。

🍩 游戏主菜单和难度选择

  • 设计思想:因为我最近沉迷星露谷,本来是想把星露谷的主要村民头像为素材来制作游戏,但是考虑版权原因,我只保留了像素风风格,同时觉得千禧风格和甜品咖啡这样的元素很贴像素风,因此整合成了这样一个看起来有点古早的像素甜品店的感觉。因此整体风格是比较甜美复古的,以暖色调为主。
  • 背景音乐:游戏全程始终导入一个非常非常非常肥肠贴切的音乐,咖啡店风格的。
  • 主菜单包括游戏名称 “LET'S DESSERT!” 以及三个跳转窗口,其中玩家点击"GO!"则进入难度选择界面,“rank”进入排行榜,“BYE!”则退出游戏。
  • 难度选择:该界面包括“easy”和"difficult"两个难度选择。

🍩 ​游戏界面

  • 游戏界面左上角是倒计时,左下角的“Refresh”指的是重排机会剩余次数,点击可以进行卡牌重新排列。右下角“exit”可以返回主菜单,“stop”可以暂停游戏,同时暂停倒计时。
  • 设计思想:背景选择粉色花边,游戏界面因为像素美食堆砌可能看起来有些繁杂,但是正好贴合了我想做千禧年的那种极繁主义风格。

🍩 ​结束界面

  • 结束界面包括成功和失败两种界面
  • 同时设计back键,点击可以回到主界面

🍩 ​排行榜

  • 排行榜会记录成功消除的情况下,消除时长最短的前5次游戏时长并进行排序
  • 设置清空"clear"键和返回“back”键,清空可以清空当前的所有记录时长,back可以回到主界面

🍩 ​实机演示视频

🍩 ​素材来源

字体来源:[Selection - Google Fonts](https://fonts.google.com/selection?preview.text=LET'S DESSRT&query=pixel)

卡牌素材来源:Free Pixel foods by ghostpixxells (itch.io)

背景音乐来源:【Starbucks & Jazz】咖啡的香味沁人心脾~☕️星巴克咖啡店音乐 | Relaxing Background Music_哔哩哔哩_bilibili

背景来源于免费网站,所有素材经确认均无侵权嫌疑


💻 ​技术与算法实现

🎯 技术实现

  • 游戏逻辑:使用Python编写游戏逻辑,通过Pygame库管理游戏的渲染和事件处理。实现了游戏的核心功能,包括卡牌排列、重排与匹配、分数统计和游戏状态管理。
  • 算法设计:采用随机生成算法保证游戏中的卡片布局,同时确保每种类型的卡片数量为3的倍数,以便实现匹配功能。算法中加入了检查机制,以防止生成的卡片数量与游戏网格不匹配的问题。

🎯 卡牌三层偏移随机排列算法

  • 算法描述:游戏中需要展示三层卡牌,每层卡牌的排列是随机的,且每种卡牌的数量要满足一定的规则。算法的核心目标是确保每层卡牌的排列不仅是随机的,同时每层按照一定偏移量排列,形成遮挡效果
  • 实现步骤
    1. 加载卡牌图案:load_patterns()-从文件中加载卡牌图案并调整其尺寸。
    2. 生成每层的卡牌图案:generate_layer_patterns()-计算每种图案需要出现的数量,确保数量是3的倍数,使用 random.shuffle() 打乱图案的顺序,以创建随机排列。
    3. 创建单层卡牌:create_layer()-根据给定的偏移量和排列,生成一层的卡牌。
    4. 生成所有层的卡牌:generate_layers()-调用 generate_layer_patterns() 为每层生成随机排列的卡牌,根据每层的偏移量调用 create_layer() 生成具体的卡牌层次,为所有层生成卡牌,并设置偏移量以实现遮挡效果。
  • 相关代码

🎯 卡牌刷新重排算法

  • 算法描述:玩家通过点击按钮对剩余图案进行重新排列,从而为玩家提供新的游戏机会。重排列的核心目标是确保图案在重新排列后依然满足游戏规则,即可以消除的图案仍然可以正确识别,且图案的遮挡状态得到更新。
  • 实现步骤
    1. 收集所有剩余的图案:shuffle_tiles()-遍历所有层,收集所有未被选中的图案及其位置(tilerect),保存到 remaining_tiles 列表中,随机打乱列表中的图案顺序准备重排。
    2. 重新分配图案:shuffle_tiles()-遍历每一层,对每个位置的图案进行更新。从 remaining_tiles 列表中取出一个图案,将其分配到当前层的相应位置。
    3. 更新遮挡状态:update_blocking_status()-遍历每一层中的每个图案,检查是否被上层的图案遮挡并更新遮挡状态。
    4. 处理重排按钮点击:draw_rearrange_button()-绘制重排按钮,并在按钮上显示剩余的重排次数。在游戏逻辑中检测到重排按钮的点击事件后,调用 shuffle_tiles() 函数进行图案重排。
  • 相关代码
![]

🎯 卡牌消除算法

  • 算法描述:设置遮挡后,需要每次更新遮挡状态,检查卡牌是否符合消除条件。处理卡牌点击事件,清除已消除的图案,并最终确定游戏是否胜利。
  • 实现步骤
    1. 检查遮挡状态:is_blocked()-遍历当前图案上方的所有层,检查上层每个图案的矩形是否与当前图案的矩形重叠。
    2. 更新图案的遮挡状态:check_match()-遍历每个图案,检查其是否被上层图案遮挡,根据遮挡状态更新图案状态。
    3. 检查选中的图案是否符合消除条件:check_match()-确保选中图案的数量为 3,检查这三个图案是否相同,且未被遮挡,如果符合条件,则移除这些图案并更新图层。
    4. 检查并清除层中的空图案:check_and_clear_layers()-遍历每一层,移除已消除的图案,清除图层中空图案的位置,更新遮挡状态。
    5. 处理鼠标点击事件:handle_click()-从最上层到最下层遍历图案,找到被点击且未被选中的图案。检查该图案是否被遮挡,将图案标记为已选中,并将其添加到选中列表中,检查是否可以消除选中的图案。
  • 相关代码

📊 测试样例与结果

🔎 测试代码

🔎 测试结果

运行没有问题,这表明 game_screen.py 文件即核心游戏玩法的功能运行是正常的。

🔎 其他测试反馈

实际操作中对其他性能也进行测试,反馈如下:

  • 功能测试:所有核心功能运行正常,没有发现重大Bug,重排机制也没有很大问题,排行榜能够正确计入最短时长完成游戏的前5名。

  • 用户体验测试:玩家反馈游戏界面简洁明了,操作直观,倒计时器和随时的退出暂停功能的设计得到了好评。


💡 AIGC使用感想

🚩 AIGC表格

子任务 借助何种AIGC技术 实现了什么功能 效果如何?
游戏逻辑设计 AIGC代码生成(GitHub Copilot) 生成游戏的基本逻辑代码,如图像匹配、计分系统等。并辅助实现了核心功能例如重排机制,遮挡机制 提高了开发效率,减少了编码时间,但需要手动检查和调整生成代码的正确性
图像生成处理 AIGC图像生成(DALL·E) 创建了游戏当中的部分背景和图标 有一定的成效,但是与整体风格不是很协调
游戏测试调试 AIGC代码分析(ChatGPT-4o) 自动检测代码中的潜在错误和性能问题,帮助我调试代码并修改我无法解决的bug 提高了开发效率,减少了编码时间,但需要手动检查和调整生成代码的正确性
游戏功能优化 AIGC代码生成(ChatGPT-4o) 提供游戏优化的建议和改进方案 提供了有用的优化建议,但最终的实施和验证还需要开发者的判断和调整

🚩 AIGC优点分析

  1. AIGC可以帮助我快速创建游戏的基本框架和逻辑,找到游戏基本思路,然后方便我在这个框架上进行其他功能的添加。
  2. AIGC能够生成游戏的基本逻辑代码,如图像匹配、计分系统等。并辅助实现了核心功能例如重排机制,遮挡机制,减少很大的工作量。
  3. AIGC能够辅助我调试代码,并找到其中的bug并且修改。

🚩 AIGC缺点分析

  1. AIGC生成图像效果一般,格式化严重,对于特殊风格的需求满足性不大。
  2. AIGC可能不完全理解游戏的具体需求和上下文,导致生成的代码可能不符合实际需求。

📃 PSP表格与任务分解

在项目开发过程中,我使用PSP表格对任务进行了详细的分解,并记录了时间预估与实际耗时。以下是对个人作业完成过程的评价:

任务 时间预估 实际耗时 评价
环境配置 30min 2h 环境配置耗时过长,不明确安装路径,网好差
需求分析 2h 2h 需求分析准确,理解了应当实现什么功能
设计与实现 8h 10h 一开始对于项目实现还很难上手,后面慢慢熟悉
测试与优化 6h 10h 后续实现了很多新的功能,并修复了BUG,耗时较长
文档编写与总结 1.5h 3h 文档需求丰富编写详细,超出时间预估。

😼个人过程性评价

  1. 时间把握不准确,又成为ddl战神了
  2. 学会了如何使用Pygame创建游戏界面、处理用户输入和绘制图形。
  3. 提高了 Python 编程能力,尤其是在游戏开发中的应用。
  4. 项目总体完整,功能实现符合预期。其中核心玩法的补充如重排机制以及分数系统、倒计时机制等附加功能如预期实现。
  5. 但是在某些核心功能上,比如遮挡功能一开始设计想法过于复杂,使得游戏可玩性差。
  6. 美工不错,选择的风格符合个人预期。素材选取贴合整体风格,同时有贴合的bgm等设计。
posted on 2024-09-18 22:56  Xcccbh  阅读(17)  评论(0编辑  收藏  举报