基于HTML5+WebSocket+JAVA的棋牌游戏开发,从入门到放弃(二)
来源:互联网 发布:什么软件马赛克好看 编辑:程序博客网 时间:2024/06/05 02:55
我的简书地址
前言
前面我们已经实现了一个简单的五指棋,但问题特别多。这一篇,我们要解决的问题有
- 新增房间
- 前端给出一些提示,告诉你所属的颜色,是否是你的回合
思考
首先,当用户连接的时候,我们需要取出他是哪一个房间?
我们需要一个类Room来表示房间,房间需要一个标示RoomId。
房间里面可能有这么几个动作?
1. 进入房间(需要处理能否进入?)
2. 广播(进入房间后,房间里每个人的动作只要跟这个房间里面的人说就行了)
3. 退出房间
前端的话我们需要用户输入一个id,并且在建立webSocket的时候,把id号带过去。
实现
我们来看看前端的实现,我们需要在一开始弹出一个框,告诉用户,输入一个房间号。(虽然很挫,但是很容易实现)
var roomId = prompt("请输入房间号", ""); //房间号 host = document.location.host; host = "ws://" + host + "/chess?roomId=" + roomId; var webSocket = new WebSocket(host);
是不是很简单呢?这样子我们在简历链接的时候就会把后面的参数带过去。
接下来我们来看看后端代码的实现,首先,我们要获取这个roomId。
List<String> roomList = session.getRequestParameterMap().get("roomId"); String roomId = roomList.get(0);
然后当用户发出connect信号时,我们需要判断这个roomId是否存在,如果不存在,咱们就新建一个room。
if (roomMap.containsKey(roomId)){//已经存在这个房间 Room room = roomMap.get(roomId); if (room.enterRoom(session)){ session.getUserProperties().put("roomId", roomId); }else{ session.getBasicRemote().sendText("error"); }}else{//新建一个房间 Room room = new ChessRoom(roomId, 2); room.enterRoom(session); roomMap.put(roomId, room); session.getUserProperties().put("roomId", roomId);}
当用户下棋的时候,调用room的广播方法。
String content = message.substring(5);ChessAction chessAction = new Gson().fromJson(content, ChessAction.class);chessAction.setCode("Chess");Room room = roomMap.get(roomId);room.broadcast(new Gson().toJson(chessAction));
至此,我们基本实现了一个简单的房间了。接下来,我们需要在前端加一些提示语,提示你是什么颜色。像这种。
代码其实很简单,只需要在开始和每次下棋的时候用js的innerHtml方法就行。
function changeTip(){ if (myTurn == true){ document.getElementById("tips").innerHTML = "这是你的回合"; }else{ document.getElementById("tips").innerHTML = "等待对方下棋"; } } function changeHead(){ if (myTurn == false){ document.getElementById("head").innerHTML = "你的房间号为" + roomId + "你是黑色"; }else{ document.getElementById("head").innerHTML = "你的房间号为" + roomId + "你是白色"; } }
总结
我们已经简单实现了一个有房间的系统。代码。接下来我们会对前后的交互进行一个数据格式的优化,方便以后新功能的扩展。
0 0
- 基于HTML5+WebSocket+JAVA的棋牌游戏开发,从入门到放弃(二)
- 基于HTML5+WebSocket+JAVA的棋牌游戏开发,从入门到放弃(一)
- 基于HTML5+WebSocket+JAVA的棋牌游戏开发,从入门到放弃(三)
- 自制小四轴:从入门到放弃——基于stm32的小四轴系列(二)
- SpringBoot-从入门到放弃(二) 开发环境的搭建
- JSP--(二)从入门到放弃
- JavaScript从入门到放弃(二)
- Python 从入门到放弃(二)
- 自制平衡小车:从入门到放弃——基于stm32的平衡小车系列(二)
- JAVA 从入门到放弃?
- java从入门到放弃
- Unity3D 从入门到放弃(五)----射箭游戏
- android之RxJava的学习,从浅到深,从入门到别放弃(二)
- Docker 从入门到放弃(二)之Spring Boot
- React-Native从入门到放弃(二)
- 微信小程序从入门到放弃(二)
- Handler机制从入门到放弃(二)
- Swift3.0从入门到放弃(二)
- Eclipse去除js(JavaScript)验证错误
- OpenResty学习笔记(十一) nginx做负载均衡
- GPIOLIB实现(一)
- __declspec(dllexport)、__declspec(dllimport)详解
- 移动页面HTML5自适应手机屏幕宽度
- 基于HTML5+WebSocket+JAVA的棋牌游戏开发,从入门到放弃(二)
- 百练 02 滑雪
- 大话设计模式06----装饰模式
- php_lang_ref:classes and objects >> object interface
- jQuery.Callbacks之demo
- Android使用FAAC进行AAC编码详解必看以及注意事项
- Log日志工具类
- Java 生成器 freemarker+rapid-generator 配置
- 使用pacemaker为OpenStack组件添加HA服务(by quqi99)