当前位置: 首页 > news >正文

做酒招代理的网站网站建设思维导图模版

做酒招代理的网站,网站建设思维导图模版,网站制作的评价,绵阳市建设网招标公告完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 之前我们已经实现了玩家匹配的功能, 我们都知道, 匹配完过后就可以进入游戏房间进行对战了, 所以我们下一步关注的重点就是对于游戏房间的管理. 模块详细讲解 功能需求 通过匹配的方式, 自动给玩家加入到一个游戏房间… 完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 之前我们已经实现了玩家匹配的功能, 我们都知道, 匹配完过后就可以进入游戏房间进行对战了, 所以我们下一步关注的重点就是对于游戏房间的管理. 模块详细讲解 功能需求 通过匹配的方式, 自动给玩家加入到一个游戏房间, 也可以手动创建游戏房间, 当游戏结束后, 玩家退出房间, 游戏房间销毁, 在房间中需要关注的就是对于玩家信息的保存. 但是在服务器上, 显然不止是一个游戏房间, 而游戏房间的数量是根据当前匹配成功的玩家对数实时增长的, 因此我们需要在一个房间管理器中管理多个游戏房间. 这里我们就可以发现, 我们的主要工作就是实现Room和RoomManager. 实现细节 对于Room, 我们就显然需要保存双方用户的信息, 用User对象存储, 同时, 它还应该有唯一的roomid, 这样才能标识出唯一的房间信息. 注: 这里房间id使用UUID, 它表示世界上唯一的身份标识, 通过调用这个算法, 每次生成的字符串必定不同. 对于RoomManager, 我们需要它记录相应的映射关系(需要根据房间id找到房间对象, 通过玩家id找到对应的游戏房间), 即房间和房间id的映射(也就是房间管理的主体部分rooms, 用哈希表来存储), 和房间id和两个用户的映射(userIdToRoomId, 用哈希表来存储).  然后在房间管理器中需要实现的是房间的添加和删除方法, 以及相关辅助方法. 展示: RoomManager Component public class RoomManager {//房间id和房间的映射关系private ConcurrentHashMapString, Room rooms new ConcurrentHashMap();//用户id和房间id的映射关系private ConcurrentHashMapInteger, String userIdToRoomId new ConcurrentHashMap();public void add(Room room, int userId1, int userId2) {rooms.put(room.getRoomId(), room);userIdToRoomId.put(userId1, room.getRoomId());userIdToRoomId.put(userId2, room.getRoomId());}public void remove(String roomId, int userId1, int userId2) {rooms.remove(roomId);userIdToRoomId.remove(userId1);userIdToRoomId.remove(userId2);}public Room getRoomByRoomId(String roomId) {return rooms.get(roomId);}public Room getRoomByUserId(int userId) {String roomId userIdToRoomId.get(userId);if(roomId null) {//userId - roomId 映射不存在, 直接返回nullreturn null;}return rooms.get(roomId);} } 然后对于房间创建的时机, 我们之前就说过, 在匹配器中, 匹配成功且无异常状态时, 在匹配器中就创建了一个房间实例, 然后将两个用户放入房间.(然后向用户返回响应). 接下来就是通过websocket对于进入游戏房间的具体处理(主要是用户的上线, 在匹配器中只是将用户实体关联到了房间, 用户想要后续操作, 仍然需要获取到用户会话, 也就是上线): 1.获取到用户的身份信息(从HttpSession中拿到当前用户对象) 2.判定当前用户是否已经进入房间(拿着用户房间管理器进行查询) 3.判定用户的多开(前面实际已经判定过一次了, 这里为了保险起见又进行了一次判定) 4.对于当前用户进行上线操作 5.这时真正地将两个用户放入房间(这时就要对战了, 我们需要设定玩家1和玩家2标识两个用户, 同时还需要指定先手方(后面对战模块就会讲), 当第二个用户就绪时, 通知双方玩家, 游戏开始). 6.如果还有用户进入到房间, 就会报错(理论上是不存在的, 加这部分完全是为了严谨, 因为之前用户加入房间的过程是线程安全的) 在这里websocket对于异常和连接断开的连接, 应对的也就是玩家离开游戏房间的情况, 主要是如果中途有玩家退出, 另一个玩家也不能干等(就直接告诉他赢了), 这里就展示一下对应逻辑: Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {User user (User) session.getAttributes().get(user);if(user null) {// 此处简单处理, 断开连接时不再给客户端响应了return;}WebSocketSession exitSession onlineUserManager.getFromGameRoom(user.getUserId());if(session exitSession) {//加上这个判定, 目的是为了避免在多开的情况下, 第二个用户退出连接动作onlineUserManager.exitGameRoom(user.getUserId());}log.info(当前用户 user.getUsername() 游戏房间连接异常!);noticeThatUserWin(user);}Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {User user (User) session.getAttributes().get(user);if(user null) {// 此处简单处理, 断开连接时不再给客户端响应了return;}WebSocketSession exitSession onlineUserManager.getFromGameRoom(user.getUserId());if(session exitSession) {//加上这个判定, 目的是为了避免在多开的情况下, 第二个用户退出连接动作onlineUserManager.exitGameRoom(user.getUserId());}log.info(当前用户 user.getUsername() 离开游戏房间!);//通知对手获胜noticeThatUserWin(user);} 下一节中我们将会讲到对战模块的处理(实际主要是在Room中实现的), 白!
http://www.hkea.cn/news/14409750/

相关文章:

  • 好看的个人网站主页网上学编程
  • 婚庆网站模板下载wordpress文章 相册
  • 企业网站开发摘要登录页面设计图片
  • 网站建设多少钱信息三合一网站建设推广
  • 福州公司建设网站西安大雁塔附近酒店推荐
  • 建设网站需要注册证书吗重庆中心城区恢复
  • 瓷砖网站模板平顶山专业做网站公司
  • flash网站欣赏建站优化易下拉系统
  • 建设部网站招标投标文件建设网站租服务器
  • 直播网站功能怎么做开网站公司
  • 如何分析企业网站网站服务费做管理费用
  • 检查网站收录问题学建设网站及功能
  • 如何做网站的seo如果搭建网站
  • 文本怎样做阅读链接网站在线看网站建设
  • 建设一个个人网站不需要开发者模式小米
  • 哪个网站可以做会计试题网站模板中文版
  • 珠海网站制作外包网站页面统计代码是什么意思
  • 扬州外贸网站建设网站一屏的尺寸
  • 建网站建网站的公司wordpress 数据库权限
  • 外国游戏概念设计网站网站怎么免费注册
  • 个人网站教程红色旅游网站页面建设
  • 网络下载的网站模板能直接上传到虚拟主机wordpress乱码
  • 用vue做商城网站常用的js宁德seo培训
  • 从零开始学习网站开发计划html个人网站完整代码
  • 自建网站需要备案吗湖州网站建设策划
  • 机房建设网站自动网站建设
  • 二元期货交易网站开发网络营销名词解释汇总
  • 学做美食的视频网站博物馆网站制作
  • 手机微网站制作湛江市工程建设领域网站
  • 除了阿里巴巴还有什么网站做外贸的点餐小程序开发需要多少钱