2021秋软工实践第二次结对编程作业

qq_45702491 2021-10-09 21:44:47
这个作业属于哪个课程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表格

PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划2030
Estimate估计这个任务需要多少时间20552420
Development开发 -
Analysis需求分析 (包括学习新技术)6060
Design Spec生成设计文档3060
Design Review设计复审 (审核设计文档)3060
Coding Standard代码规范 (为目前的开发制定合适的规范)3030
Design具体设计3060
Coding具体编码16001700
Code Review代码复审1530
Test测试(自我测试,修改代码,提交修改)180360
Reporting报告  
Test Report测试报告3030
Size Measurement计算工作量  
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划3030
 合计20552420

 

学习进度条

第N周新增代码(行)累计代码(行)本周学习耗时(小时)累计学习耗时(小时)重要成长
15005001212学习了微信开发者工具的使用,掌握了基本的小程序开发流程,学会了一些基础组件的使用
2100015002436通过CSDN查找资料以及微信开发者文档的查阅,掌握了背景的设置,页面布局,表格设计以及各种按键的设置

 

重难点分析

用JavaScript实现博饼小程序,对我,对我的队友来说基本也是从零开始。再一开始拿到这个题目的时候也多少有点有点不知道所措,甚至不知从何学起。依凭着第一周原型开发的基础,和约两周的学习,尝试编程以及不断改进,添加各种细节,总算写出了一些东西来。

1、实现博饼程序结果的自动判断

这是整个博饼程序的核心所在,也是最基础的内容。要实现自动判断之前,需要先用计时器代码让六个骰子随机变化,并能在变化停止时及时记录下每一个骰子的结果,以方便进行判断。这需要一个计时器函数使骰子不断以固定频率变化,还需要一个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);
 
         
  },

 

 

 

2、实现多人模式

这是我认为本次试验中最艰难的部分。需要实现的难点有以下几条:

  1. 需要实现授权登录,并能全局显示(在任意页面登录之后,所有页面都能正确显示头像昵称)。
  2. 能够邀请好友,并获取好友信息,显示已入座,准备开始等功能。
  3. 共享奖池!抽空后不再多发。
  4. 判断状元大小,状元只有一个,需要全部状元比较后才能得出结果。
  5. 以上内容,都需要与服务器交互,实现玩家间的连接互动,和对奖池的瓜分。授权登录于需要用到新规定的getUserProfile函数实现(在使用getUserInfo始终无果后,在崩溃边缘发现微信官方居然在今年做了新的调整!!)https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801?idescene=6

     6.“邀请好友”使用了console.log()函数实现了授权与登录后头像昵称信息的返回(return)。

3、对博饼结果进行记录

对于我的小程序来说,结果记录虽然不算难点,但却是重中之重。

在单人模式中,我设计了统计每次结果的内容,而在多人模式中,我设计了对剩余奖品的记录。为了实现这些设计思路,我需要在data中定义变量,并在每一次判断博饼结束之后立即计数。对data中数据改变利用了setData函数。

在wxml中,设计弹窗页面来在本页面显示结果,以防止跨页面的各种麻烦。
 

 

结对编程体验

        这次的结对作业,相对于以前写代码的时候来说,是一次相对新奇的体验。在第一次画好初步想要实现的小程序模型后,漫漫编程之路就开始了。假如像之前一样,自己独自一人实现这个小程序的话,估摸着大半个月都难以实现。但是在结对编程中,有个队友像领航员一般,带着你去一步一步慢慢实现。同时,有了队友的帮助,逐步实现小程序的目标也渐渐明确,先实现哪一部分,再去实现哪一部分。在实现小程序目标的基本要求下,实现的过程会变得相对轻松一些。有了领航员队友的帮助,在编码的时候因为手误、错看的一些错误可以帮你指正出来,同时,还可以帮你优化你所写的代码,使其变得更加简洁明了。

        在这次的结对编程中,因为我自己的编码能力相对较弱一点,所以像规则、起源的介绍、以及结果表格的记录、背景、配图等一些图片等相对比较容易的页面由我来实现,还有骰子的转动也在队友帮助下初步实现了。而骰子的开始结束以及结果的判定,还有各个页面之间的连接转换等其他就相对依赖于我的领航员队友了。

        总的来说,我们觉得结对编程的优势在于设计以及编码思路的共享,每个人用不同的想法看待同一个问题,会有不同的思路,因而就会有更加便捷的编码方式来实现不同的目标,这就有利于提高编码的效率,也可以使得所做的小程序可以有更好的实现。

        

 

在编码、争论、复审等活动中花费时间较长,给你较大收获的事件

  • 博饼程序实现准备期间其实花了大量的时间,也收获了很多。从头到尾学习小程序如果创作,JS更是零基础学习,还有各种各样的函数功能,各种模块参数调整。说是每天开关数百个网络页面也不为过。在这其中浏览了各种各样的萌新教程,遇到困难又学习了各种细节方面的知识,从一开始初次注册小程序号到js,json,wxml,mxss四种文件能够互相关联操作,不断成长进步。
  • 在实现博饼程序代码时,花了比较久的时间。一是当时对于JS语言还不够熟悉,常常出现标点出错,写法不规范,这些错误修改浪费了大量时间;二是博饼判断代码需要仔细分类。在这期间,我们不断学习,不断遇到困难,试错纠错,也是在编写这段代码期间,熟练了JS的使用和调试能力。

 

GitHub仓库及commit记录

GitHub仓库:Git仓库

 

结对照片

 

 

 

 

视频演示

视频演示:https://www.bilibili.com/video/BV1Jv411g7cg?spm_id_from=333.999.0.0

 

 

 

 

    ...全文
    236 回复 打赏 收藏 转发到动态 举报
    写回复
    用AI写文章
    回复
    切换为时间正序
    请发表友善的回复…
    发表回复

    189

    社区成员

    发帖
    与我相关
    我的任务
    社区描述
    福州大学软件工程教学,推行邹欣老师“构建之法”。
    软件工程 高校
    社区管理员
    • Dawnfox
    • REP1USONE
    • 纪华裕
    加入社区
    • 近7日
    • 近30日
    • 至今
    社区公告
    暂无公告

    试试用AI创作助手写篇文章吧