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

    一、链接及仓库

    组员博客链接
    本作业博客链接
    Github仓库

    二、具体分工

    • 万本琳负责后端算法
    • 朱晓倩负责前端UI

    共同解决交互、API、博客

    三、PSP表格

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

    四、解题思路描述及设计实现说明

    4.1网络接口的使用


    就是api文档里写的接口啦
    我们用Python的requests模块封装了六个函数,来连接服务器。

    接口函数 功能
    login 登入,注册,验证
    ranking 显示排行榜
    historicalRecords 历史战局列表
    historicalRecordsDetail 历史战局详情
    opengame 开始游戏
    submitgame 出牌

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

    4.3说明算法的关键与流程图


    算法关键就是十三张牌的分类,先按照花色和大小排个序,然后就是普通牌型的分墩。最暴力的解法就是,先从13张内,挑出最大的5张牌作为后墩,然后剩下的8张牌,挑出5张最大的作为中墩,剩下3张作为前墩.。但是这种做法总觉得太划水了是我们太废,所以我们做出了一些改进。给每种牌设定一个权值,计算一下权值总和,权值最大的就是赢面最大的。权值的设定是按照游戏规则里各种牌型的等级来,从大到小依次比过去。

    五、关键代码解释

    这是我们前墩的分析算法,其中总权值=权值*级别
    由于前墩、中墩、后墩的三个函数结构基本一样,只有变量的改变,所以只贴出前墩的代码。
    注意前墩挑出后要先把前墩的牌剔除再放入中墩函数进行计算,后墩同理。

    (我们为了省事并没有考虑特殊牌型不需要分墩所以测试起来会有错误)

    六、性能分析与改进


    这是我们初始化牌型函数的运行次数和总的执行时间
    其中ncoll:函数运行次数
    tottime:函数的总的运行时间,减去函数中调用子函数的运行时间
    第一个percall:percall=tottime/ncalls
    cumtime:函数及其所有子函数调整的运行时间,也就是函数开始调用到结束的时间
    第二个percall:percall=cumtime/ncalls

    • 分析:我们后端算法一次运行总的运行时间为5.888s,其中执行后墩函数单个工作独立占比时间最多
    • 改进:因为其实我们代码运行挺耗时的,所以减少运行时间是我们需要改进的一个大点。其实就是通过算法的优化减小时间的耗费。从暴力搜索到简单搜索,枚举13张牌可能组成的牌型,从单张一直到顺子,给每种牌设定一个权值,计算一下权值总和,权值最大的就是赢面最大的。

    七、单元测试


    八、Github的代码签入记录

    九、困难及解决方法

    问题描述

    • 不熟悉十三水游戏
    • API的调用:一开始看到这东西,啥子,还有这操作?
    • 对于Python语言还处于新手状态,所以算法实现部分有很多的瓶颈
    • 我们只会简单的PP图,但是完全没有接触过前端,完全无从下手

    做过的尝试

    • 虽然我们不熟悉十三水,但我们两都很上道(毕竟混迹。。赌场多年)
    • API百度后还是没搞懂,所以只能求助,非常感谢隔壁宿舍的帮助(倾囊相授)
    • 对于算法部分只能一步步百度,不懂就和舍友互帮互助
    • 前端我们本来打算用HTML,但是尝试后发现我们还是用Python吧.

    是否解决

    • 大部分解决了,但是我们的页面并没有达到我们预期的感觉,而且算法设计还是有一部分的缺陷

    有何收获

    • 自学和百度搜索(一下你就知道)的能力和效率有所提升
    • 两个人一起完成一项任务的感觉特别爽,而且能够互相是精神支撑(我学不下去了,不行,她还在学,我还能坚持!?)而且两个人更容易看到对方的错误和提醒对方,不至于在死胡同里来回转
    • 对许多知识有了新的了解(PYQt5、接口的设计连接、页面的交互),对Python、PS进一步掌握
    • 学会换一种思路看问题以及分工合作的重要

    十、评价

    朱晓倩:

    • 值得学习的地方:
      自学能力很赞,而且努力、人美、又优秀
    • 需要改进的地方:
      嗯哼?没有!有的话,就是我们两都有拖延症。。。。

    万本琳:

    • 值得学习的地方:
      小朱同学做事很认真,考虑问题也很细致,也很有耐心,心态也超好hhh最重要的是会很照顾人啦。我最近忙着考试好多事,小朱就主动揽了写博客的任务。害!夸就就完事了!
    • 需要改进的地方:
      改进的地方嘛,其实我们两个都是拖延症患者,有些事情明明可以早点做硬是要拖到最后(但我感觉小朱比我更会拖!)

    十一、学习进度条

    第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
    1 0 0 6 6 熟悉游戏规则,进一步学习Python、Axure RP,基本设计好界面
    2 400 400 15 21 大致分工后,有了基本实现的思路,搞定界面交互,有整体算法框架
    3 900 1300 30 51 进一步完成算法设计、实现接口对接和测试、后端处理、博客
  • 相关阅读:
    fastcgi(一)
    矩阵旋转运算(一)
    【10.9】multiprocessing多进程编程
    【10.8】多线程和多进程的比较
    【10.7】ThreadPoolExecutor线程池
    【10.6】线程同步--Semaphore 使用以及源码分析
    【10.5】线程同步--conditon 使用以及源码分析
    【10.4】线程同步--Lock、RLock
    【10.3】线程间通信--共享变量和Queue
    【10.2】多线程编程-threading
  • 原文地址:https://www.cnblogs.com/wbl1115/p/11765829.html
Copyright © 2011-2022 走看看