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

    结对同学博客链接
    本作业博客链接
    Github项目地址
    UI视频演示

    具体分工

    • 王玥:前端(UI)和部分博客
    • 马丽华:算法(AI)和部分博客

    PSP表格

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

    解题思路描述与设计实现说明

    • 网络接口的使用
      前端

      后端
    url = 'https://api.shisanshui.rtxux.xyz/auth/login'
    data = {
      "username": "031702504",
      "password": "123"
    }
    r = requests.post(url,json=data)
    print(r)
    result1 = r.json()
    print(result1)
    token = result1['data']['token']
    
    headers = {'x-auth-token': token}
    url2='https://api.shisanshui.rtxux.xyz/game/open'
    r2=requests.post(url2, headers=headers)
    result2=r2.json()
    print(result2)
    
    id = str(result2["data"]["id"])
    print(id)
    data = {
      "id": id,
      "card": finalCardstr
    }
    print(data)
    url3='https://api.shisanshui.rtxux.xyz/game/submit'
    r3=requests.post(url3,json=data, headers=headers)
    result3 = r3.json()
    print(result3)
    
    • 代码组织与内部实现设计(类图)
    类名 函数名 功能
    Card getValue_Qiandun(Cardlist=[]) 获取前墩权值
    - getValue_Zhongdun(Cardlist=[]) 获取中墩权值
    - getValue_houdun(Cardlist=[]) 获取后墩权值
    - calculateSub(Cardlist1=[], Cardlist2=[]) 差集运算
    - findBiggestCard(Cardslist=[]) 找到最大牌值
    - getCardlist(json_data) 获取牌
    - cardsCombination(Cardlist=[]) 牌型的组合
    - judge(Cardlist=[]) 判断牌型
    - compare(Cardlist1=[], Cardlist2=[]) 比较大小
    • 算法的关键与流程图
      • 算法的关键在于怎样找出权值最大的牌型并放在合适的墩位
      • 大致流程与总体框架

    关键代码解释

    • 部分代码
      • 获取权值
    def getValue_Houdun(Cardlist=[]):
        value = 0  # 权值
        flag = Judge(Cardlist)
        if flag == 9:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Tonghuashun_Value_3[number]
        elif flag == 8:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Zhadan_Value_3[number]
        elif flag == 7:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Hulu_Value_3[number]
        elif flag == 6:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Tonghua_Value_3[number]
        elif flag == 5:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Shunzi_Value_3[number]
        elif flag == 4:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Santiao_Value_3[number]
        elif flag == 3:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Liandui_Value_3[number]
        elif flag == 2:
            Cardlist.sort()
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Erdui_Value_3[number]
        elif flag == 1:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Duizi_Value_3[number]
        else:
            print("error")
        return value
    
    
    # 获取中墩牌的权值
    def getValue_Zhongdun(Cardlist=[]):
        value = 0  # 权值
        flag = Judge(Cardlist)
        if flag == 9:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Tonghuashun_Value_2[number]
        elif flag == 8:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Zhadan_Value_2[number]
        elif flag == 7:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Hulu_Value_2[number]
        elif flag == 6:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Tonghua_Value_2[number]
        elif flag == 5:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Shunzi_Value_2[number]
        elif flag == 4:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Santiao_Value_2[number]
        elif flag == 3:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Liandui_Value_2[number]
        elif flag == 2:
            Cardlist.sort()
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Erdui_Value_2[number]
        elif flag == 1:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Duizi_Value_2[number]
        elif flag == 0:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Sanpai_Value_2[number]
        else:
            print("error")
        return value
    
    
    def getValue_Qiandun(Cardlist=[]):
        value = 0  # 权值
        if len(Cardlist) == 1:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Sanpai_Value_1[number]
        elif len(Cardlist) == 2:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Duizi_Value_1[number]
        elif len(Cardlist) == 3:
            temp_card = FindBiggestCard(Cardlist)
            number = temp_card[0] - 2
            value = Santiao_Value_1[number]
        else:
            print("error")
        return value
    
    • 注意"J"、"Q"、"K"、"A"的大小

    性能分析与改进

    改进思路

    前端

    • 一开始是各个页面都写一遍各个模块,后来发现有部分模块是重复的不需要写太多次,便把重复部分写入CSS文件,再将一些相关页面引入CSS文件从而起到模板的作用。
      后端
    • 如果后墩存在情况太多(如同花),就先找中墩的情况,然后回过来找剩余手牌中是否有比中墩大的后墩,可降低程序的循环消耗。
      -判断牌型的时候把时间的因素也考虑进去,在追求正确结果的基础上,尽量简化代码,消除不必要的循环的部分,将代码向时间方向进行改进。

    性能分析图与消耗最大的函数

    • 消耗最大的函数是PostCards(data)

    单元测试

    部分单元测试代码

    def cardsCombination(Cardlist=[]):
        temp_Cardlist = list.copy(Cardlist)
        AllCardsCombination = []
        temp_list = Common.Tonghuashun(temp_Cardlist)
        if temp_list != []:
            for item in temp_list:
                AllCardsCombination.append(item)
        temp_list = Common.Zhadan(temp_Cardlist)
        if temp_list != []:
            for item in temp_list:
                AllCardsCombination.append(item)
        temp_list = Common.Hulu(temp_Cardlist)
        if temp_list != []:
            for item in temp_list:
                AllCardsCombination.append(item)
        temp_list = Common.Tonghua(temp_Cardlist)
        if temp_list != []:
            for item in temp_list:
                AllCardsCombination.append(item)
        temp_list = Common.Shunzi(temp_Cardlist)
        if temp_list != []:
            for item in temp_list:
                AllCardsCombination.append(item)
        temp_list = Common.Santiao(temp_Cardlist)
        if temp_list != []:
            for item in temp_list:
                AllCardsCombination.append(item)
        temp_list = Common.Liandui(temp_Cardlist)
        if temp_list != []:
            for item in temp_list:
                AllCardsCombination.append(item)
        temp_list = Common.Erdui(temp_Cardlist)
        if temp_list != []:
            for item in temp_list:
                AllCardsCombination.append(item)
        temp_list = Common.Duizi(temp_Cardlist)
        if temp_list != []:
            for item in temp_list:
                AllCardsCombination.append(item)
        return AllCardsCombination
    
    • 对牌进行组合
    def CalculateSub(Cardlist1=[], Cardlist2=[]):
        chaji = list.copy(Cardlist1)  # 最后要返回的差集
        for item in Cardlist2:
            if item in Cardlist1:
                chaji.remove(item)
            else:
                print(item)
                print("error in fun CalculateSub")
        return chaji
    
    • 排除重复出现的牌

    Github的代码签入记录

    前端

    后端

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

    问题描述

    • 前端
      • 没有接触过前端
      • 对html等方面了解不多
      • 不懂如何才能使图片在点击时降低透明度
    • 后端
      • 对Python语言的不熟悉
      • 不知道怎样去写一副牌
      • 很多牌型不懂怎样把它表示出来
      • 怎样排列才能使牌的权值最大

    做过哪些尝试

    • 前端:从网课开始学,遇到难题后通过百度了解具体细节代码如何实现
    • 后端:在网上找了一些代码作为参考,结合我们这次的作业做一些改动。

    是否解决

    • 前端:解决了前端开发中遇到的一些问题,如怎样让图片在点击时降低透明度等。
    • 后端:有些解决了有些没解决,能写出来一写牌型但是组合和排列还是不知道怎么写。

    有何收获

    • 前端:通过一系列的学习,基本掌握了html、css和js的用法,并且懂得如何制作出页面,以及学会了对页面进行排列布局。
    • 后端:相比以前写过的一些程序,写一种牌还是第一次,算是一个新鲜的体验,虽然这次体验让人心力交瘁,但是相比以前,我对于python的理解有所提高,更加深刻的认识到了学好一门编程语言刻不容缓。

    评价你的队友

    • 值得学习的地方:学习速度很快,一旦开始就能够心无旁骛的学习下去,一边学习一边实践。
    • 需要改进的地方:可以早点开始。

    学习进度条

    第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
    1 0 0 20 20 学会使用Axure制作原型
    2 0 0 15 15 学习Python的基本用法
    3 94 94 23 23 试着用Python写程序
    4 354 354 35 35 进一步完善代码
  • 相关阅读:
    CSS浏览器兼容性问题集()两
    HTML5 Introduction
    poj 2449 Remmarguts' Date 【SPFA+Astar】【古典】
    LwIP学习笔记——STM32 ENC28J60移植与入门
    在四川大学的第二个冠军游戏在线编程:Peter的X
    ArcEngine下一个TIN生成的轮廓
    精彩理发头盔
    UBUNTU如何改变mysql默认文件夹数据文件夹
    第一章 词汇陷阱
    LINUX2.4.x网络安全框架
  • 原文地址:https://www.cnblogs.com/mlhua/p/11674627.html
Copyright © 2011-2022 走看看