软件工程第二次个人作业
这个作业属于哪个课程 | 首页 - 软件工程2024 - 福州大学 - 班级博客 - 博客园 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2024 |
这个作业的目标 | https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253 |
学号 | 102202102 |
本次代码用到的AIGC:豆包 kimi
使用的图片已经背景音乐皆来自于valorant
github仓库链接:https://github.com/s1ened/s1ened
1.1游戏特色
简洁的图形界面:使用Pygame库创建直观的用户界面。
模式选择:拥有easy normal hard增加游戏的可玩性
时间限制:设置倒计时,增加游戏的紧张感。
撤回功能:为了防止同学们手残,右上角的uodo可以撤销点击的图片
排行榜功能:玩家可以挑战不同难度,可以记录自己所得到的最高分
1.2游戏玩法
玩家通过点击图案选择图案。
当选中的图案达到三个时,这些图案将被消除,玩家获得分数。
游戏在限定时间内结束,玩家需要在时间耗尽前尽可能获得更多分数。
1.3游戏流程
启动游戏:玩家启动游戏并进入主菜单。
选择难度:玩家选择三种模式之一进入游戏开始界面
游戏进行:玩家在游戏时间结束前可以点击图片进行消除来进行得分
游戏结束:时间耗尽后会记录得分情况
2.1
刚开始会来到最初的画面,此时可选择三种不同的模式,easy normal hard,分别对应不同的消除时间
2.2
开始界面的下方显示的有游戏玩法以及游戏说明,在屏幕中间则记录了最高分数
2.3
进入游戏后你就可以点击图片进行消除了,三个为一组,右上角的uodo则可以进行撤销这次的选择,并且具有时间延长的道具,每点击一次可延长五秒
2.4
其中游戏的主要目的是在不同的时间尽可能获得更高的分数来占据得分榜第一名,每一关的难度不同其中的时间也是不同,尽可能在较短的时间内夺得较高的分数
2.5
当你点击的图片超过六个还没有消除时会出现失败界面
2.6
当你在游戏时间结束前达到20分则会出现成功界面
一、前端设计
界面布局
非常简洁
启动界面
显示游戏标题 “瓦了个瓦”
关卡选择界面
以为背景图。
有 “Easy”、“Normal”、“Hard” 三个关卡选择按钮
游戏界面
顶部得分信息
游戏区域是一个(3x3)的网格,用于展示游戏元素
底部有一个存储区域,可以容纳7个元素,用于存放从游戏区域点击获取的元素,每个元素以图片形式展示,位置在
还有一个 “Undo” 按钮
游戏失败界面。
显示 “Game Over! You have failed.” 文本和最高得分
2. 色彩搭配
使用了多种颜色来区分不同的元素和信息:
WHITE用于界面的一些基础绘制(如游戏失败界面最初的填充色,后被背景图替代)。
RED用于突出显示得分、剩余时间等重要信息,以吸引玩家的注意力。
GREEN用于显示任务和得分信息,与红色形成对比。
BLUE用于启动界面的文本,使标题和按钮文本在白色背景下较为醒目。R搭配使用,定义按钮的外观,使其在各个界面中易于识别。
二、特色功能
1. 关卡难度选择
玩家可以在游戏开始前选择不同的关卡难度(Easy、Normal、Hard)。不同难度关卡会根据设置改变游戏元素的数量(如在 Easy 关卡中,item_count为 5,data_length为 15;Normal 关卡中,item_count为 10,data_length为 30;Hard 关卡中,item_count为 15,data_length为 45),这直接影响了游戏的挑战程度。
2. 游戏元素存储与消除
玩家可以从游戏区域点击元素添加到存储区域(store),当存储区域中有三个相同的元素时,这些元素会被消除,玩家获得分数。这种机制增加了游戏的策略性,玩家需要思考如何收集和组合元素以获得更高的分数。
3. 任务与升级机制
游戏中有任务目标,随着玩家得分的增加,当在游戏时间结束前得分超过20时会给出sucess的提示
4. 操作可逆性
游戏界面中有一个 “Undo” 按钮,玩家点击该按钮可以撤销上一步操作,恢复到之前的游戏状态,这为玩家提供了一定的容错空间,避免因误操作而导致游戏失败。
5. 时间限制与游戏结束判断
每个关卡都有时间限制,时间根据关卡难度计算如在 Easy 关卡中,时间限制为90秒;Normal 关卡中,时间限制为60秒;Hard 关卡中,时间限制为30 秒。当时间耗尽或者存储区域被填满时,游戏结束,这种设计增加了游戏的紧张感。
6. 高分记录
游戏会记录玩家的最高得分,并在启动界面和游戏失败界面显示。这可以激发玩家的竞争意识,鼓励玩家不断挑战自己的记录。
三、使用的技术
1. Pygame 库
图像加载与处理
使用pygame.image.load加载各种图片资源,如游戏的背景图、游戏元素图等。
通过pygame.transform.scale对加载的图片进行缩放操作,以适应游戏界面的大小要求,以及游戏元素图片缩放至指定的窗口尺寸或元素尺寸。
事件处理
利用pygame.event.get获取游戏中的各种事件,如鼠标点击事件和退出事件。在不同的界面(启动界面、关卡选择界面、游戏界面、游戏失败界面)中,根据这些事件的类型和触发条件来执行相应的操作,例如在启动界面中,根据鼠标点击位置判断是开始游戏还是退出游戏。
界面绘制
通过pygame.draw.rect绘制矩形按钮,设置按钮的位置、大小和颜色。
使用pygame.font.Font和pygame.font.SysFont加载和创建字体对象,用于在游戏界面中渲染文本,如游戏标题、得分、提示信息等。
通过screen.blit将图片、文本等元素绘制到游戏窗口的指定位置上,实现游戏界面的布局和显示。
音乐播放
使用pygame.mixer.music.load加载背景音乐文件,并通过pygame.mixer.music.play实现背景音乐的循环播放,为游戏营造氛围。
时钟控制
利用pygame.time.Clock创建时钟对象,通过控制游戏的帧率为每秒 30 帧,确保游戏的流畅性和稳定性。
2. 数据存储
文件读写
通过 Python 内置的文件操作函数,在HighScore类中实现了游戏最高分的存储和读取。read_high_score方法尝试打开highscore.txt文件并读取其中的最高分数据,如果文件不存在则返回 0;write_high_score方法将新的最高分数据写入文件中,实现了游戏数据的持久化存储。
四、完成这个游戏的思路
1. 初始化与资源加载
首先初始化 Pygame,然后加载游戏所需的各种资源,包括图片(如背景图、游戏元素图)和音乐。
设置游戏窗口的大小,定义游戏中使用的颜色、字体等常量,为游戏的界面绘制和逻辑处理做好准备。
2. 界面设计与交互
设计了多个游戏界面,每个界面都有特定的布局和交互元素。
在启动界面,玩家可以选择开始游戏或退出游戏。点击开始游戏后,进入关卡选择界面,玩家在此选择游戏难度。
根据玩家选择的关卡难度,游戏进入相应的游戏界面,在游戏界面中,玩家可以与游戏元素进行交互,如点击游戏区域的元素添加到存储区域,点击 “Undo” 按钮撤销操作等。
3. 游戏逻辑实现
游戏元素生成与布局
根据关卡难度确定游戏元素的数量,随机生成游戏元素的数据,并通过随机洗牌和分割操作将数据整理成适合游戏网格布局的形式。
随机生成每个游戏元素图片在游戏界面中的位置,确保它们不重叠。
记录每个位置图片的层叠顺序,用于在绘制游戏界面时正确显示元素的覆盖关系。
游戏规则实现
当玩家点击游戏区域的元素时,判断点击位置对应的元素,并将其添加到存储区域。
检查存储区域中是否有三个相同的元素,如果有则消除这些元素,玩家获得分数,当分数超过设定值时,增加游戏元素的种类。
同时,游戏有时间限制,根据关卡难度计算剩余时间,当时间耗尽或者存储区域被填满时,游戏结束。
游戏过程中,记录玩家的操作历史,当玩家点击 “Undo” 按钮时,可以从历史记录中恢复上一步的游戏状态。
4. 游戏状态管理与结束处理
在游戏运行过程中,不断监测游戏的状态,包括时间、存储区域的填充情况等。
当游戏结束时(时间耗尽或者存储区域被填满),显示游戏失败界面,在该界面中显示玩家的游戏得分和最高得分。如果玩家在本次游戏中获得了新的最高分,则更新最高分记录。
子任务 | 借助何种AIGC技术 | 实现了什么功能 | 效果如何? |
---|---|---|---|
游戏逻辑开发 | GitHub Copilot、kimi | 辅助编写游戏循环、事件处理和图案匹配逻辑 | 显著提高了编码速度和代码质量,减少了编写样板代码的时间 |
图像资源生成 | 文生图工具(如 豆包 或 craiyon ) | 设计游戏图案和背景 | 提高了游戏的视觉吸引力,使游戏界面更加生动有趣 |
文档和注释编写 | kimi | 辅助编写项目文档和代码注释 | 提高了文档的质量和专业性,减少了语法和拼写错误 |
对AIGC的感受
优点:
学习与技能拓展方面
激发编程兴趣:对于计算机相关专业的大学生来说,像上述游戏代码这样的项目,如果结合 AIGC 技术,可以为他们提供新的学习视角。例如,AIGC 可以生成一些优化游戏性能的算法思路或者提供不同的设计模式建议,帮助学生更好地理解编程概念,激发他们深入探索编程领域的兴趣。
快速获取知识:在开发游戏的过程中,大学生可能会遇到各种问题,如复杂的图形处理、高效的事件处理机制等。AIGC 可以快速提供相关领域的知识和解决方案,减少他们在查找资料上花费的时间。比如,当学生想要优化游戏中图像加载和缩放的性能时,AIGC 可以提供一些基于常见游戏开发库的优化技巧和代码示例。
项目开发方面
创意启发与原型设计:在游戏设计中,AIGC 能够提供丰富的创意。例如,对于游戏的关卡设计、角色设定或者游戏机制,AIGC 可以根据一些简单的描述生成多种不同的设计方案。大学生可以利用这些方案快速构建游戏原型,然后在此基础上进行完善和创新。
辅助代码编写:从上述游戏代码可以看出,游戏开发涉及大量的代码编写工作。AIGC 可以辅助大学生完成一些重复性的编码任务,如生成一些基本的界面布局代码、简单的逻辑判断代码等。这样可以让学生将更多的精力集中在游戏的核心玩法和创意设计上。
缺点:
学习与成长方面
减少实践锻炼机会:在开发游戏的过程中,如果过度依赖 AIGC 生成的代码,大学生可能会错过一些重要的实践锻炼机会。例如,在实现游戏中的元素存储与消除逻辑时,手动编写代码的过程可以帮助学生深入理解数据结构和算法的应用。而直接使用 AIGC 生成的代码可能导致学生对这些关键知识点的理解不够深入。
阻碍独立思考能力培养:游戏开发是一个需要创新和独立思考的过程。如果学生总是依赖 AIGC 来提供解决方案,可能会形成思维惰性,影响他们独立解决问题的能力。比如,在设计游戏的特色功能时,如关卡难度选择机制,依赖 AIGC 可能会使学生难以深入思考如何根据玩家体验来进行独特的设计。
项目质量与原创性方面
代码质量问题:AIGC 生成的代码可能并不完全符合项目的实际需求,或者存在一些潜在的性能问题。例如,在游戏开发中,对于资源管理(如图片加载、音乐播放)部分,如果直接使用 AIGC 生成的代码,可能会因为没有充分考虑游戏的运行环境和硬件限制而导致资源浪费或者运行卡顿。
原创性担忧:在学术和竞赛环境中,游戏项目的原创性非常重要。如果使用 AIGC 生成的内容过多,可能会导致项目缺乏原创性,影响成绩或者竞赛结果。例如,在游戏的界面设计和核心玩法设计上,如果大部分创意都来自 AIGC,那么这个游戏项目可能会被认为缺乏独特性和创新性。
项目阶段 | 预计时长 | 实际用时 |
---|---|---|
项目分析,确定需求 | 1 | 1 |
构建原型模型 | 1 | 1 |
投入开发 | 12 | 3 |
调试 | 2 | 5 |
测试 | 1 | 6 |
总结 | 0.5 | 1 |
评价完成过程和最终结果
优点:利用AIGC很快就建立了大概所需的模型节省了很多时间,在测试方面经过自己的测试取得了成功
确定:在明确需求方面做错了,导致自己中间重弄了一次代码