结对编程作业

 

github地址:https://github.com/wyhsomecat/031804131-031804129

2.1原型设计

设计思路:

开始游戏,将页面分为3个部分上半区绘制重新开始按钮,显示步数并据此给出得分,右上角退出游戏。下半区左边是原图片的小图预览,右边是游戏界面,玩家通过点击图块实现移动拼图。

 

 原型设计

 

 mockplus

 

讨论图片

 

 

 遇到的困难及解决方法

  1. 之前对于原型设计没有接触过所以不知道怎么做,后来选择了一款比较容易上手的原型设计工具mockplus,设计页面时走极简风。
  2. 对网页项目的前后端没有充分了解,以至于在开发完一个基于tkinker库的独立python程序后发现没有办法直接“连接”到web端,忍痛放弃
  3. 在开赛前一天发现对题目有理解性错误(操作指空格移动,不是指其他图片向空格移动),被迫连夜修改代码,并导致AI留下小缺憾

2.2 ai与原型设计实现

代码实现思路

a.网络接口问题采用request库构建函数实现POST,使用POSTman工具实现GET

b.单机版:从库内直接随机读取图片,调整大小并切割后载入基于tkinker库的主界面

 

 

 

c.赛事比拼:解码并分割图片后比较切割图片与库内图片的异同,获得图片对应序列后送交AI分析

说明算法的关键与关键实现部分流程图

    图片华容道问题,从本质上讲是八数码问题的Python实现。我们采用A算法和A*算法,这是一种可容纳最优的启发式搜索算法 。构造最接近目标的真实代价,使A*算法拟合这一函数。

 

 

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

 a.获取赛题图片对应序列

# 创建字符串piclist,用来存储测试图像对应的位置序列
piclist = ''
# 创建两个元组,对应切割图像中的纯黑或纯白方块,备用
tup1 = (255, 255, 255)
tup2 = (0, 0, 0)
#设置一个boolean变量判断是否有纯黑方块
blackblock = False
for i in range(9):
    #读取切割测试图像后的小方块
    img = Image.open("aitest" + str(i) + ".jpg")
    imgstr = "aitest" + str(i) + ".jpg"
    clrs = img.getcolors()#img.getcolors方法会返回数个列表,每个列表里包含图像内某种颜色的像素点数量和RGB向量,分别以元组的方式储存于列表中

    if (len(clrs) != 1):#如果长度不为1,即不只返回了一个列表,即图像方块内有超过一种颜色(非纯黑或纯白)
        file_names = []
        #调用已经切割好的本地图片库
        for parent, dirnames, filenames in os.walk(os.getcwd()+'/charspec'):  # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
            file_names = filenames
        for k in range(315):
            #比较切割后的测试图像和本地图片库
            if (image_contrast(imgstr, os.getcwd()+'/charspec/' + file_names[k]) == 0):
                tempfn = file_names[k]
                if (len(tempfn) > 8):#根据图片名称长度进行分类
                    #获取picname,即测试图像对应本地图像的名称,如A _(2)
                    picname = tempfn[0:6]
                    #print(tempfn[0:6])
                    num = int(tempfn[6]) + 1
                    #由于图片库内切割图片都是按顺序排列的(从0到8),获得其名称后缀就是获得了切割图片在原图片内对应的位置
                    piclist = piclist + str(num)
                    # print(piclist)
                else:
                    # print(tempfn[0:2])
                    picname = tempfn[0:2]
                    # print(tempfn[2])
                    num = int(tempfn[2]) + 1
                    piclist = piclist + str(num)
            k = k + 1

    #如切割图像是纯白块,将其列表代号确定为0
    elif (clrs[0][1] == tup1):
        piclist = piclist + '0'
    #如切割图像是纯黑块,先将其列表代号表示为t
    elif (clrs[0][1] == tup2):
        piclist = piclist + 't'
        tmp = i
        blackblock = True
        # print('你这个黑块能把人烦死',tmp)
    i = i + 1

 b.调整图片大小、格式

def changeJpgToPng(w, h, path):
    # 修改图像大小
    image = Image.open(path)
    image = image.resize((w, h), Image.ANTIALIAS)

    # 将jpg转换为png
    png_name = str(path)[0:-len('.jpg')] + 'min.png'
    image.save(png_name)
    #print(png_name)
    return png_name

 我们使用的函数不支持读取JPG,在尝试修改第三方库文件后,我们最终增加了这段代码

性能分析与改进,并描述你改进的思路

 将A算法升级为A*算法,增加addOpen函数,用于将新的节点按照判定值(diff值)插入现有open表

 

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

 

贴出Github的代码签入记录,合理记录commit信息。

 

评价你的队友

ww嘤→somecat:非常优秀且有耐心

somecat→ww嘤:参与积极性高,有很有创新性的想法

结对作业的PSP和学习进度条

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

60

60

· Estimate

· 估计这个任务需要多少时间

60

60

Development

开发

900

1400

· Analysis

· 需求分析 (包括学习新技术)

150

460

· Design Spec

· 生成设计文档

60

60

· Design Review

· 设计复审

20

30

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

30

20

· Design

· 具体设计

60

60

· Coding

· 具体编码

100

300

· Code Review

· 代码复审

20

10

· Test

· 测试(自我测试,修改代码,提交修改)

20

20

Reporting

报告

60

60

· Test Report

· 测试报告

30

60

· Size Measurement

· 计算工作量

10

10

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

60

60

 

· 合计

1640

2180

 

第N周

新增代码(行)

累计代码(行)

累计学习耗时(小时)

重要成长

第1周

192

195

28

图像的分割处理,游戏的响应

第2周

495

687

56

Python解决8数码问题,深度优先算法,A*算法,

第3周

0

687

72

原型设计软件的使用,web前端学习(未使用)

第4周

140

827

80

学习JSON,对已有代码完善改进

未来提升:

将主程序升级成为一个带有开始界面、规则介绍、往次得分的程序(我们已经设计好了原型,见下)

 

 

 

posted @ 2020-10-19 22:47  159ggg  阅读(174)  评论(0编辑  收藏  举报