zoukankan      html  css  js  c++  java
  • 第一次结对编程作业

    自己的博客链接:梁瑾

    队友的博客链接:吴奕含

    Github项目地址:https://github.com/Molly-Woo/jinnian_Molly

    具体分工

    A*算法搜索路径实现 图片裁剪 原型设计 原型设计实现 博客撰写 GitHub
    吴奕含
    梁瑾

    原型设计

    结对作业的设计说明

    设计手稿

    1.登录页面:刚开始的想法是做一个小程序,通过微信绑定号码登录

    2.主页:小程序的主页包括返回功能、计时功能、开始按钮和九宫格

    3.游戏进行:点击主页的开始按钮后跳转到游戏进行的页面

    4.游戏结束:该页面显示本次成绩和往次最佳成绩,还包括“再来一局”的按钮

    定稿

    1.游戏界面:增加了统计步数的功能,对背景图等进行了更换,提升了美观性

    原型模型设计工具

    墨刀:一款在线办公协作平台,集原型设计,线上版sketch设计师工具、流程图、思维导图为一体

    描述结对的过程,提供非摆拍的两人在讨论、细化和使用专用原型模型工具时的结对照片。

    两个人以前就经常合作,所以遇到结对作业的时候一拍即合,一句“组队吗?”就跟着跑了!

    https://images.cnblogs.com/cnblogs_com/jinnian1120/1843125/o_2010191431031.jpg
    https://images.cnblogs.com/cnblogs_com/jinnian1120/1843125/o_2010191431082.jpg

    遇到的困难及解决方法

    困难描述

    对于小程序的风格和色系难以抉择

    解决尝试

    检索各种小程序和小游戏的图片,并观察和对比这些界面的风格和色系

    是否解决

    解决了,最终选择了黑白灰这种风格,简约而高级~

    有何收获

    为下一步团队作业的小程序设计打下了基础,提升了自己的审美,增进了友谊~

    AI与原型设计实现

    代码实现思路:

    A*算法

    一、把起点加入 open list 。
    二、重复如下过程:

    • 遍历 open list ,查找 F 值最小的节点,把它作为当前要处理的节点。
    • 把这个节点移到 close list 。
    • 对于当前方格的 8 个相邻方格的每一个方格:如果它是不可抵达的或者它在 close list 中,忽略它。否则,做如下操作;如果它不在 open list 中,把它加入 open list ,并且把当前方格设置为它的父亲,记录该方格的F,G和H值;如果它已经在 open list 中,检查这条路径 ( 即经由当前方格到达它那里 ) 是否更好,用 G 值作参考。更小的 G 值表示这是更好的路径。如果是这样,把它的父亲设置为当前方格,并重新计算它的 G 和 F 值。如果你的 open list 是按 F 值排序的话,改变后你可能需要重新排序。
    • 停止,当你把终点加入到了 open list 中,此时路径已经找到了,或者查找终点失败,并且 open list 是空的,此时没有路径。

    三、保存路径。从终点开始,每个方格沿着父节点移动直至起点,这就是要寻找的路径。

    网络接口的使用

    python中接受和发送json数据真的非常方便!

    def getpicture():
        url = "http://47.102.118.1:8089/api/problem?stuid=031802230"# 发送get请求
        r = requests.get(url)# 获取返回的json数据
        r = json.loads(r)
        return r
    
    def sendpicture(thepath , theswap , theuuid) :
        url = "http://47.102.118.1:8089/api/answer"
    
        answer = {}
        answer["operations"] = thepath
        answer["swap"] = theswap
        print (theswap)
        if theswap[0] == theswap[1] and theswap[0] == 0 :
            answer["swap"] = []
        data = {}
        data["uuid"] = theuuid
        data["answer"] = answer
        #print(json.dumps(data) )
        res = requests.post(url = url , json = data )#发送post请求
        print(res.text)
    

    代码组织与内部实现设计(类图)


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

    def A_start(step,a,b,start, end, distance_fn, generate_child_fn, time_limit=10):
        '''
        A*算法
        :param start: 起始状态
        :param end: 终止状态
        :param distance_fn: 距离函数,可以使用自定义的
        :param generate_child_fn: 产生孩子节点的函数
        :param time_limit: 时间限制,默认10秒
        :return: None
        '''
        OPEN = []
        root = State(0, 0, start, hash(str(BLOCK)), None)  # 根节点
        end_state = State(0, 0, end, hash(str(GOAL)), None)  # 最后的节点
    
        OPEN.append(root)
        heapq.heapify(OPEN)
    
        node_hash_set = set()  # 存储节点的哈希值
        node_hash_set.add(root.hash_value)
        #start_time = datetime.datetime.now()
        while len(OPEN) != 0:
            top = heapq.heappop(OPEN)
            if top == end_state:  # 结束后直接输出路径
                return print_path(top,step,a,b)
            # 产生孩子节点,孩子节点加入OPEN表
            generate_child_fn(cur_node=top, end_node=end_state, hash_set=node_hash_set,
                              open_table=OPEN, dis_fn=distance_fn)
            '''
            cur_time = datetime.datetime.now()
            # 超时处理
            if (cur_time - start_time).seconds > time_limit:
                print("Time running out, break !")
                print("Number of nodes:", SUM_NODE_NUM)
                return -1
            '''
        '''
        print("No road !")  # 没有路径
        '''
        return -1
    

    性能分析与改进

    描述你改进的思路

    基本符合预期

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

    时间方面

    内存方面


    单元测试

    测试代码

    import unittest
    class MyTestCase(unittest.TestCase):
        def test_cut(self):
            image = Image.open('a.jpg')
            image_list = f_cut.cut_image(image)
            print("图片切割成功")
            index = 0
            for image in image_list:
                image.save(str(index) + '.png', 'PNG')
                index += 1
                print("第" + str(index) + "张图片保存成功")
    
        @staticmethod
        def test_checkPicture():
            for i in x.keys():
                if x[i] != '':
                    ans = f_checkPicture.image_contrast(x['00.png'], x[i])
                    print('样本:%s,误差率为:%.2f' % (i, ans))
    
        def test_eight(self):
            BLOCK = [[0, 5, 1], [9, 3, 6], [2, 4, 8]]
            f_eight.start(BLOCK, 8, 6, 3)  # step=2,a=2,b=3
    
    if __name__ == '__main__':
        unittest.main()
    

    测试结果

    Github签入记录

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

    问题描述

    • 一开始给出的图片无解的情况没有考虑到
    • 不知道给出的强制交换编号是0开始还是1开始
    • 小程序审核困难,可能无法上线

    解决尝试

    • 读入时开始自由交换
    • 问测试组
    • 小程序采用了体验版

    是否解决

    解决!

    有何收获

    感谢测试组!

    评价你的队友

    值得学习的地方
    耐心细致,搞得定种种bug
    需要改进的地方
    缺乏创新能力

    PSP表格

    PSP2.1 Personal Software Process Stages 预计耗时(分钟) 实际耗时(分钟)
    Planning 计划 60 120
    · Estimate · 估计这个任务需要多少时间 60 120
    Development 开发 2590 3270
    · Analysis · 需求分析 (包括学习新技术) 500 550
    · Design Spec · 生成设计文档 300 270
    · Design Review · 设计复审 200 250
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 60 40
    · Design · 具体设计 200 180
    · Coding · 具体编码 1000 1200
    · Code Review · 代码复审 30 60
    · Test · 测试(自我测试,修改代码,提交修改) 300 720
    Reporting 报告 210 120
    · Test Repor · 测试报告 120 60
    · Size Measurement · 计算工作量 30 30
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 30
    · 合计 2860 3510

    学习进度条

    第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
    1 668 668 5 5 了解了八数码问题的几种解法
    2 944 1612 27 32 在原有的八数码问题求解上增加了其他功能,熟练了Python语言的特性
    3 443 2055 23 55 了解了几种原型设计工具,初步学习并掌握了墨刀的使用
    4 0 2055 9 64 熟练了GitHub的使用方法
  • 相关阅读:
    Code First Migrations更新数据库结构(数据迁移) 【转】
    Lambda表达式详解【转】
    @Html.Raw用法
    ASP.NET MVC文件上传【转】
    SQL Server附加数据库拒绝访问错误解决方法
    window.location.href的用法
    vs2013中将复制过来的文件或文件夹显示到解决方案管理
    Expression<Func<TObject, bool>>与Func<TObject, bool>的区别
    VS中的一些标记
    ob_get_contents()
  • 原文地址:https://www.cnblogs.com/jinnian1120/p/13843396.html
Copyright © 2011-2022 走看看