一、题目描述

题目:“福建赌王”之争

【题目背景】

话说,自称“赌王”的老周与同样自称“赌王”的老刘在福州展开“赌王”名号的争夺。两人商议决定使用福建当地的一套纸牌游戏规则进行博弈,即“福建十三水”。约定三周后展开决战。老刘修习代码多年,希望开发一套自动化的出牌系统,具体游戏规则请上网查询或找福大柯老板,本次作业要求提交一份完整的前端后端代码。

WARNING:珍惜钱财,远离赌博(含AI赌博)。

二、相关的链接

- 古力亚尔博客地址:https://github.com/ruinzly/031702506
- fork的同名仓库的GitHub项目:https://github.com/ruinzly/031702506

三、具体分工

此次团队编程作业前端和后端两人共同负责,前端先由一人进行开发,另一人负责优化改善(主要是怕这次作业完成不了,想想两个人一起学习前端比较现实!)前一周完成前端部分,后面时间都在忙后端,后端主要是思路问题,再由JAVA实现。

四、PSP表格

PSP

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

五、解题思路与设计实践说明

  • 网络接口的使用
    登录注册和历史战局等接口,就是调用post或者get方法,然后进行数据的发送和获取数据并加以展示。开启战局和出牌部分的需要通过开启战局获取的card数据发送至自己的后端接口中,并返回排列好的前中后墩,然后通过出牌接口发送至助教的接口中。

    注册接口

登录接口

  • 内部类图
  • 算法的流程图
    算法的关键就是对于牌型的判断,判断牌的花色->做整体判断是否有相同的牌(分情况讨论四张、三张、两张)->一组一组判断特殊牌型->分配权重->出牌 流程图如下:

六、关键代码的解释

十三水算法中,我认为组牌判断是否为特殊牌型、同花顺、炸弹、对子等等牌型都是很重要的,那综合起来就是整个算法都是关键,所以一下只是评论解释其中的一小部分。判断每一个牌型是都会进行测试,在进行标记。

七、性能的分析与改进

前端的UI界面

起初因为刚开始学习前端,各个部分的知识都有所欠缺,只能用最基础的去实现其功能,就导致了在美观上有很大的不足。后来学习了CSS之后,就在原有基础上增加了透明度和圆角等知识,进行了页面美观改进。

修改前

修改后

后端的算法分析改进

在刚开始设计AI的实现方法时,我们想过使用贪心算法,先找到5张组合在一起最大的牌,放在底墩,再找5张第二大的牌,放在中墩,最后三张放在头墩。这样就符合规则了,但是这种情况下选出的牌,赢得概率不大,就放弃了这种思路,改用其他的方法,即拿到牌后,顺序判断各种牌型,在进行检验。

八、单元测试

该图是前端接口测试出来的结果:

服务器参数传到UI界面显示的牌型、玩家昵称、ID、以及得分情况:

我们通过改变传入的牌来测试输出是否正确,我所测试的测试数据,尽量测试特殊牌型,同花和顺子同时存在的时候如何取舍,还有某些偏僻的特殊牌型如何取舍。

九、Github的代码签入记录

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

* 问题一: 根据原型制作前端的过程中都是html+js+css小白
* 解决方式: 百度相关菜鸟教程

* 问题二: 如何脱离本机进行服务器连接操作
* 解决方式: 写代码接口与之相连

* 问题三: 代码模块异常处理

代码模块的报错几乎都是因为其接口没有做好,报错最多的就是400、401、502;报这些错的原因有跨域问题,传参不到位,设置的参数与对应接口的参数不符合;解决以上的问题之后就可正常运行了。

十一、评价队友

值得学习的地方

1、学习前端语言时候很认真,心无旁骛;
2、意志力很强,不轻易放弃;
3、勤学好问,效率很高。

还需改进的地方

1、时间方面分配不太均衡。

十二、学习进度条

||||||||||||||
|:--|:--|:--|:--|:--|
|** 第N周 |新增代码(行)|累计代码(行)|本周学习耗时(小时)|重要成长**|
|第一周|0|0|15|利用rp制作原型|
|第二周|1000|1000|48|制作学习前端基础知识以及后端基础知识|
|第三周|900|1900|60|后端开发以及github使用|

posted on 2019-10-30 22:07  ruinzly  阅读(172)  评论(0编辑  收藏  举报