软件开发背景
软件定位
软件初始定位是一款功能类小程序,替代狼人杀桌游纸质卡牌
这个是市场上大部分竞品都能实现的功能,而卡牌助手不仅要能够替代纸质卡牌,还要能够替代人类法官(有的玩家叫做上帝)。
有一个很现实的场景是:
- 少一个法官。好不容易聚集了十二个人玩线下面杀,却要因为没有法官,凑不够十二人局?
- 法官没有游戏体验。想着12人局还要加个法官,那就叫13个人吧,这样每一局又有一个人不能够参与游戏(喜欢当法官的例外)。
- 人数问题。前面两个场景还是比较友好的,但是要凑够12人真的很难,基本上都是九人局,加上法官十个人才能开一把。
狼人杀桌游的简要介绍
游戏规则请参考: https://jingyan.baidu.com/article/3f16e003c4eb142591c103d3.html
据我了解,具体详细规则每个桌游吧,或者每个城市可能都有细微区别,不过不是太大。
卡牌助手的规则,暂时是固定的,后续版本可能会考虑加入不同玩法。
微信小程序技术
微信小程序其本质就是前端技术,我个人的理解是微信小程序就是一个H5的前端框架。【html】【css】【js】【微信小程序框架、组件和API】
微信小程序官方文档:https://developers.weixin.qq.com/miniprogram/dev/index.html
前端开发工程师应该能够一周完美入手小程序,不像我,面向百度编程,活生生被逼成了全栈。
服务器技术
核心技术【java】【Spring boot】【Gradle】【WebSocket】【MySql】【Nginx反向代理】【微服务】
服务器采用spring boot + gradle搭建
将通信方式写成RESTful API ,利用反射能够方便后续接口扩展
@Controller
@Configuration
public class LangRenSha extends MethodFactory{
/**
* 远程Url跨域访问方法
*
* @param methodName 方法名
* @param parameter 参数
* @param pwdKey 密钥
* @return
*/
@RequestMapping("/")
@ResponseBody
public String methodFactory(String methodName, String parameter, String pwdKey) {
return MethodFactory.method("langrensha",methodName,parameter,pwdKey);
}
}
public class MethodFactory {
/**
* 远程Url跨域访问方法
*
* @param methodName 方法名
* @param parameter 参数
* @param pwdKey 密钥
* @return
*/
public static String method(String path, String methodName, String parameter, String pwdKey) {
if (!CheckUtil.checkKey(pwdKey)) {
return "服务器不允许访问!";
}
if (methodName == null) {
return "方法获取异常!";
}
String msg = "登录过程中异常终止!";
try {
//获取并验证用户
//进入房间前,先登录
WeChatApplet bo = new WeChatApplet();
bo = PojoBean.jsonToBo(bo, parameter);
if (CheckUtil.checkNull(bo.getCode())) {
bo = Login.login(bo, methodName, bo.getCode());
bo.setUserId(bo.getUserId());
if ("01".equals(bo.getMsg())) {
//用户验证成功
//执行请求方法
Class c = Class.forName("com.chinaone." + path + ".bizc." + methodName.substring(0, 1).toUpperCase() + methodName.substring(1));
Method method = c.getMethod(methodName, WeChatApplet.class);
msg = (String) method.invoke(c.newInstance(), bo);
}
} else {
return "参数错误:登录失败";
}
} catch (ClassNotFoundException e) {
//e.printStackTrace();
return "没有被允许的方法!";
} catch (NoSuchMethodException e) {
//e.printStackTrace();
return "不正确的方法!";
} catch (IllegalAccessException e) {
//e.printStackTrace();
return "错误的方法【01】!";
} catch (InvocationTargetException e) {
//e.printStackTrace();
return "错误的方法【02】!";
} catch (InstantiationException e) {
e.printStackTrace();
}
return msg;
}
}
有眼尖的同学可能注意到了,核心技术里没有ORM框架。是的,我并没有使用ORM框架,早在开发卡牌助手的一年前,我就在尝试造自己的轮子,替代ORM框架,我称之为myJDBC(已经注册了域名 www.myjdbc.com,表明我要将此作为长期业务的决心),注意!这里是替代,并不是写一个完整的ORM框架,我也没有这个能力和时间去写一个完整的ORM框架。
我造轮子的目的是为了让自己提高开发效率,常用的ORM框架如Mybatis和Hibernate都需要繁琐的配置XML,当然这里配置的XML都具有不可替代的维护优势,但是我并不需要,尽管他们很完美,但我并不需要。再者,如果从效率上考察,自己封装JDBC也要远比ORM框架快速高效很多。
虽然软件已经上线,但是其实只属于内测版本,因为还有很多功能不完善,很多代码不规范,希望能在年前解决。
最后附上两张游戏截图,和我的GitHub地址:https://github.com/a289222346 (暂时将项目私有化了,等待软件成熟再公开,GitHub这个免费私有库非常及时呀-_-!!)
历史版本
V1.1.2更新
2019年1月14日更新
服务器端:
-
重构myJDBC,修复Connection未及时关闭导致的数据库连接问题,在设计myJDBC的时 候,隐约记得JVM会自动回收Connection,所以特意未使用close方法,事实证明这是不可行的,就算JVM会回收,也是低效率的回收,还是自己动手的好。
-
修改狼人杀游戏玩法逻辑和运算规则
微信小程序端:
3. 解决断线不能自动重连问题。
4. 优化网络延时及机器运行速度对游戏的影响