结对编程作业

自己和队友的博客链接

刘惟凝:https://www.cnblogs.com/liu-weining/p/13843464.html

赖彪:https://www.cnblogs.com/lbiao273/p/13837834.html

Github项目地址

https://github.com/lwnlwn123/lwn1

具体分工

学号 姓名 博客链接 Github 具体分工
031802610 赖彪 博客链接 Github 原型设计80%,AI实现20%
031802621 刘惟凝 博客链接 https://github.com/lwnlwn123/lwn1 原型设计20%,AI实现80%

1.1 - 原型设计

[1.1.1]此次结对作业的设计说明:

游戏的开始界面:

点击设置再点击开始游戏即可进入图片选择界面。

选好图片后按确认按钮就可进入游戏界面,通过键盘上的wasd或者鼠标控制小白块的移动,实现图片的复原。点击再玩一次可以将九宫格恢复至初始状态。

如果将九宫格恢复至有序状态,则显示挑战成功。

界面上方显示步数和用时,挑战成功后结果会记录到排行榜中。

[1.1.2]原型模型设计工具:

Spyder

[1.1.3]描述结对的过程:

两个人都是一个小组里面的,队友有基础的Python编程能力,自己则是从0开始学习Python,两个人相关知识都比较薄弱,本着共同学习共同进步的原则组成了一队。

[1.1.4]遇到的困难及解决方法:

困难挺多的,主要是两个人最开始什么都不懂,每一个功能的实现都要查找大量资料或者寻求大佬的解答,虽然还有一些想做的东西没能做出来,但最终还是实现了基本的功能。这次作业相当于边做边学习新语言和它各种库的用法,Python对于初学者还是比较友好的,库、学习资料什么的也比较多,只能说只有亲自动手尝试了才能有进步吧,这也是这门课的目的了,实践中学习,很多东西书上是没有的,不过这次的AI实现也让我意识到了算法的重要性。

1.2 - AI与原型设计实现

[1.2.1]代码实现思路:

网络接口的使用:
python的requests库
代码组织与内部实现设计:
主要功能是用函数封装的,
说明算法的关键与关键实现部分流程图:

贴出你认为重要的/有价值的代码片段,并解释:

#图片匹配函数,返回的result值越小,图片越相似,若resul=0,则两张图完全一样
from PIL import Image
import math
import operator
from functools import reduce

def image_contrast(img1,img2):

    image1=Image.open(img1)
    image2=Image.open(img2)

    h1=image1.histogram()
    h2=image2.histogram()

    result=math.sqrt(reduce(operator.add,list(map(lambda a,b:(a-b)**2,h1,h2)))/len(h1))
    return result
#通过键盘控制图片移动的函数,sq用于图片的绘制,sqqq用于胜利的判定
def keyboard(event):
    global step,cv,mark_col,mark_row,operates
    if event.keysym=="w" or event.keysym=="Up":
        if mark_row!=0:
            temp=sq[mark_row-1][mark_col]
            sq[mark_row-1][mark_col]=sq[mark_row][mark_col]
            sq[mark_row][mark_col]=temp
            temp2=sqqq[3*(mark_row-1)+mark_col]
            sqqq[3*(mark_row-1)+mark_col]=sqqq[3*(mark_row)+mark_col]
            sqqq[3*(mark_row)+mark_col]=temp2
            mark_row-=1
            operates+="w"
            step+=1
            print(sqqq)
            print(operates)
    elif event.keysym=="a" or event.keysym=="Left":
        if mark_col!=0:
            temp=sq[mark_row][mark_col-1]
            sq[mark_row][mark_col-1]=sq[mark_row][mark_col]
            sq[mark_row][mark_col]=temp
            temp2=sqqq[3*(mark_row)+mark_col-1]
            sqqq[3*(mark_row)+mark_col-1]=sqqq[3*(mark_row)+mark_col]
            sqqq[3*(mark_row)+mark_col]=temp2
            mark_col-=1
            operates+="a"
            step+=1
            print(sqqq)
            print(operates)
    elif event.keysym=="s" or event.keysym=="Down":
        if mark_row!=2:
            temp=sq[mark_row+1][mark_col]
            sq[mark_row+1][mark_col]=sq[mark_row][mark_col]
            sq[mark_row][mark_col]=temp
            temp2=sqqq[3*(mark_row+1)+mark_col]
            sqqq[3*(mark_row+1)+mark_col]=sqqq[3*(mark_row)+mark_col]
            sqqq[3*(mark_row)+mark_col]=temp2
            mark_row+=1
            operates+="s"
            step+=1
            print(sqqq)
            print(operates)
    elif event.keysym=="d" or event.keysym=="Right":
        if mark_col!=2:
            temp=sq[mark_row][mark_col+1]
            sq[mark_row][mark_col+1]=sq[mark_row][mark_col]
            sq[mark_row][mark_col]=temp
            temp2=sqqq[3*(mark_row)+mark_col+1]
            sqqq[3*(mark_row)+mark_col+1]=sqqq[3*(mark_row)+mark_col]
            sqqq[3*(mark_row)+mark_col]=temp2
            mark_col+=1
            operates+="d"
            step+=1
            print(sqqq)
            print(operates)
    label_step["text"]=str(step)
    cv.delete('all')
    draw_image(cv)

展示性能分析图和程序中消耗最大的函数:
游戏:

AI:

[1.2.2]贴出Github的代码签入记录,合理记录commit信息。(2分)

none

[1.2.3]遇到的代码模块异常或结对困难及解决方法。

结对过程中感觉就是交流的不够多,导致两个人合作没有达到1+1>2的效果,暂时没有好的解决办法,只能说还要将强沟通。

[1.2.4]评价你的队友。

值得学习的地方:

发现问题快,善于专研难题

需要改进的地方:

语言交流不足

[1.2.5]提供此次结对作业的PSP和学习进度条(每周追加)

PSP2.1 Personal Software
Process Stages
预估耗时
(分钟)
实际耗时
(分钟)
Planning 计划
· Estimate · 估计这个任务需要多少
时间
30 30
Development 开发
· Analysis · 需求分析 (包括学习新技
术)
900 1380
· Design Spec · 生成设计文档 20 40
· Design Review · 设计复审 20 30
· Coding Standard · 代码规范 (为目前的开发
制定合适的规范)
20 30
· Design · 具体设计 200 230
· Coding · 具体编码 600 750
· Code Review · 代码复审 60 50
· Test · 测试(自我测试,修改
代码,提交修改)
100 120
Reporting 报告
· Test Repor · 测试报告 20 20
· Size Measurement · 计算工作量 20 15
· Postmortem & Process
Improvement Plan
· 事后总结, 并提出过程改
进计划
20 30
Total 合计 1980 2725
第N周 新增代码
(行)
累计代码
(行)
本周学习耗时
(小时)
累计学习耗时
(小时)
重要成长
1 68 68 7 7 Python、Pillow
2 89 157 5 12 Request、GUI
3 59 216 5 17 -
4 72 288 6 23 BFS相关
posted @ 2020-10-19 22:47  lwn_user  阅读(133)  评论(0编辑  收藏  举报
levels of contents