第二次结对编程作业

结对成员:

031702615李镇平

他的博客
他作业的博客

031702618王泽鸿

我的GitHub

分工

李镇平负责ui的制作,我则负责ai的制作。

psp表格

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

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

  • 网络接口的使用

(见李镇平博客)

  • 代码组织与内部实现设计

ui:login.htmlregister.htmlresult.htmlrank.htmlfound.htmlbattle.htmlrecord.html
然后这些页面通过javascript连接起来
ai:首先,按牌面数字大小排序。2,3,4,,,A。其次,比较花色。黑 > 红 > 梅 方。牌型共有:乌龙,对子,三条,两对,葫 芦,炸弹,同花,顺子,同花顺,共九种。大小依次递增。从 “方片2,梅花2,红桃2,黑桃2,方片3,,,,黑桃A” 分别赋值为 : 0,1,2,3,,,51。
然后,设计判断各各牌型的函数,参数是数组,返回值为包含该牌型的所有组合,设计判断在该组合下于剩下的牌组中(此组合已经从牌组中删去)选择牌型最最好的函数,设计从牌组中删去组合的函数。
最后,主函数调用生成三组墩牌。

  • 说明算法的关键与关键实现部分流程图

算法最关键的算法就是上述ai提到的第二部分的函数。
流程图如下:
image.png

我认为重要的/有价值的代码片段

ui: $.ajax({
type:"POST",
url: https://api.shisanshui.rtxux.xyz/auth/login",
dataType:"json",
data:JSON.stringify(login_data),
contentType: "application/json;charset-UTF-8",
success:function(result){
console.log(result);//打印服务端返回的数据
if(result.status0){
token=result.data.token;
localStorage.setItem('token',result.data.token);//将token的值存入本地缓存中
localStorage.setItem('user_id',result.data.user_id);//将user_id的值存入本地缓存中
console.log(window.localStorage);
alert("登录成功");
window.location.href="./result.html";
}
},
error:function(res){
alert("账号/密码错误,请重新登录!");
}
});

这个用到了javascript里的ajax,因为我没啥基础,所以这次写UI摸索得我头发瞬间掉满地,连续熬了几个通宵(总之柯老板要把我失去的所有头发都还给我),这里面用到的是localStorage这东西,他就是一个本地存储,用它来存Responses里的user_id,token,就可以解决页面跳转之后找不到数据的问题了。
ai:判断如何取组合函数肯定是最要的!函数通过two函数来对该组合进行估值,然后该函数通过估值对各各组合进行选取。(贪心算法)
function onechoose(needcut,cards){
jiacards=cards;
if(needcut.length1 ||needcut==0)
{
return needcut;
}
var max=-1;
for(var i=0 ;i<needcut.length;i++){
if(max <two( cut( needcut[i],jiacards)) ){
var maxone=i;
max=two( cut( needcut[i],jiacards))
}
}
return needcut[maxone];}

性能分析与改进

image.png
image.png
我使用的语言是js,所以直接使用了谷歌浏览器上面的性能分析。可见了三个函数的耗时最高占用总时间比例最多,分别是classilycards对牌分类的函数,one,two两个对组合价值的评估函数。我尝试降低三个函数在循环里的次数,结果如下:
image.png

单元测试

1.image.png
image.png
2.image.png
image.png
3.image.png
image.png

贴出Github的代码签入记录

image.png

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

  • 问题描述(2分)

算法的问题就在如何不使用完全的贪心算法,比如一个葫芦应该带一个比较小的对子比较合适。

  • 做过哪些尝试(2分)

尝试给返回的组合排个序,这样找起来能解决一部分问题。

  • 是否解决(2分)

并未完全解决,解决的小部分的贪心的问题,应该还存在同样的问题。

  • 有何收获(2分)

熬夜了两个晚上做出来了算法,虽然不是很完美但是觉得很有成就感。

评价你的队友

  • 值得学习的地方

比我还能熬,值得我学习。

  • 需要改进的地方

希望他可以很快的找出错误在哪里,他犯了太多傻错误了,比如改错函数(为啥我都改了还是输出错误?这样的)

学习进度条

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
6 1000 3000 150 350 了解了如何使用js
7 1000 4000 120 370 进一步熟悉了js
posted @ 2019-10-15 22:51  左登峰  阅读(154)  评论(3编辑  收藏  举报