Java Websocket HTML Table井字棋网络游戏

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>
        <table  cellspacing="0" cellpadding="0" border="1">
            <tbody>
                <tr>
                    <td align="center" width="20px" height="20px" id="b1" onclick=
                        "place2('b1');">
                    </td>
                    <td align="center" width="20px" height="20px" id="b2" onclick=
                        "place2('b2');">
                    </td>
                    <td align="center" width="20px" height="20px" id="b3" onclick=
                        "place2('b3');">
                    </td>
                </tr>
                <tr>
                    <td align="center" width="20px" height="20px" id="b4" onclick=
                        "place2('b4');">
                    </td>
                    <td align="center" width="20px" height="20px" id="b5" onclick=
                        "place2('b5');
                                ">
                    </td>
                    <td align="center" width="20px" height="20px" id="b6" onclick=
                        "place2('b6');
                                ">
                    </td>
                </tr>
                <tr>
                    <td align="center" width="20px" height="20px" id="b7" onclick=
                        "place2('b7');">
                    </td>
                    <td align="center" width="20px" height="20px" id="b8" onclick=
                        "place2('b8');">
                    </td>
                    <td align="center" width="20px" height="20px" id="b9" onclick=
                        "place2('b9');">
                    </td>
                </tr>
            </tbody>
        </table>



        <!-- 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 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() {
    //location.reload();
    document.getElementById("b1").innerText = "";
    document.getElementById("b2").innerText = "";
    document.getElementById("b3").innerText = "";
    document.getElementById("b4").innerText = "";
    document.getElementById("b5").innerText = "";
    document.getElementById("b6").innerText = "";
    document.getElementById("b7").innerText = "";
    document.getElementById("b8").innerText = "";
    document.getElementById("b9").innerText = "";
    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) {
}

window.addEventListener("load", init, false);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值