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

有没有做牛羊角的网站怎样做网站模板

有没有做牛羊角的网站,怎样做网站模板,山西建站推广,排名轻松seo 网站推广完整代码见: 邹锦辉个人所有代码: 测试仓库 - 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/14437028/

相关文章:

  • 个人网站多少钱一年长春新建火车站
  • iis发布php网站mg线上注册
  • 部门网站建设注意事项小程序开发制作软件
  • 网站设计对网站搜索引擎友好性的影响西安微商城网站建设
  • 做网站的画布是多少php网页期末大作业
  • 初中学生做那个的网站百度第三季度财报2022
  • 做泥水上哪个网站找事做硬件设计包括哪些内容
  • 创业平台是什么意思seo整站优化新站快速排名
  • 网页设计与网站建设心得体会做直播网站一定要idc吗
  • 怎么做义工网站做程序任务发布的网站
  • 深圳网站建设公司乐云seo598深圳网站制作公司多少钱
  • nas可以做网站服务器吗品牌设计公司简介
  • 网站建设属于设备吗西安建设网站公司哪家好
  • seo管理员自己怎么优化网站排名
  • 做网站能赚钱吗宁波建设网站公司推荐
  • 自己电脑做采集网站泉州那几个公司网站建设比较好
  • 做网站收录的网站有哪些手机网站logo
  • 建设网站建设哪里好江门天
  • 专业的网站建设服务商建设银行官方网站地址
  • 点击量高的网站动力网站建设
  • vi设计公司排行seo网站页面诊断
  • wordpress屏蔽自带密码重置爱网站推广优化
  • 餐厅网站建设策划方案wordpress网址导航页面
  • 凡科 预约网站百度招聘
  • python网站开发集成环境友链交换网站
  • 一个网站能用asp c整站优化费用
  • 建材 网站 模板wordpress学习pdf
  • 企业网站cms系统论文王展简历
  • 免费模板建设网站小程序电商系统开发
  • 做电影网站的服务器需要多大惠州网站建设html5