结对编程作业
2.0-链接及分工
2.0.1 博客链接
2.0.2 Github项目地址
2.0.3 具体分工
2.1-原型设计
2.1.1 结对作业的设计说明
我们此次原型设计是实现九宫格拼图游戏,我们需要实现以下几项功能:
·N Need(需求):
创建游戏账号、登录游戏账号、游戏创建、进行游戏、记录分数、成绩排名
·A Approach(做法):
利用原型设计工具实现进行原型设计
·具体介绍:
登录界面:
输入用户名->输入密码->点击立即登录
菜单选择界面:
可选择开始游戏、查看游戏排行榜,右上角可退出登录
游戏界面:
点击“帮助”按钮会提示游戏规则
点击“重新开始”会重新打乱九宫格
点击“更换图片”可以随机更换游戏图片
“步数”会记录当前移动步数
历史记录界面:
可以查看游戏好友排名及记录
2.1.2 原型开发工具
Axure Rp9
2.1.3 结对的过程
首先呢,没有大佬带我们(bushi)
其次呢,我们一直是很多作业搭档的秃头小姐妹,有一定的默契
最后呢,我们是舍友,方便讨论和搭伴熬夜
于是乎,就这样直接搭档成功啦
2.1.4 遇到的困难及解决方法
·困难1:
-困难描述:题目第一时间没能读懂
-解决尝试:反复读题,进行讨论
-是否解决:是
·困难2:
-困难描述:没有”原型设计“这一概念,不了解原型设计
-解决尝试:借助百度、Google,查阅博客等
是否解决:是
·困难3:
-困难描述:没有掌握的原型设计工具
-解决尝试:借助哔哩哔哩,博客等资源对Axure Rp9原型设计工具进行学习
是否解决:是
收获:
-通过AI设计了解到python子界面的制作,体验到亲手制作从游戏者到开发游戏的快乐
-了解了原型设计,学习了Axure Rp9原型设计工具的使用
-bilibili是自主学习的好帮手
2.2-AI与原型设计实现
2.2.1 代码实现思路
·网络接口的使用
工具使用:postman
具体步骤:将postman生成的code复制到代码中实现json请求以及json提交,获取图片、提交答案
·代码组织与内部实现设计(类图)
·说明算法的关键与关键实现部分流程图
1.Astar算法:基本思想:定义一个评价函数f,对当前的搜索状态进行评估,找出一个f值最小的结点来扩展
f(n)=g(n)+h(n)
g(n):当前结点距离初始结点的深度
h(n):估计值,此次算法采用的是曼哈顿距离,且当某一个结点的h=0时,达到最终状态- 算法流程图
·重要的代码片段及其解释
这张图展示的代码实现了如何进行强制交换以及在强制交换无解的情况下,进行一次用户交换,无论是用户交换或者强制交换,都把交换后的状态作为开始状态,重新进行Astar算法的计算
·性能分析及改进
1.起初我们用了DFS,但性能实在太差了
2.人工智能课上学了Astar算法,是解决这类八数码问题的好方法
总结:由此可见Astar算法对比有序搜索大大提升了性能
·描述你的改进思路
-因为DFS具有盲目搜索的缺点,会使得时间和步数等性能较差,采用启发式搜索Astar算法,可以有效解决这个问题,因为Astar算法是根据一定的规律搜索
·性能分析图和程序中消耗最大的函数
1.AI部分性能分析图
程序中消耗最大的函数是imread函数,图片匹配函数
2.原型设计实现性能分析图
- 项目部分单元测试代码,并说明测试的函数,构造测试数据的思路
·单元测试
单元测试主要测试了解八数码问题的A*算法的主函数,以及交换两张图片交换的函数
·原型设计实现思路
此次原型设计的实现是基于python中的tkinter库,设计流程:
重点代码及解释:
上图代码为设置“重新开始”按钮、“帮助”按钮、“更换图片”按钮、步数记录文本
上图代码为原型设计中算法部分:打乱一张完整图片(该图片已经在另一函数中完成九图切割以及匹配成相应数字)、设置一张白色图块、完成图块依据鼠标进行上下左右移动
上图为此次原型设计的创新点,即可以通过点击“更换图片”按钮实现图片的切换
2.2.2 Github的代码签入记录,合理记录commit信息
2.2.3 遇到的代码模块异常或结对困难及解决方法
问题描述
1.json请求出现远程服务器请求不到的问题
2.answer的输出不好解决,因为这个算法在计算过程中是一直拓展的,即当前使用的状态不一定是最终状态,而这些状态的白块的移动方向就不应该被记录
- 解决尝试
1.上网找了很多的博客才发现是HTTP版本问题,只要在头文件中添加以下代码即可
2.比较答案中前后两个状态的白块位置,通过x,y的值去判断白块的移动方向,这样就可以避免记录了没必要的状态
- 是否解决
以上问题均解决完成
有何收获
-最大的收获就是学会了搜索资料,以前不懂就是直接百度,但是后来发现直接用CSDN或者知乎搜索,可以得到更精准的答案,另外一点就是,要善于在评论中找答案,有时候有些博客讲的有些范,但底下评论却很做了很好的总结
-都学会了和队友搭档合作,懂得了分工合作,效率upupup!
2.2.4评价你的队友
值得学习的地方
自律和独立思考的能力,遇到不懂的代码要耐心的查找资料
需要改进的地方
可能就是代码能力吧,这方面感觉我两都需要加强!