结对编程作业
具体分工:
姓名 | 分工 |
---|---|
林怡琳 | 原型设计及实现,博客撰写 |
林逸丽 | AI实现,博客撰写 |
2.1 - 原型设计
[2.1.1]设计说明:
原型具备一个开始界面,点击开始游戏按钮进入游戏界面。
进入游戏后底下导航栏分为游戏界面、自动界面和历史界面三块。
游戏界面可以进行拼图游戏,有重玩游戏和开始新游戏功能。重玩游戏功能即重新开始当前游戏,开始新游戏即更换底图并打乱。
自动界面是对当前拼图游戏的自动求解过程,点击开始即可进行拼图的自动还原。
历史界面是游戏记录榜,可在此查看游戏的历史记录。
图1:开始游戏界面
图2、图3、图4:游戏界面游戏过程展示
图5:点击新游戏更换底图并打乱
图6:自动界面
图7:历史界面
[2.1.2]原型模型设计工具实现:
墨刀
[2.1.3]结对的过程:
就近选择跟舍友一起组队
[2.1.4]遇到的困难及解决方法:
- 困难描述
1.刚开始采用axure工具,无从下手,查询了很多教程博客,做得又慢又难看。改用墨刀之后,做的原型很僵硬,尽管用了一个色系,但背景太过繁复,看起来就像PPT一样。
2.原型设计实现过程中,借鉴网上的代码,但跟自己的需求不大一样。
- 解决尝试
1.尝试多种背景图,尽量做到简单干净。
2.不断修改代码,通过查询资料依次将需要的功能加上去。
- 是否解决
是
- 有何收获
1、原型设计需要多去看看别人的模板,对原型设计的实现与美观程度有很大帮助。
2、实现过程中,因为借鉴的是别人的代码,增加或修改功能的时候老是出现很多bug,在修改的过程中我的自学能力增强了不少。
2.2 - AI与原型设计实现
[2.2.1]代码实现思路:
网络接口的使用
postman工具:
-
代码组织与内部实现设计(类图)
1.接口 2.900×900图片切割成9张300×300图片PIL)3.图像二值化 4.图像识别对比(opencv numpy)5.得出顺序 6. pintu-solver:拼图求解器 -
说明算法的关键与关键实现部分流程图
先还原左上角,再还原最下方两行,再还原最右方两列,最后还原右下角小正方形
运用了bfs,但不是最优算法。
参考https://www.cnblogs.com/weiyinfu/p/5911340.html -
贴出你认为重要的/有价值的代码片段,并解释
解释已在图中注释出:
使用PIL库中的crop方法将900×900图片切割成9张300×300图片
运用numpy的matrix将图片转为矩阵
运用bfs寻找给定源点和目标源点间的一条路径 -
性能分析与改进
状态搜索,首先想到dfs和bfs还有A*等,然后发现没有加限制条件,过于粗糙,且可能会陷入死循环。 -
描述你改进的思路
1.把问题分为三部分:左上角xsize-2*ysize-2的拼图,左边的2列,下面的两行
2.剪枝优化。在求解给定源点和目标源点间的一条路径时不能经过固定点,不能经过已经排好位置的点
3.根据操作对拼图逆序数的影响,得出:拼图守恒量的值与目标状态相同=>拼图有解 -
展示性能分析图和程序中消耗最大的函数
- 展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路
测试数据来自本次结对编程要求的接口。 - [2.2.2]贴出Github的代码签入记录,合理记录commit信息
[2.2.3]遇到的代码模块异常或结对困难及解决方法。
-
问题描述
1.问题理解错误,接口接收的图片已经是打乱并贴合的。
2.没有明确什么时间要做完什么,进度缓慢。
3.AI那块:刚开始对图片华容道怎么借鉴数字华容道没有思路。例如怎么把乱序拼接好的9图变成序列。怎么识别出原来是那张图以便于找对应的状态。
-
解决尝试
1.理解不清的话,可以询问别人,不要硬着头皮走歪路。
2.互相沟通,一起解决问题
3.在询问了一些大佬+不断百度后,渐渐有了一套思路,把问题求解拆成1.接口 2.900×900图片切割成9张300×300图片(PIL)3.图像二值化 4.图像识别对比(opencv numpy)5.得出顺序 6. pintu-solver:拼图求解器,然后开始一步步做。
-
是否解决
是
-
有何收获
1.明确要做什么,一开始把问题理解错了。
2.不要一条路走到黑,及时反思,是不是哪里已经出错。
3.提升效率,没你想得那么难。不要在产生挫败感后就开始畏难,及时疏通情绪,做好自我规划。
[2.2.4]评价你的队友。
-
值得学习的地方
做事认真,沉稳,效率高,审美很好。
-
需要改进的地方
初次结对规划不佳,队伍中应在最初确定一人敲定事情和安排进度,需要更多的沟通和例如在固定的时间碰头等。
[2.2.5]提供此次结对作业的PSP和学习进度条
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | 0 | 0 | 8 | 8 | 回顾python语言 |
2 | 50 | 50 | 7 | 15 | AI算法对比 |
3 | 400 | 450 | 20 | 35 | 图片华容道步骤思路 |
4 | 100 | 550 | 20 | 55 | 图片华容道具体书写 |
PSP表格:
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
· Planning | · 计划 | 20 | 20 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 30 |
· Development | · 开发 | 110 | 130 |
· Analysis | · 需求分析 (包括学习新技术) | 1200 | 1500 |
· Design Spec | · 生成设计文档 | 60 | 60 |
· Design Review | · 设计复审 | 30 | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 50 | 50 |
· Design | · 具体设计 | 300 | 320 |
· Coding | · 具体编码 | 360 | 400 |
· Code Review | · 代码复审 | 50 | 80 |
· Test | · 测试(自我测试,修改代码,提交修改 | 150 | 160 |
· Reporting | · 报告 | 30 | 30 |
· Test Repor | · 测试报告 | 30 | 30 |
· Size Measurement | · 计算工作量 | 20 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 70 | 70 |
· 合计 | 2510 | 2930 |