首页 > 代码库 > 结对编程——黄金点游戏之旅【二】

结对编程——黄金点游戏之旅【二】

一、黄金点游戏是一个数字小游戏,其游戏规则是:

  N个同学(N通常大于10),每人写一个0-100之间的有理数(不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。

二、后续功能的实现功能

  经过三天的努力,我们终于完成了开始游戏、取消准备、查看历史纪录、添加测试以及退出登录功能。

  1.开始游戏(准备游戏)功能介绍:玩家登陆成功后直接进入游戏界面,下方的准备窗口会显示出当前已经准备好的玩家id和猜测数字;玩家在下方的数字输入栏键入猜测数字并点击开始游戏按钮,此时玩家与其猜测的数字就会出现在下方的准备窗口。当前房间的准备玩家数大于或等于12(每行显示四人,为了让页面看起来更整齐才把开始时的玩家数设为12)时开始本轮结算。主要代码如下:

UserController.java:
    //删除一个用户和他所猜测的分数
    public Map<String,Object> exitready(String username) {
            
            Map<String, Object> result = new HashMap<String,Object>();
            
            uService.delGuessnumber(username);
            result.put("tip", "success");
            return result;
    }

UserService.java:
    public void PutGuessnumber(String username, double guessnumber) {
            Map<String, Object> info = new HashMap<String,Object>();
            info.put("user_name", username);
            info.put("guess_number", guessnumber);
            uDao.addaPlayer(info);
    }

  2.取消准备功能介绍:玩家可以在准备游戏后取消准备修改输入的数字重新进入游戏。主要代码代码如下:

UserController.java:
public Map<String,Object> exitready(String username) {
            
            Map<String, Object> result = new HashMap<String,Object>();
            
            uService.delGuessnumber(username);
            result.put("tip", "success");
            return result;
    }
UserService.java:
    public void delGuessnumber(String username) {
        uDao.delPlayByName(username);
    }

  3.查看历史纪录功能介绍:玩家在登陆成功后可以查看自己的游戏积分情况。每名注册用户有100的基础分,每轮按照游戏规则进行分数的结算。主要代码如下:

UserController.java:
//向后查询我的游戏记录列表
    public Map<String,Object> gameRecord(String username){
        Map<String,Object> result = new HashMap<String,Object>();
        result = uService.resultlist(username);
        result.put("tip", "success");
        return result;
    }

UserService.java:
public Map<String, Object> resultlist(String username) {
        Map<String, Object> map = new HashMap<String,Object>();
        List<GameResult> list = uDao.selectGameResultByUsername(username);
        map.put("list", list);
        return map;
    }

  4.添加测试功能介绍:顾名思义,这一模块是我们为了对各个功能测试而推出的。此功能只能在当前房间只有登陆用户一人时可用,主要功能为添加测试用机器人(因为逐个添加注册用户太过麻烦)。在玩家进入房间后,使用添加测试功能后,下方的准备窗口会出现11个测试用户,在玩家输入数字并开始游戏后,游戏进入结算。主要代码如下:

UserController.java:
//向后台申请添加机器人
    public Map<String,Object> addRobot(){
        Map<String,Object> result = new HashMap<String,Object>();
        boolean isAdd = uService.addRobot();
        if (isAdd) {
            result.put("tip", "success");
        }else{
            result.put("tip", "error");
        }
        return result;
    }

UserService.java:
//添加测试用例
public boolean addRobot() {
        Map<String, Object> map = new HashMap<String,Object>();
        //获取测试用户名
        List<String> robotName  = uDao.getRobotNameList();
        List<Double> guessnumber = new ArrayList<Double>();
        guessnumber.add(2.0);
        guessnumber.add(10.0);
        guessnumber.add(17.0);
        guessnumber.add(21.0);
        guessnumber.add(5.0);
        guessnumber.add(7.0);
        guessnumber.add(24.0);
        guessnumber.add(18.0);
        guessnumber.add(26.0);
        guessnumber.add(45.0);
        guessnumber.add(76.0);
        int index = 0;
        for (Double double1 : guessnumber) {
            map.put("guess_number", double1);
            map.put("user_name", robotName.get(index));
            uDao.addARobotPlayer(map);
            index++;
        }
        return true;
    }

  5.退出游戏功能介绍:玩家使用此功能后回会退到登陆页面;在房间内的所有玩家退出后,清空玩家数据,并更新本次参加游戏所有用户的数据库信息。主要代码如下:

UserController.java:
//删除一个用户和他所猜测的分数
    public Map<String,Object> exitready(String username) {
            
            Map<String, Object> result = new HashMap<String,Object>();
            
            uService.delGuessnumber(username);
            result.put("tip", "success");
            return result;
    }

UserService.java:
//清空数据库中的Game表数据
    public void checkGameOver() {
        int over = 0;
        over = uDao.getGameOverNumber();
        if (over >= 12) {
            //清空game表中的数据
            uDao.delGameList();
            //gamemark表+1
            uDao.addGameMark();
        }
    }

三、团队成员及分工介绍

  队友:

  1.我的队友李洋洋现在大三就已经在校外的公司工作,有丰富的web项目开发经验;

  2.在本次结对编程任务中主要负责前端界面的设计,ajax交互,数据库设计,以及使用SQL语句完成对数据库的操作;

  3.他的前端代码严格按照代码规范编写,整洁端正,“字”如其人,看起来有一种赏心悦目的感觉。

  我:

  1.我在本次结对任务中主要负责写后台的业务逻辑,登陆、注册、开始游戏等小功能的后台代码。

  2.我在编写后端代码时,有时会忘记代码规范,李洋洋同学在边上就会为我耐心的指出不规范代码。

四、总结

  • 由于时间不够充裕和知识储备不足的原因,我们的游戏还有很多不足之处,如前端页面不够精细,在不同的平台上运行会出现一些差错、当玩家意外退出时如断网后,玩家会一直处于退出之前的状态等。而且我们还有一些别的功能没能完成,如密码找回、好友约战、房间建立、人机模式······
  • 通过这次结对编程任务,我对结对编程的的高效性有了一定的认识,不仅提高了编程速度,也减少了编程过程中错误代码的出现次数,更能让参与编程的两人学到新的知识。

五、附录

  • 结对编程帅图一张
  • 技术分享
  • coding.net链接:https://git.coding.net/Growing-Jin/GoldPoint-Game.git
  • 队友博客链接:http://www.cnblogs.com/qianfeiqianlan/p/5968438.html
  • 结对编程——黄金点游戏之旅【一】:http://www.cnblogs.com/zbo11/p/5961182.html

 

结对编程——黄金点游戏之旅【二】