软件工程第二次个人作业
| 软件工程 | https://edu.cnblogs.com/campus/fzu/SE2024 |
|---|---|
| 作业要求 | https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253 |
| 作业目标 | 用python实现“羊了个羊”风格小游戏 |
| 学号 | 102201138 |
项目展示:基于Pygame的Match-Three游戏
在这篇博客中,我将展示我在Python和Pygame下开发的Match-Three风格消除游戏的项目成果。以下是该项目的详细介绍,包括前端设计、特色功能、技术实现、测试结果及我的学习心得。
仓库链接
https://github.com/littlyellowduck/littlyellowduck/tree/master
前言
在9月15日的时候,我对python还一无所知,大概用了三天时间,实现了python学习的入门到入土。写完游戏以后,我现在看到代码就想吐。因为这个,我的中秋假期直接蒸发。写这个游戏我收获很多,比如python知识的学习,比如和gpt交流的能力得到强化。只要进行有效的沟通,说清楚自己的需求,gpt都能大概实现。使用的感受是,如果不学点技术的话,迟早会被ai取代。💡1. 游戏功能实现
🎨界面设计
使用Pygame库设计游戏界面,包括主菜单、游戏界面和结束界面。
-
主色调:在游戏的设计中,我选择了明亮的色调,如淡黄色,水红色和鲜艳的绿色,以此渲染“圣诞节”的氛围,并增强游戏的视觉吸引力。这些颜色不仅提升了游戏的趣味性,也让游戏界面看起来更加生动活泼。
-
卡片设计:游戏中的卡片采用了圆角矩形设计,并加入了3D效果,使其看起来更具立体感和现代感。每种类型的卡片都有独特的图案和色彩,我特地找的很可爱的圣诞节图标,便于玩家区分和匹配。
-
主菜单和选择菜单 :
![]()
-
游戏界面:
![]()
-
结束界面:
![]()
🤖玩法介绍
-
1.实现图案的生成与分层摆放,确保图案能够被合理匹配和消除: 与“羊了个羊”差不多,多图层随机摆放,被覆盖的灰色图片不可以点击。
-
2.玩家通过点击选择图案并消除,当所有图案被消除时游戏结束: 点击图案移入收集框,三个相同的可以消除
-
3.设置倒计时机制,时间结束或框满时游戏失败: 倒计时90秒,收集框上限为8,Hard模式上限为7。
-
4.难度设置:随机生成图案摆放顺序,设置三种不同的关卡以增加游戏挑战性。
设置三种不同的模式“Easy”、“Normal”、“Hard” -
简单模式:
![]()
-
正常模式:
![]()
-
困难模式:
![]()
-
💡特色功能
-
倒计时器:游戏开始时,倒计时器会启动。如果时间耗尽,游戏将结束并显示失败消息。这一功能增强了游戏的紧张感和挑战性。
-
暂停按钮:在游戏界面添加了一个“PAUSE”按钮,点击后可以暂停倒计时,帮助新玩家快速上手。
-
时间暂停
![]()
-
计分系统:每成功匹配三张相同类型的卡片,玩家将获得3分。游戏结束时会显示最终得分,并记录到排行榜中,供玩家查看历史成绩。
-
灰度转换:我做了两组图片,一组是正常颜色,一组是灰色,当一张图片被其他图片盖住时,他会变灰,不能点击;当覆盖解除时,图片变亮,可以点击。
-
过渡效果:为了提高游戏的视觉效果,加入了延迟消除等过渡效果和动态背景,使得界面切换更加平滑自然。
-
素材来源:
![]()
以上素材均来源于免费网站,无侵权问题。
🔧 2. 技术与算法实现
技术实现
- 游戏逻辑:使用Python编写游戏逻辑,通过Pygame库管理游戏的渲染和事件处理。实现了游戏的核心功能,包括卡片的匹配、分数统计和游戏状态管理。
- 算法设计:采用随机生成算法保证游戏中的卡片布局,同时确保每种类型的卡片数量为3的倍数,以便实现匹配功能。算法中加入了检查机制,以防止生成的卡片数量与游戏网格不匹配的问题。
特殊算法
1. 图片随机分布算法
描述:
- 这个算法用于在游戏网格中随机分布图像,并确保每种图像的数量是3的倍数,同时处理空白插槽。
实现步骤:
- 初始化: 创建一个空的2D数组,大小为
rows x cols。 - 生成图像列表: 根据图像类型和数量生成一个图像列表,其中每种图像的数量都是3的倍数。
- 随机分布: 使用随机打乱列表的方式,将图像和空白插槽随机分布到网格中。
- 填充空白: 如果生成的图像总数小于网格总数,计算并填充空白插槽,确保总数不超过网格的总数。
示例代码:


2. 其他函数
描述:
- 我写了非常非常非常多的函数实现各种各样的功能,见代码和注释。
示例代码:



3. 编写了两个类
menu类和tile类:


🧪 3. 测试样例与结果
测试样例
在进行区分灰色图和亮色图时老是出现各种各样的错误,于是进行测试,在点击时输出他们的名字,以示区分:

- 功能测试:对游戏的各项功能进行测试,包括卡片匹配、计分系统、倒计时器和排行榜显示。确保每个功能都能够按预期工作。
- 性能测试:测试游戏在不同分辨率下的表现,检查游戏的流畅度和响应速度。
- 用户体验测试:邀请玩家进行试玩,收集他们的反馈和建议,以便进一步优化游戏体验。
测试结果
- 功能测试:所有核心功能运行正常,没有发现重大Bug。游戏中的计分系统能够准确显示分数。
- 性能测试:游戏在常见的分辨率下表现良好,没有出现明显的卡顿现象。
- 用户体验测试:玩家反馈游戏界面简洁明了,操作直观,倒计时器和帮助按钮的设计得到了好评。
💬 4. AIGC使用感想
在项目开发过程中,我使用了AIGC工具来生成游戏中的图像和设计元素。以下是对这些工具的总结和感想:
优点:
- 效率高:AIGC工具能够快速生成多种设计选项,大大节省了手动设计的时间。
- 激发创意:自动生成的设计提供了多样化的创意选择,有助于突破传统设计思维。
- 操作简单:工具界面友好,操作便捷,能够快速获得多个设计方案。
缺点:
- 理解不足:有时生成的设计与预期存在差距,需要进一步调整以符合实际需求。
- 细节控制有限:尽管工具能够生成创意,但对复杂细节的控制能力仍有不足,需要专业软件进行后期处理。
- 独特性差:生成的设计可能与其他用户的设计类似,需要进行个性化处理以确保独特性。
AIGC表格任务
| 子任务 | 借助何种AIGC技术 | 实现了什么功能 | 效果如何? |
|---|---|---|---|
| 游戏逻辑设计 | AIGC代码生成(如GitHub Copilot) | 生成游戏的基本逻辑代码,包括图像匹配、计分等功能 | 提高了开发效率,减少了编码时间,但需要手动检查和调整生成代码的正确性 |
| 图像生成和处理 | AIGC图像生成(如DALL·E) | 创建游戏中的图像资产,如游戏图标、背景等 | 图像质量较高,能够快速生成多样化的图像,但可能需要进一步优化和调整以适配游戏需求 |
| UI/UX设计 | AIGC设计辅助工具(如Figma的AI插件) | 设计和优化游戏的用户界面和用户体验 | 提供了设计灵感和初步设计方案,但最终的设计还需要人工调整以符合游戏的实际需求 |
| 文本生成 | AIGC文本生成(如GPT-4) | 生成游戏内文本,如帮助提示、游戏说明、错误提示等 | 生成的文本自然流畅,提升了游戏的可玩性,但需要确保文本内容准确和适当 |
| 测试和调试 | AIGC代码分析和调试(如CodeQL) | 自动检测代码中的潜在错误和性能问题 | 帮助发现和修复了一些代码问题,但仍需要人工检查和测试以确保稳定性和准确性 |
| 游戏优化建议 | AIGC优化建议(如AI-powered analytics) | 提供游戏优化的建议和改进方案 | 提供了有用的优化建议,但最终的实施和验证还需要开发者的判断和调整 |
📈 5. PSP表格与任务分解
在项目开发过程中,我使用PSP表格对任务进行了详细的分解,并记录了时间预估与实际耗时。以下是对个人作业完成过程的评价:
| 任务 | 时间预估 | 实际耗时 | 评价 |
|---|---|---|---|
| 需求分析 | 4小时 | 4.5小时 | 需求分析准确,但时间略超出预期。 |
| 设计与实现 | 17小时 | 18小时 | 实现过程顺利,设计符合预期。 |
| 测试与优化 | 8小时 | 7小时 | 测试全面,优化及时有效。 |
| 文档编写与总结 | 3小时 | 3小时 | 文档编写详细,略超出时间预估。 |
评价
- 项目完成情况:整体上,项目按时完成且质量较高。虽然在文档编写阶段略有延迟,但对项目的各个方面进行了详细记录和总结。
- 改进建议:未来在项目规划阶段,可以更精确地预估时间,并提前安排测试和优化的步骤,以确保项目按时交付。
📈 6. 学习心得记录
项目学习记录表格
| 技术/算法 | 具体内容 | 学到的知识 | 心得体会 |
|---|---|---|---|
| Pygame | 游戏开发框架,处理图像、声音和用户输入 | 学会了如何使用Pygame创建游戏界面、处理用户输入和绘制图形 | Pygame 简单易用,但需要注意性能优化,特别是在图像处理和事件处理上 |
| Python | 编程语言,用于实现游戏逻辑和功能 | 提高了 Python 编程能力,尤其是在游戏开发中的应用 | Python 的灵活性和强大库支持非常适合快速开发原型和游戏 |
| 随机分布算法 | 用于随机分布图像并确保每种图像数量为3的倍数 | 理解了如何处理和生成随机分布的数据,特别是在游戏网格中 | 随机算法的设计需要考虑边界条件,确保生成的数据符合游戏逻辑 |
| 匹配算法 | 查找并消除相邻的相同图像 | 掌握了广度优先搜索(BFS)或深度优先搜索(DFS)在图像匹配中的应用 | 图像匹配的效率和准确性直接影响游戏体验,需要精心设计和优化 |
| 倒计时管理 | 实现游戏倒计时功能,记录游戏时间 | 学会了如何在游戏中实现计时器和处理时间到期的逻辑 | 倒计时功能对游戏体验至关重要,需要确保逻辑准确并处理好超时情况 |
| 评分系统 | 计算和记录玩家分数 | 理解了如何在游戏中实现评分和排行榜功能 | 评分系统可以显著提高游戏的竞争性和趣味性,需要保持分数计算的公平性 |
| 排行榜系统 | 记录和展示游戏排行榜 | 学会了如何排序和展示排行榜,提升玩家参与感 | 排行榜可以激励玩家,提高游戏的长期吸引力,但要注意数据的安全性和公平性 |








浙公网安备 33010602011771号