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

汕头网站优化电话如何免费做网站推广的

汕头网站优化电话,如何免费做网站推广的,安徽建设工程安全监督总站网站,用绿色做图标的网站上期我们完成了websocket建立连接后的数据初始化,今天我们完成落子交互的具体代码: 这里我们先复习一下,之前约定好的落子请求与响应包含的字段: 1. 发送落子请求 我们在script.js文件中找到落子的相关方法,增加发送请…

上期我们完成了websocket建立连接后的数据初始化,今天我们完成落子交互的具体代码:
这里我们先复习一下,之前约定好的落子请求与响应包含的字段:

 1. 发送落子请求

 我们在script.js文件中找到落子的相关方法,增加发送请求的代码:
 

    chess.onclick = function (e) {if (over) {return;}if (!me) {return;}let x = e.offsetX;let y = e.offsetY;// 注意, 横坐标是列, 纵坐标是行let col = Math.floor(x / 30);let row = Math.floor(y / 30);if (chessBoard[row][col] == 0) {// TODO 发送坐标给服务器, 服务器要返回结果webSocket.send(JSON.stringify({message: 'putChess',userId: gameInfo.userId1,row: row,col: col}));oneStep(col, row, gameInfo.isBlack);chessBoard[row][col] = 1;}}

2. 处理请求发送响应

    @Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {//1. 获取用户信息User user = (User)session.getAttributes().get("user");//2. 获取请求信息GameRequest request = objectMapper.readValue(message.getPayload(),GameRequest.class);//3. 调用游戏房间中的putChess方法实现落子Room room = roomManager.getRoomByUserId(user.getUserId());room.putChess(request);}

实现putChess:

    private static int ROW = 15;private static int COL = 15;//棋盘, 0表示未落子,1表示玩家1的子,2表示玩家2的子private int[][] board = new int[ROW][COL];//处理落子请求public void putChess(GameRequest request) throws IOException {//1. 判断落子玩家int chess = request.getUserId() == user1.getUserId() ? 1 : 2;int row = request.getRow();int col = request.getCol();//2. 落子if(board[row][col] != 0) {System.out.println("[" + row + "," + col + "]已经有子了");return;}board[row][col] = chess;//3. 判断是否获胜int winnerId = checkWinner(row, col) ? request.getUserId() : -1;//4. 给房间中的玩家返回响应GameResponse response = new GameResponse();response.setMessage("putChess");response.setUserId(request.getUserId());response.setRow(row);response.setCol(col);response.setWinnerId(winnerId);//通过OnlineUserManager获取房间中的玩家WebSocketSession session1 = onlineUserManager.getFromRoom(user1.getUserId());WebSocketSession session2 = onlineUserManager.getFromRoom(user2.getUserId());//判断是否有玩家下线if(session1 == null) {//玩家1下线,玩家2获胜response.setWinnerId(user2.getUserId());System.out.println("玩家1掉线");}if(session1 == null) {//玩家2下线,玩家1获胜response.setWinnerId(user1.getUserId());System.out.println("玩家2掉线");}String resp = objectMapper.writeValueAsString(response);if(session1 != null) {session1.sendMessage(new TextMessage(resp));}if(session2 != null) {session2.sendMessage(new TextMessage(resp));}if(response.getWinnerId() != -1) {System.out.println("分出胜负, 游戏房间:" + roomId + "即将销毁");roomManager.remove(roomId, user1.getUserId(), user2.getUserId());}}

注意:我们并没有把Room注册为Spring组件,进行依赖注入时,需要在构造方法中手动注入:

    public Room() {roomId = UUID.randomUUID().toString();onlineUserManager = J20250110GoBangApplication.context.getBean(OnlineUserManager.class);objectMapper = J20250110GoBangApplication.context.getBean(ObjectMapper.class);roomManager = J20250110GoBangApplication.context.getBean(RoomManager.class);}

 实现checkWinner方法检测是否获胜:
 

    private boolean checkWinner(int row, int col) {int count = 1;//判断行是否五子连珠for(int i = col + 1; i < COL; i++) {if(board[row][i] == board[row][col]) {count++;}else{break;}}for(int i = col - 1; i >= 0; i--) {if(board[row][i] == board[row][col]) {count++;}else{break;}}if(count >= 5) {return true;}//判断列是否五子连珠count = 1;for(int i = row + 1; i < ROW; i++) {if(board[i][col] == board[row][col]) {count++;}else{break;}}for(int i = row - 1; i >= 0; i--) {if(board[i][col] == board[row][col]) {count++;}else{break;}}if(count >= 5) {return true;}//判断左上到右下斜线是否五子连珠count = 1;for(int i = row + 1, j = col + 1; i < ROW && j < COL; i++, j++) {if(board[i][j] == board[row][col]) {count++;}else{break;}}for(int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {if(board[i][j] == board[row][col]) {count++;}else{break;}}if(count >= 5) {return true;}//判断右上到左下斜线是否五子连珠count = 1;for(int i = row - 1, j = col + 1; i >= 0 && j < COL; i--, j++) {if(board[i][j] == board[row][col]) {count++;}else{break;}}for(int i = row + 1, j = col - 1; i < ROW && j >= 0; i++, j--) {if(board[i][j] == board[row][col]) {count++;}else{break;}}if(count >= 5) {return true;}return false;}

3. 处理落子响应

在之前初始化游戏的代码中,我们在游戏初始化完成时会调用initGame()方法:

于是我们可以在initGame方法末尾中修改onmessages使之变为处理落子响应的方法:

    webSocket.onmessage = function (e) {let resp = JSON.parse(e.data);console.log(resp);if (resp.message != 'putChess') {console.log("响应类型错误");return;}//判断是谁落子if (resp.userId == gameInfo.userId1) {//根据对应棋子颜色绘制棋子oneStep(resp.col, resp.row, gameInfo.isBlack);} else if (resp.userId == gameInfo.userId2) {//根据对应棋子颜色绘制棋子oneStep(resp.col, resp.row, !gameInfo.isBlack);} else {console.log("响应出错 userId:" + resp.userId);return;}// 给对应的位置设置为1,表示有子chessBoard[resp.row][resp.col] = 1;//交互落子方me = !me;setScreenText(me);//判断游戏是否结束if (resp.winnerId == gameInfo.userId1) {over = true;alert("你赢了!!!");location.href = "/hall.html";}if (resp.winnerId == gameInfo.userId2) {over = true;alert("你输了");location.href = "/hall.html";}}

http://www.dtcms.com/wzjs/314995.html

相关文章:

  • 手机网页制作公司排名郑州seo技术顾问
  • 网站后台怎样推荐图片网页制作app手机版
  • 宁乡市建设局网站清远疫情防控措施
  • 空间如何安装wordpress天津债务优化公司
  • 嘉兴做外贸网站的公司网站优化联系
  • 福州市工程建设质量管理网站网站优化要多少钱
  • 做系统去哪个网站好免费推广网站大全
  • 毕设代做网站百度应用市场下载安装
  • 做装饰材料的网站谷歌外链
  • 用wordpress建立导航网站自制网页
  • 建设工程168网站百度云引擎搜索
  • 网站上怎么做星星评分企业网站优化外包
  • 山东恒昆建设工程有限公司网站国家免费技能培训官网
  • 宁波十大口碑最好的装饰公司评论优化
  • 南昌做网站的公司网站建设优化哪家公司好
  • 机械网站建设注意什么查询网址域名
  • 临沂网站开发技术员微信软文案例
  • 网站在线客服软件百度搜索工具
  • 手机建设网站的目的网站建成后应该如何推广
  • 做海报的网站小白qq百度如何搜索网址
  • 做的好详情页网站系统优化app
  • 济南地区做企业网站的公司seo推广外包
  • 建设一个怎样的自己的网站传统营销
  • 怎么做网站代理商如何做好网络推广
  • 动漫制作seo技术分享博客
  • 网站改版建设情况的汇报seo公司排名
  • 子网站建设的好处来客seo
  • 昆明旅行社网站开发24小时免费看的视频哔哩哔哩
  • 政府网站设计方案新闻今日头条最新消息
  • 衢州做外贸网站的公司wordpress免费建站