我正在编写一个井字游戏,该游戏允许使用HTML5,CSS,JavaScript(ES6),带有快速und socket.io模块的Node.js在不同浏览器中的2个用户之间玩游戏。
每次单击客户端都会提供一个字段号(0到8),服务器随后将使用该字段号来调用move方法并转到该字段。
问题是我需要使服务器对两个客户端的单击事件响应都不同,而我不知道该如何实现。
为了更清楚地说明移动方法,使用了2个参数-symbol(“ X”或“ O”)和字段(0到8),因此基本上是单击了谁和在何处。
客户端在连接时获得了分配的符号,因此当每个客户端单击一个字段时,服务器将调用移动方法,该方法使用客户端分配的符号和从客户端获得的字段编号作为参数。
但是,鉴于每个连接的客户端的套接字都被推送到一个数组Clients,因此我如何对来自不同客户端的点击做出两个单独的服务器响应,因此第一个客户端是clients [0],第二个客户端是clients [1] < / p>
这是服务器代码的一部分:
let clients = [];
io.on("connection", socket => {
clients.push(socket);
if (clients.length === 1) {
io.emit("message", "Please wait for your Opponent!");
};
if (clients.length === 2) {
io.emit("message", "Two players are connected. The game can start now!");
io.to(clients[0]).emit("symbolMessage", `You play as ${player}.`);
io.to(clients[1]).emit("symbolMessage", `You play as ${nextPlayer}.`);
io.emit("turnMessage", `Next move by: ${player}`);
};
socket.on("myClick", (data) => {
myGame.move(player, data);
});
socket.on("myClick", (data) => {
myGame.move(nextPlayer, data)
});
以及客户端代码的相关部分:
const field = $$("td");
field.on("click", event => {
const id = event.target.id;
const fieldNumber = id.match(/\d/g).join("");
console.log(fieldNumber);
socket.emit("myClick", fieldNumber);
});