我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java Websocket Canvas实现井字棋网络游戏

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java Websocket Canvas实现井字棋网络游戏

本文实例为大家分享了Java Websocket Canvas实现井字棋网络游戏的具体代码,供大家参考,具体内容如下

TicTacToeGame.java 


import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
 
@ServerEndpoint("/tictactoe")
public class TicTacToeGame {
 private static final Set<TicTacToeGame> games = new CopyOnWriteArraySet<>();
 private Session session;
 private String player;
 private static String b1 = "";
 private static String b2 = "";
 private static String b3 = "";
 private static String b4 = "";
 private static String b5 = "";
 private static String b6 = "";
 private static String b7 = "";
 private static String b8 = "";
 private static String b9 = "";
 
 @OnOpen
 public void onOpen(Session session) throws IOException {
  System.out.println("Connection from" + session.getId());
  this.session = session;
 
  System.out.println(games.size());
  if (games.size() == 0) {
   this.player = "X";
  }
  if (games.size() == 1) {
   this.player = "O";
  }
  if (games.size() > 1) {
   System.out.println("房间人满");
   session.getBasicRemote().sendText("roomfull");
//            session.close();
  } else {
   games.add(this);
   session.getBasicRemote().sendText("player-" + player);
   if (games.size() == 1) {
    sendText("wait");
   }
   if (games.size() == 2) {
    sendText("start");
   }
   sendText("turn-" + "X");
  }
 }
 
 @OnMessage
 public void onMessage(String message) {
  System.out.println(player);
  System.out.println(message);
  System.out.println(message.indexOf("place"));
  if (message.indexOf("place") != -1) {
   String[] words = message.split("-");
   System.out.println("words[1]=" + words[1]);
   System.out.println("words[2]=" + words[2]);
   System.out.println("games.size()=" + games.size());
 
   if (games.size() > 1) {
    if ("".equals(getPlayer(words[1]))) {
     place3(words[1], words[2]);
     sendText(message);
     check();
     if ("X".equals(words[2])) {
      sendText("turn-" + "O");
     } else {
      sendText("turn-" + "X");
     }
    }
   }
   System.out.println("b1=" + b1);
   System.out.println("b2=" + b2);
   System.out.println("b3=" + b3);
   System.out.println("b4=" + b4);
   System.out.println("b5=" + b5);
   System.out.println("b6=" + b6);
   System.out.println("b7=" + b7);
   System.out.println("b8=" + b8);
   System.out.println("b9=" + b9);
 
  } else if ("reset".equals(message)) {
   if (player.equals("X") || player.equals("O")) {
    b1 = "";
    b2 = "";
    b3 = "";
    b4 = "";
    b5 = "";
    b6 = "";
    b7 = "";
    b8 = "";
    b9 = "";
    sendText(message);
   }
  } else {
   sendText(message);
  }
 
 }
 
 private static void sendText(String msg) {
  for (TicTacToeGame game : games) {
   try {
    synchronized (game) {
     game.session.getBasicRemote().sendText(msg);
    }
   } catch (IOException e) {
    games.remove(game);
    try {
     game.session.close();
    } catch (IOException e1) {
    }
    sendText("leave-" + game.player);
   }
  }
 }
 
 @OnClose
 public void onClose(Session session) {
  System.out.println(session.getId());
  System.out.println(this.player + "已下线");
  if (!"".equals(this.player)) {
   games.remove(this);
   sendText("leave-" + this.player);
  }
 }
 
 public void place3(String id, String player) {
  if ("b1".equals(id)) {
   b1 = player;
  }
  if ("b2".equals(id)) {
   b2 = player;
  }
  if ("b3".equals(id)) {
   b3 = player;
  }
  if ("b4".equals(id)) {
   b4 = player;
  }
  if ("b5".equals(id)) {
   b5 = player;
  }
  if ("b6".equals(id)) {
   b6 = player;
  }
  if ("b7".equals(id)) {
   b7 = player;
  }
  if ("b8".equals(id)) {
   b8 = player;
  }
  if ("b9".equals(id)) {
   b9 = player;
  }
 }
 
 public String getPlayer(String id) {
  String player = "";
  if ("b1".equals(id)) {
   player = b1;
  }
  if ("b2".equals(id)) {
   player = b2;
  }
  if ("b3".equals(id)) {
   player = b3;
  }
  if ("b4".equals(id)) {
   player = b4;
  }
  if ("b5".equals(id)) {
   player = b5;
  }
  if ("b6".equals(id)) {
   player = b6;
  }
  if ("b7".equals(id)) {
   player = b7;
  }
  if ("b8".equals(id)) {
   player = b8;
  }
  if ("b9".equals(id)) {
   player = b9;
  }
  return player;
 }
 
 public void check() {
 
  if (b1.equals("X") && b2.equals("X") && b3.equals("X")) {
   sendText("xwon");
   sendText("gameover-YES");
  } else if (b1.equals("X") && b4.equals("X") && b7.equals("X")) {
   sendText("xwon");
   sendText("gameover-YES");
  } else if (b7.equals("X") && b8.equals("X") && b9.equals("X")) {
   sendText("xwon");
   sendText("gameover-YES");
  } else if (b3.equals("X") && b6.equals("X") && b9.equals("X")) {
   sendText("xwon");
   sendText("gameover-YES");
  } else if (b1.equals("X") && b5.equals("X") && b9.equals("X")) {
   sendText("xwon");
   sendText("gameover-YES");
  } else if (b3.equals("X") && b5.equals("X") && b7.equals("X")) {
   sendText("xwon");
   sendText("gameover-YES");
  } else if (b2.equals("X") && b5.equals("X") && b8.equals("X")) {
   sendText("xwon");
   sendText("gameover-YES");
  } else if (b4.equals("X") && b5.equals("X") && b6.equals("X")) {
   sendText("xwon");
   sendText("gameover-YES");
  }
 
  else if (b1.equals("O") && b2.equals("O") && b3.equals("O")) {
   sendText("owon");
   sendText("gameover-YES");
  } else if (b1.equals("O") && b4.equals("O") && b7.equals("O")) {
   sendText("owon");
   sendText("gameover-YES");
  } else if (b7.equals("O") && b8.equals("O") && b9.equals("O")) {
   sendText("owon");
   sendText("gameover-YES");
  } else if (b3.equals("O") && b6.equals("O") && b9.equals("O")) {
   sendText("owon");
   sendText("gameover-YES");
  } else if (b1.equals("O") && b5.equals("O") && b9.equals("O")) {
   sendText("owon");
   sendText("gameover-YES");
  } else if (b3.equals("O") && b5.equals("O") && b7.equals("O")) {
   sendText("owon");
   sendText("gameover-YES");
  } else if (b2.equals("O") && b5.equals("O") && b8.equals("O")) {
   sendText("owon");
   sendText("gameover-YES");
  } else if (b4.equals("O") && b5.equals("O") && b6.equals("O")) {
   sendText("owon");
   sendText("gameover-YES");
  }
 
  // Checking of Player O finsh
  // Here, Checking about Tie
  else if ((b1.equals("X") || b1.equals("O")) && (b2.equals("X") || b2.equals("O"))
    && (b3.equals("X") || b3.equals("O")) && (b4.equals("X") || b4.equals("O"))
    && (b5.equals("X") || b5.equals("O")) && (b6.equals("X") || b6.equals("O"))
    && (b7.equals("X") || b7.equals("O")) && (b8.equals("X") || b8.equals("O"))
    && (b9.equals("X") || b9.equals("O"))) {
   sendText("tie");
   sendText("gameover-YES");
  } else {
 
  }
 }
}

index.html


<!DOCTYPE html>
 
<head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta name="viewport" content=
          "width=device-width, initial-scale=1.0">
    <!-- JavaScript file included -->
    
</head>
 
<body>
    <div id="main">
        <h1>TIC TAC TOE</h1>
 
 
 
        <!-- Space to show player turn -->
        <p id="player"></p>
 
        <br>
       
        <div id="game">
            <canvas id="canvas" width="300" height="300"></canvas>
        </div>
 
        <!-- Grid end here -->
        <br>
 
        <!-- Button to reset game -->
        <button id="but" onclick="reset()">
            重新开始
        </button>
        
        <br>
        <!-- Space to show player turn -->
        <p id="print2"></p>        
 
        <br>
        <!-- Space to show player turn -->
        <p id="print"></p>
        
 
 
    </div>
    <script class="lazy" data-src="tic.js"></script>
</body>
 
</html>

tic.js


// Function called whenever user tab on any box
player = "";
turn = "";
gameover = "NO";
// Function to reset game
function reset() {
    message = "reset";
    websocket.send(message);
    message = "turn-X";
    websocket.send(message);
}
function reset2() {
    clear();
    drawboard();
    gameover = "NO";
    document.getElementById("print2")
            .innerHTML = "游戏开始, 请开始放置棋子";
}
 
// Here onwards, functions check turn of the player
// and put accordingly innerText X or O
flag = 1;
function place(id) {
    if (gameover === "NO") {
        if (flag === 1) {
            if (document.getElementById(id).innerText === "") {
                document.getElementById(id).innerText = "X";
                flag = 0;
            }
        } else {
            if (document.getElementById(id).innerText === "") {
                document.getElementById(id).innerText = "O";
                flag = 1;
            }
        }
    }
    check();
}
function place2(id) {
    if (gameover === "NO") {
        if (turn === player) {
            if (document.getElementById(id).innerText === "") {
                message = "place-" + id + "-" + player;
                websocket.send(message);
            }
        }
    }
}
 
//function place3(id, player) {
//    document.getElementById(id).innerText = player;
//check();
//}
 
function getRootUri() {
    return "ws://" + (document.location.hostname == "" ? "localhost" : document.location.hostname) + ":" +
            (document.location.port == "" ? "8080" : document.location.port);
}
 
function init() {
    output = document.getElementById("output");
    websocket = new WebSocket(getRootUri() + "/TicTacToeWebSocket/tictactoe");
    websocket.onopen = function (evt) {
        onOpen(evt)
    };
    websocket.onmessage = function (evt) {
        onMessage(evt)
    };
    websocket.onerror = function (evt) {
        onError(evt)
    };
}
 
function onMessage(evt) {
    console.log(evt.data);
    if (evt.data == "roomfull") {
        document.getElementById("print")
                .innerHTML = "游戏玩家已满";
        websocket.close(-1);
    }
    if (evt.data == "reset") {
        reset2();
    }
    if (evt.data == "wait") {
        //window.alert("Waiting for Second Player");
        document.getElementById("print2")
                .innerHTML = "等待第二个玩家";
 
    }
    if (evt.data == "start") {
        reset();
    }
    if (evt.data == "xwon") {
        document.getElementById("print2")
                .innerHTML = "玩家X赢了";
 
    }
    if (evt.data == "owon") {
        document.getElementById("print2")
                .innerHTML = "玩家O赢了";
 
    }
    if (evt.data == "tie") {
        document.getElementById("print2")
                .innerHTML = "平局";
 
    }
    if (evt.data.indexOf("leave") != -1) {
        //window.alert(evt.data);
        words = evt.data.split("-");
        //window.alert(words[1]);
        player = words[1];
        //window.alert(player);
        document.getElementById("print2")
                .innerHTML = "玩家" + player+"已离开游戏,请退出游戏";
    }
    if (evt.data.indexOf("player") != -1) {
        //window.alert(evt.data);
        words = evt.data.split("-");
        //window.alert(words[1]);
        player = words[1];
        //window.alert(player);
        document.getElementById("player")
                .innerHTML = "你是玩家" + player;
    }
    if (evt.data.indexOf("turn") != -1) {
        //window.alert(evt.data);
        words = evt.data.split("-");
        //window.alert(words[1]);
        turn = words[1];
        //window.alert(turn);
        document.getElementById("print")
                .innerHTML = "当前由玩家" + turn + "放置棋子";
    }
    if (evt.data.indexOf("place") != -1) {
        //window.alert(evt.data);
        words = evt.data.split("-");
        //window.alert(words[1]);
        place3(words[1], words[2]);
    }
    if (evt.data.indexOf("gameover") != -1) {
        //window.alert(evt.data);
        words = evt.data.split("-");
        //window.alert(words[1]);
        gameover = words[1];
        //window.alert(turn);
        document.getElementById("print")
                .innerHTML = "游戏结束!";
    }
}
 
function onOpen(evt) {
}
function onError(evt) {
}
 
 
 
players = 2;
cell_count = 3;
winCount = 3;
cell_size = 100;
size = cell_size * cell_count;
 
 
var canvas = document.getElementById('canvas');
canvas.width = size;
canvas.height = size;
 
canvas.addEventListener('click', click, false);
 
 
var ctx = canvas.getContext('2d');
 
ctx.imageSmoothingEnabled = false;
ctx.lineWidth = 3;
 
 
function clear() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
}
 
function line(x, y, w, h, color = '#ccc') {
    ctx.beginPath();
    ctx.moveTo(x, y);
    ctx.lineTo(x + w, y + h);
    ctx.strokeStyle = color;
    ctx.stroke();
    ctx.closePath();
}
 
function click(e) {
    if (gameover === "NO") {
        if (turn === player) {
            i = e.offsetX / cell_size | 0;
            j = e.offsetY / cell_size | 0;
            id = "";
            if (i == 0 && j == 0) {
                id = "b1";
            }
            if (i == 1 && j == 0) {
                id = "b2";
            }
            if (i == 2 && j == 0) {
                id = "b3";
                ;
            }
            if (i == 0 && j == 1) {
                id = "b4";
            }
            if (i == 1 && j == 1) {
                id = "b5";
            }
            if (i == 2 && j == 1) {
                id = "b6";
            }
            if (i == 0 && j == 2) {
                id = "b7";
            }
            if (i == 1 && j == 2) {
                id = "b8";
            }
            if (i == 2 && j == 2) {
                id = "b9";
            }
            message = "place-" + id + "-" + player;
            websocket.send(message);
        }
    }
}
function place3(id, player) {
    i = 0;
    j = 0;
    if (id === "b1") {
        i = 0;
        j = 0;
    }
    if (id === "b2") {
        i = 1;
        j = 0;
    }
    if (id === "b3") {
        i = 2;
        j = 0;
    }
    if (id === "b4") {
        i = 0;
        j = 1;
    }
    if (id === "b5") {
        i = 1;
        j = 1;
    }
    if (id === "b6") {
        i = 2;
        j = 1;
    }
    if (id === "b7") {
        i = 0;
        j = 2;
    }
    if (id === "b8") {
        i = 1;
        j = 2;
    }
    if (id === "b9") {
        i = 2;
        j = 2;
    }
 
    if (player === "X") {
//         window.alert("X");
        // draw X figure
        color = '#3F51B5';
 
        left = (i + 0.1) * cell_size;
        up = (j + 0.1) * cell_size;
        size = 0.8 * cell_size;
//        window.alert(left);
//        window.alert("up="+up);
//        window.alert(size);
 
        line(left, up, size, size, color);
        line(left + size, up, -size, size, color);
    }
    if (player === "O") {
        color = '#FF5722';
        left = (i + 0.1) * cell_size;
        up = (j + 0.1) * cell_size;
        size = 0.8 * cell_size;
        ctx.beginPath();
        ctx.arc((i + 0.5) * cell_size, (j + 0.5) * cell_size, 0.4 * cell_size, 0, Math.PI * 2, false);
        ctx.strokeStyle = color;
        ctx.stroke();
        ctx.closePath();
    }
}
 
function drawboard() {
    for (let i = 0; i < cell_count; i++) {
        for (let j = 0; j < cell_count; j++) {
            left = i * cell_size;
            up = j * cell_size;
            size = cell_size;
            ctx.beginPath();
            ctx.lineWidth = "6";
            ctx.strokeStyle = "gray";
            ctx.rect(left, up, size, size);
            ctx.stroke();
        }
 
    }
 
}
drawboard();
 
 
window.addEventListener("load", init, false);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java Websocket Canvas实现井字棋网络游戏

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python实现井字棋游戏

本文实例介绍了python实现井字棋游戏的方法,分享给大家,具体内容如下 windows7下python3.4.0编译运行通过。由于采用了cmd调用,所以与Linux不兼容,无法在Linux下运行。 游戏就是井字棋,小键盘上的数字位置对应棋
2022-06-04

纯CSS3实现井字棋游戏的示例

这篇文章给大家分享的是有关纯CSS3实现井字棋游戏的示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。运行效果:html
2023-06-08

C语言如何实现井字棋游戏

这篇文章主要介绍了C语言如何实现井字棋游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用
2023-06-14

React中井字棋游戏的实现示例

本文主要介绍了React中井字棋游戏的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

C语言怎么实现井字棋游戏

今天就跟大家聊聊有关C语言怎么实现井字棋游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录