189
社区成员




这个作业属于哪个课程 | https://bbs.csdn.net/forums/fzuSoftwareEngineering2021?category=0 |
这个作业要求在哪里 | https://bbs.csdn.net/topics/601189945 |
个人学号 | 031902101 |
结对学员学号 | 031902130 |
结对小伙伴的作业博客链接 | https://bbs.csdn.net/topics/601424650 |
GitHub仓库地址 | https://github.com/yddtcsn/bobing |
视频演示链接 | https://www.bilibili.com/video/BV1Jv411g7cg?spm_id_from=333.999.0.0 |
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 20 | 30 |
Estimate | 估计这个任务需要多少时间 | 2055 | 2420 |
Development | 开发 | - | |
Analysis | 需求分析 (包括学习新技术) | 60 | 60 |
Design Spec | 生成设计文档 | 30 | 60 |
Design Review | 设计复审 (审核设计文档) | 30 | 60 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
Design | 具体设计 | 30 | 60 |
Coding | 具体编码 | 1600 | 1700 |
Code Review | 代码复审 | 15 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 180 | 360 |
Reporting | 报告 | ||
Test Report | 测试报告 | 30 | 30 |
Size Measurement | 计算工作量 | ||
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 2055 | 2420 |
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
1 | 500 | 500 | 12 | 12 | 学习了微信开发者工具的使用,掌握了基本的小程序开发流程,学会了一些基础组件的使用 |
2 | 1000 | 1500 | 24 | 36 | 通过CSDN查找资料以及微信开发者文档的查阅,掌握了背景的设置,页面布局,表格设计以及各种按键的设置 |
用JavaScript实现博饼小程序,对我,对我的队友来说基本也是从零开始。再一开始拿到这个题目的时候也多少有点有点不知道所措,甚至不知从何学起。依凭着第一周原型开发的基础,和约两周的学习,尝试编程以及不断改进,添加各种细节,总算写出了一些东西来。
这是整个博饼程序的核心所在,也是最基础的内容。要实现自动判断之前,需要先用计时器代码让六个骰子随机变化,并能在变化停止时及时记录下每一个骰子的结果,以方便进行判断。这需要一个计时器函数使骰子不断以固定频率变化,还需要一个random函数来随机产生骰子样式。
之后,编写博饼结果判断代码(分析四子的个数,罗列各种情况),在每一次骰子停止变化时,及时产出结果。即实现按一次按钮,定时结束,自动产出结果。
yaoyiyao:function(){
var idx=0;
var that=this;
var tmp1;var tmp2;var tmp3; var tmp4 ;var tmp5; var tmp6;
mytimer = setInterval(function () {
idx++;
tmp1 = that.randomNum(1, 6);
tmp2 = that.randomNum(1, 6);
tmp3 = that.randomNum(1, 6);
tmp4 = that.randomNum(1, 6);
tmp5 = that.randomNum(1, 6);
tmp6 = that.randomNum(1, 6);
var opacity = that.data.opacity + 0.1;
if (opacity > 0.5) {
opacity = 0;
}
console.log("idx=" + idx + ",opacity=" + opacity);
var a=tmp1,b=tmp2,c=tmp3,d=tmp4,e=tmp5,f=tmp6;
// debugger
that.setData({
left1: tmp1 + ".png",
left2: tmp2 + ".png",
right1: tmp3 + ".png",
right2: tmp4 + ".png",
mid1: tmp5 + ".png",
mid2: tmp6 + ".png",
opacity: opacity,
isClicked:true
});
if (idx >= 10) {
clearInterval(mytimer);
mytimer=0;
console.log("...mytimer="+mytimer) ;
var NumberArr = [];
NumberArr.push(a,b,c,d,e,f);
var level = {
one: '状元插金花!',
two: '六红六子', // 六子
three: '五红五子', // 五子
four: '普通状元',
five: '对堂',
six: '三红',
seven: '四进',
eight: '二举',
nine: '一秀',
ten: '没有奖哦亲~~~~~'
},
this_level;
NumberArr.sort();
var isfour = 0;
for (var i = 0; i < NumberArr.length; i++) {
if (NumberArr[i] == 4) {
isfour = isfour + 1;
}
}
switch (isfour) {
case 1:
for (var i = 0; i < NumberArr.length; i++) {
//存储当前相同的数量,判断是否为四进
var ContrastArr = [];
for (var j = 0; j < NumberArr.length; j++) {
if (NumberArr[i] == NumberArr[j]) {
ContrastArr.push(NumberArr[j]);
}
}
}
// 等到上面遍历执行完再进行判断属于哪个级别
if (ContrastArr.length === 4) {
this_level = level.seven; //四进
if(that.data.sijin>0){
var sijin0=that.data.sijin-1;
that.setData({
sijin:sijin0
});
}
break;
} else if (ContrastArr.length === 5) {
this_level = level.three; //五红
break;
} else if (ContrastArr.length === 6) {
this_level = level.two; //六红
break;
} else {
// 判断一下,是 "对堂"" or ”一秀“,对堂就是顺子,123456,一秀就是一个只有4;
var isContinuityArray = false;
var array = NumberArr;
var arrayCount = array.length;
for (var i = 0; i < arrayCount; i++) {
var currentArr = Number(array[i]) + 1;
var nestArr = Number(array[i + 1]);
if (i + 1 == arrayCount) {
currentArr = Number(array[i]);
nestArr = Number(array[i]);
}
if (currentArr != nestArr) {
isContinuityArray = false;
break;
} else {
isContinuityArray = true;
}
}
if (isContinuityArray) {
this_level = level.five;
if(that.data.duitang>0){
var duitang0=that.data.duitang-1;
that.setData({
duitang:duitang0
});
}
break;
} else {
this_level = level.nine;
if(that.data.yixiu>0){
var yixiu0=that.data.yixiu-1;
that.setData({
yixiu:yixiu0
});
}
break;
}
};
break;
case 2:
for (var i = 0; i < NumberArr.length; i++) {
var ContrastArr = [];
for (var j = 0; j < NumberArr.length; j++) {
if (NumberArr[i] == NumberArr[j]) {
ContrastArr.push(NumberArr[j]);
}
}
// 判断是 4进 or 二举
if (ContrastArr.length === 4) {
this_level = level.seven;
if(that.data.sijin>0){
var sijin0=that.data.sijin-1;
that.setData({
sijin:sijin0
});
}
break;
} else {
this_level = level.eight;
}
};
break;
case 3:
this_level = level.six;
if(that.data.sanhong>0){
var sanhong0=that.data.sanhong-1;
that.setData({
sanhong:sanhong0
});
}
break;
case 4:
// 判断是 "普通状元" or "状元插金花",普通就是4个四,插金花就是 4个四 + 2个1 ;
var one = 0;
for (var i = 0; i < NumberArr.length; i++) {
if (NumberArr[i] === 1) {
one = one + 1;
}
}
if (one == 2) {
this_level = level.one; // 插金花
} else {
this_level = level.four; //普通状元
}
break;
case 5:
this_level = level.three; // 五红五子
break;
case 6:
this_level = level.two; //六红六子
break;
default:
// 就是页面都没有四,来判断是否属于 “五子” 和 “六子” 和 “四进” 中的哪一种;
for (var i = 0; i < NumberArr.length; i++) {
var ContrastArr = [];
for (var j = 0; j < NumberArr.length; j++) {
if (NumberArr[i] == NumberArr[j]) {
ContrastArr.push(NumberArr[j]);
}
}
if (ContrastArr.length === 4) {
this_level = level.seven; //四进
if(that.data.sijin>0){
var sijin0=that.data.sijin-1;
that.setData({
sijin:sijin0
});
}
break;
} else if (ContrastArr.length === 5) {
this_level = level.three; //五子
break;
} else if (ContrastArr.length === 6) {
this_level = level.two; //六子
break;
} else {
this_level = level.ten;
}
};
break; }
if(this_level===level.nine)
{if(that.data.erju>0){
var erju0=that.data.erju-1;
that.setData({
erju:erju0
});
}}
that.setData({
isClicked:false,
l:this_level
});
}
}, 100);
},
这是我认为本次试验中最艰难的部分。需要实现的难点有以下几条:
6.“邀请好友”使用了console.log()函数实现了授权与登录后头像昵称信息的返回(return)。
对于我的小程序来说,结果记录虽然不算难点,但却是重中之重。
在单人模式中,我设计了统计每次结果的内容,而在多人模式中,我设计了对剩余奖品的记录。为了实现这些设计思路,我需要在data中定义变量,并在每一次判断博饼结束之后立即计数。对data中数据改变利用了setData函数。
在wxml中,设计弹窗页面来在本页面显示结果,以防止跨页面的各种麻烦。
这次的结对作业,相对于以前写代码的时候来说,是一次相对新奇的体验。在第一次画好初步想要实现的小程序模型后,漫漫编程之路就开始了。假如像之前一样,自己独自一人实现这个小程序的话,估摸着大半个月都难以实现。但是在结对编程中,有个队友像领航员一般,带着你去一步一步慢慢实现。同时,有了队友的帮助,逐步实现小程序的目标也渐渐明确,先实现哪一部分,再去实现哪一部分。在实现小程序目标的基本要求下,实现的过程会变得相对轻松一些。有了领航员队友的帮助,在编码的时候因为手误、错看的一些错误可以帮你指正出来,同时,还可以帮你优化你所写的代码,使其变得更加简洁明了。
在这次的结对编程中,因为我自己的编码能力相对较弱一点,所以像规则、起源的介绍、以及结果表格的记录、背景、配图等一些图片等相对比较容易的页面由我来实现,还有骰子的转动也在队友帮助下初步实现了。而骰子的开始结束以及结果的判定,还有各个页面之间的连接转换等其他就相对依赖于我的领航员队友了。
总的来说,我们觉得结对编程的优势在于设计以及编码思路的共享,每个人用不同的想法看待同一个问题,会有不同的思路,因而就会有更加便捷的编码方式来实现不同的目标,这就有利于提高编码的效率,也可以使得所做的小程序可以有更好的实现。
GitHub仓库:Git仓库
视频演示:https://www.bilibili.com/video/BV1Jv411g7cg?spm_id_from=333.999.0.0