• 第二次结对编程作业


    (补充)UI界面展示

    一. 博客链接、github链接

    本次作业博客
    队友李季城
    github地址

    二. 具体分工

    陈银山:书写十三水出牌逻辑、调用接口
    李季城:收集材料、书写博客

    三. PSP表格

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

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

    1. 网络接口的使用

    接口1:

    接口2:

    接口3:

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

    以下是所有代码的类图:

    3. 算法的关键与关键实现部分流程图

    算法流程图如下:

    五. 关键代码解释

    将所有的牌附上权值,贪心最优的牌型出牌

    def standof() :
        temp = 1
        for i in range(1,3+1):# 前墩
            end_3[i] = ans_3[i]
        temp = 1
        for i in range(1,5+1):#中墩
            end_2[i] = ans_2[i]
        temp = 1
        for i in range(1,5+1): #后墩
            end_1[i] = ans_1[i]
    
    def takenum(x):
        temp = 1
        return x.num
    
    def shunzi3(start) :
        temp = 1
        for i in range(start,start+2+1):
            if number[i] < 1:
                return 0
        return 1
    
    def shunzi5(start):
        temp = 1
        for i in range(start,start+4+1):
            if number[i] < 1:
                return 0
        return 1
    
    def tempof() :
        for i in range(1,3+1):  #前墩
            ans_3[i] = temp_3[i]
        for i in range(1, 5 + 1):  # 中墩
            ans_2[i] = temp_2[i]
        for i in range(1, 5 + 1):  # 后墩
            ans_1[i] = temp_1[i]
    
    
    def first():#设置前墩
        global score
        init_cnt()
        x = 1
        temp = 1
        for i in range(0,2+1):
            tempp1[i]=ans_3[i+1]   #赋值
        tempp1.sort(key=takenum) #将前墩改变
    
        for i in range(1,3+1):
            ans_3[i]=tempp1[i-1]
    
    
        for i in range(1,3+1):
            hua[ans_3[i].flower] +=1
            number[ans_3[i].num]+=1
        x = 1
        temp = 1
        for i in range(1,4+1):
            if hua[i] == 3:
                if shunzi3(ans_3[1].num) == 1:
                    k=(9.0+0.9 / 11.0 * (ans_3[1].num - 1))
                    score += k
                    return k # 3张同花顺
        x = 1
        temp = 1
        for i in range(1,4+1):
            if hua[i] == 3:
                k=(6.0 +0.9/(1300+130+13)*((ans_3[3].num-1)*100+(ans_3[2].num-1)*10+(ans_3[1].num-1))*1.0 )
                score += k
                return k #3张同花
        x = 1
        temp = 1
        if shunzi3(ans_3[1].num) == 1:
            k=(5.0  + 0.9/11.0*(ans_3[1].num-1)*1.0)
            score += k
            return k #3张顺子
        x = 1
        temp = 1
        for i in range(3,0,-1):
            if number[ans_3[i].num] == 3:
                k=(4.0+0.9/13.0*(ans_3[1].num - 1)*1.0)
                score += k
                return k#三条
        x = 1
        temp = 1
        for i in range(3,0,-1):
            if number[ans_3[i].num] == 1:
                x = ans_3[i].num
            if number[ans_3[i].num] == 2:
                k=(1.0 + 0.9/(130+13)*((ans_3[i].num - 1)*10+x-1)*1.0)
                score += k
                return k#单对
        x = 1
        temp = 1
        k=0.9 / (1300.0 + 130.0 + 13.0)*((ans_3[3].num - 1) * 100 + (ans_3[2].num - 1) * 10 + (ans_3[1].num - 1))
        score += k
        temp = 1
        return k #返回散牌
    

    六. 性能分析与改进

    解决思路:中墩和后墩耗时是最大的,这是由于在前期没有采用贪心算法,直接暴力枚举,枚举每一种牌型,所以造成了出牌速度十分慢,后面对算法进行了改进,采用了部分贪心使得算法复杂度降低,提高了运行效率。

    七. 单元测试

    示范:
    输入:
    *5 *Q &8 &5 $8 $J $6 *3 *5 *9 &6 &J &Q
    输出:
    $8 $J $6
    *5 *Q *3 *5 *9
    &8 &5 &6 &J &Q
    (连接出了点问题,没有办法显示后端)

    八. Github的代码签入记录

    九. 代码模块异常或结对困难及解决方法

    问题:
    前期:遇到的问题 :
    刚开始接触题目的时候,觉得无从下手,甚至不知道该如何打代码,有一种深深的挫败感。
    解决方法:
    先要了解十三水的规则,叫上了舍友和班上几个玩的比较好的同学一起玩十三水,甚至下了奶茶的赌注,玩了整整一个晚上终于熟悉了十三水的规则。
    上网疯狂的百度教程和debug
    感想:
    开始的时候接口连接一直错误。客户端的后墩、中墩没有办法算出,通过成千上万次的百度和学习终于完成了这个作业。

    十. 评价队友

    由于队友参加了互联网+比赛,没有太多的时间写代码,但还是积极的提供各种材料,画好原型和攥写博客的!

    十一. 总结

    通过这次的作业,学习了不少的关于Pygame的知识还有python的知识,感觉自己写一个游戏其实还是有点困难的,从一开始的完全不知道到一点一点的慢慢学习,再到最后的项目成型的过程是十分的开心的。

  • 相关阅读:
    MySQL Backup mysqldump 常用选项与主要用法--转发
    openssl 之RSA加密
    Windows 之Dll/lib导出
    缓存雪崩、击穿、穿透
    时间复杂度
    分布式事务
    mysql主从复制与读写分离
    什么是消息队列?
    微服务架构演化
    高并发问题常规思路
  • 原文地址:https://www.cnblogs.com/cys233/p/11680256.html
Copyright © 2020-2023  润新知