结对编程——黄金点游戏之旅【二】
一、黄金点游戏是一个数字小游戏,其游戏规则是:
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