软件工程课程第二次个人作业
这个作业属于哪个课程 | 软件工程2024 |
---|---|
这个作业要求在哪里 | 2024秋软件工程个人作业(第二次) |
这个作业的目标 | 完成游戏的基本功能和交互设计,熟练掌握AIGC工具 |
学号 | 102201426 |
一、项目展示
二、项目介绍
1.项目名称:羊了个羊(猫猫版)
2.界面设计
-
主菜单
-
模式选择界面
-
游戏界面
-
简单模式
-
困难模式
-
-
结束界面
-
游戏胜利
-
游戏失败
-
-
排行榜界面
3.游戏逻辑
玩家点击小猫(图片)后,小猫(图片)会移动到下面的猫窝(收集框)中,当有三只一样的小猫时,它们会消除
猫窝最多只能容纳五只小猫,如果超过猫窝的容纳量,游戏失败
如果能将所有的小猫都送回家,那么游戏胜利
提醒一下,不单单要注意猫窝的容量哦,如果在规定的时间里没有将所有的小猫送回家,游戏也会失败
我想你会注意到游戏时间剩下10s(困难模式:30s)时那血红的倒计时的
4.难度设计
- 简单模式,限时1分钟,将18只猫猫送回家
- 困难模式,限时2分钟,将36只猫猫送回家,猫猫们叠在一起打闹,只有将上层的猫猫先拿开,才能抓到下层的猫猫哦
5.特色功能
-
增加撤销操作
当玩家点击撤销后,上一次抓到的猫猫会从猫窝跑回原来的位置上(可爱的猫猫遇上了心软的神啊)-
撤销前
-
撤销后
-
-
实现分数系统与排行榜功能,记录玩家的最高分
玩家消除一只猫猫则分数加一,游戏结束后,玩家成绩会记录到排行榜中
分数越高排名越高哦
当困难模式和简单模式的分数一致时,困难模式排在简单模式的前面
-
再来一次
玩家结束一次游戏后,不必要返回主菜单重新进行模式选择,可以直接在结束界面选择再来一次
拉我起来,我还能再战!
三、测试
点击查看测试代码
import unittest
from your_game_module import * # 假设您的游戏代码在名为your_game_module.py的模块中
# 假设您已经有一些全局变量或函数来初始化游戏状态
# 比如:current_state, board1, board2, score, collection, leaderboard等
class TestGameFunctionality(unittest.TestCase):
def setUp(self):
# 在每个测试用例之前运行,用于设置测试环境
# 这里可以重置游戏状态、初始化变量等
global current_state, board1, board2, score, collection, leaderboard
current_state = GameState.START
board1 = [[None for _ in range(board_width)] for _ in range(board_height)] # 假设board_width和board_height已定义
board2 = [[[None for _ in range(board_width)] for _ in range(board_height)] for _ in range(2)]
score = 0
collection = []
leaderboard = []
def test_start_screen_navigation(self):
# 测试开始界面的导航
mouse_positions = [
(350, 225), # 选择模式
(350, 325), # 排行榜
(350, 425), # 退出游戏
]
expected_states = [GameState.SELECT_MODE, GameState.RANKING, GameState.START]
for pos, expected in zip(mouse_positions, expected_states):
pygame.mouse.set_pos(pos) # 模拟鼠标位置
pygame.event.post(pygame.event.Event(pygame.MOUSEBUTTONDOWN, {}))
pygame.event.get() # 清理事件队列
self.assertEqual(current_state, expected)
def test_game_mode_selection(self):
# 测试模式选择界面的操作
# 首先进入选择模式
pygame.mouse.set_pos((350, 225))
pygame.event.post(pygame.event.Event(pygame.MOUSEBUTTONDOWN, {}))
pygame.event.get()
# 选择简单模式
pygame.mouse.set_pos((350, 275))
pygame.event.post(pygame.event.Event(pygame.MOUSEBUTTONDOWN, {}))
pygame.event.get()
self.assertEqual(current_state, GameState.EASY_MODE)
# 可以在这里继续添加困难模式的测试
def test_game_play_logic(self):
# 这个测试可能更复杂,需要模拟游戏过程中的操作
# 这里仅展示一个简化的例子
pass
def test_undo_feature(self):
# 测试撤销功能
# 假设在某个游戏模式下,玩家进行了一些操作,然后撤销
pass
def test_score_and_leaderboard(self):
# 测试计分和排行榜功能
# 可以添加代码来模拟游戏胜利,并检查分数是否正确添加到排行榜
pass
def tearDown(self):
# 在每个测试用例之后运行,用于清理测试环境
pass
if __name__ == '__main__':
unittest.main()
测试结果
由于Pygame事件系统不直接支持在单元测试中模拟鼠标和键盘事件,上述测试中的pygame.mouse.set_pos()和pygame.event.post()只是示意性的,实际上在单元测试中没有发挥测试的作用。
四、AIGC表格
AIGC表格任务:小游戏分解子任务与AIGC应用分析
1. 小游戏可以分解成的几个小任务
子任务 | 借助何种AIGC技术,实现了什么功能 | 效果如何 |
---|---|---|
游戏初始化 | Cursor,设置屏幕尺寸、加载资源文件(图片、字体等)、初始化游戏状态等 | 很方便 |
用户界面绘制 | 文心一言,绘制开始界面、模式选择界面、排行榜界面、游戏界面、游戏结束界面 | 很方便 |
游戏逻辑处理 | 文心一言,鼠标点击事件处理、游戏模式选择、游戏难度设定、游戏进行逻辑等 | 很麻烦,ai不能很好的理解我的意思 |
排行榜处理 | 通义千问,读取排行榜数据、清空排行榜、保存排行榜数据等 | 有点麻烦,ai修正不了程序的bug |
游戏板绘制 | 文心一言,根据游戏难度绘制简单模式或困难模式的游戏板 | 有点麻烦 |
收集框处理 | 通义千问,管理收集框中的图片,包括添加、移除、检查三张相同图片等 | 很方便 |
游戏结束判定与结果展示 | 文心一言,判定游戏是否结束(如所有图片消除、时间耗尽等),展示游戏结果 | 有点麻烦 ,需要对代码逻辑进行调整 |
2. 预估哪些子任务可以利用AIGC
序号 | 任务名称 | 预估AIGC适用性 |
---|---|---|
1 | 游戏初始化 | 低(需要具体参数) |
2 | 用户界面绘制 | 中(模板生成) |
3 | 游戏逻辑处理 | 低(复杂逻辑) |
4 | 排行榜处理 | 中(数据处理) |
5 | 游戏板绘制 | 高(图形生成) |
6 | 收集框处理 | 中(逻辑简化) |
7 | 游戏结束判定与结果展示 | 中(结果展示) |
3. 实际中哪些部分利用了AIGC
- 用户界面绘制:使用AIGC技术根据提供的模板或设计自动生成用户界面元素(如按钮、标题等)的代码,提高开发效率
- 游戏板绘制:对于游戏板的布局和图案的生成,可以利用AIGC的图形生成能力,根据规则自动生成不同难度的游戏板
- 排行榜处理:在排行榜数据的读取、处理和保存过程中,可以利用AIGC进行数据处理模板的生成,简化代码编写
4. AIGC技术的优缺点,适合用在哪些方面,不适合实现哪些功能?
优点:
- 提高效率:自动化生成大量重复性代码,减少人工编写时间。
- 创新设计:通过算法生成新的图形、界面元素,激发设计灵感。
- 快速原型开发:快速搭建游戏或应用的基本框架,方便后续迭代。
缺点:
- 复杂逻辑难以处理:对于需要复杂逻辑判断和处理的任务,AIGC的生成效果可能不理想。
- 高度定制化需求:对于需要高度定制化的设计或功能,AIGC可能无法完全满足要求。
- 依赖外部工具:AIGC通常依赖于特定的工具或平台,学习曲线可能较高。
适合用在哪些方面:
- 界面设计:自动生成界面元素和布局。
- 数据处理:自动生成数据处理模板和逻辑。
- 原型开发:快速搭建应用或游戏的原型。
不适合实现哪些功能:
- 复杂逻辑:如游戏的核心玩法、AI策略等。
- 高度定制化需求:如特定风格的艺术设计、复杂的用户交互流程等。
- 需要人工审核的内容:如游戏剧情、文案等,需要人类进行创意和审核。
五、PSP表格
项目名称:羊了个羊(猫猫版)小游戏开发
角色:开发者
PSP阶段 | 任务描述 | 预估耗时(小时) | 实际耗时(小时) |
---|---|---|---|
规划 | 需求分析,设计游戏结构和逻辑 | 8 | 2 |
确定使用的库和工具(如pygame) | 2 | 2 | |
设计 | 设计游戏界面和用户交互方式 | 4 | 3 |
设计游戏关卡和难度等级 | 6 | 1 | |
设计排行榜和数据存储方式 | 2 | 3 | |
编码 | 初始化游戏环境(包括屏幕、字体等) | 3 | 4 |
实现游戏逻辑(简单模式和困难模式) | 16 | 15 | |
实现游戏界面切换(如开始界面、排行榜) | 6 | 2 | |
测试 | 功能测试(如游戏流程、难度变化) | 8 | 1 |
用户体验测试(界面友好性、交互便捷性) | 4 | 1 | |
维护 | 修正发现的bug和接收用户反馈进行迭代 | -(持续) |
六、个人评价
本次小游戏的开发过程有些艰辛,对python语言和pygame库不是很了解,一些用法不熟悉,但还好,ai能及时的帮助我。我利用ai较快的搭建了我的游戏的整个界面及其切换,但是,完全利用ai来写也很难,ai往往不能在我第一次描述时就给我想要的代码,特别是一些复杂逻辑的游戏代码,需要我对代码进行反复调整,来达到我想要的效果。我在这个流程中对python语言有了一定了解,但我还需加强对高级语言的学习。这个小游戏还有很多可以进一步丰富的地方,也还存在一些我无从下手的bug,我还需要学习。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了