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

    博客及GitHub地址

    我的博客链接:

    队友的博客链接:https://www.cnblogs.com/jinnian1120/p/13843396.html

    Github项目地址:请指教

    具体分工

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

    原型设计

    结对作业的设计说明

    设计手稿

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

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

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

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

    定稿

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

    原型模型设计工具

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

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

    在这里

    还有一张

    遇到的困难及解决方法

    困难描述

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

    解决尝试

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

    是否解决

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

    有何收获

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

    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 115 115 3 3 学习了postman的使用方式,实现了在python中读取和提交json数据
    2 45 160 4 7 学习了图片的切割和保存以及相关处理方法,并开始了解小程序的编写
    3 638 798 14 21 学习了小程序的编写方式,并成功实现游戏主界面
    4 503 1301 12 33 学习了python的性能测试方式,实现小程序保存历史记录、计时等多种功能
  • 相关阅读:
    对象
    语句
    表达式和运算符
    类型、值和变量
    词法结构
    javac命令详解(下)
    javac命令详解(上)
    jar 查找多jar包中类的办法
    find -exec
    java编译相关问题总结
  • 原文地址:https://www.cnblogs.com/molly-woo/p/13843336.html
Copyright © 2011-2022 走看看