用 Javascript 创建用户回合制游戏

Kin*_*eon 5 javascript

我创建了一个白板网络应用程序,其中有大量注册用户登录并开始在 html5 画布上绘图。我通过 python websockets 设计了游戏的“多人”方面,并且使用 php 登录,目前画布页面有一个“session_start();” 所以我可以添加一个功能来查看谁当前正在使用该应用程序,我觉得它也可以用于“回合制”方面。

现在我试图阻止用户同时在画布上绘图,如果可能的话,我希望每个用户都能在画布上进行绘图。我不确定如何实现这一点,但我觉得 Javascript 绝对是这背后的逻辑。

关于我将如何实现此功能的任何建议或建议?

编辑 好的,因为没有人有任何答案或建议,我会尝试向您提供我迄今为止尝试过的内容,我认为它可能在正确的方向上,即使它不起作用:

var player = document.getElementById("inputnameid").value;
var currentPlayer =  player; // player class

//array of player objs.
var array1 = [player]; // list that OnCurrentPlayerEndTurn cycles through to choose user

// call this at the start of the app
function OnStartTurn()
{
   currentPlayer.OnBeginTurn(); 

   var inputs=document.getElementById('inputty'); 
for(i=0;i<inputs.length;i++){
    inputs[i].disabled=false;
}  
                             //This function will activate the GUI so the user can now act
}

// call this function when setTimeout is 10 seconds
function OnCurrentPlayerEndTurn()
{
    setTimeout('OnCurrentPlayerEndTurn();', 10*1000); 
   change currentPlayer variable to the next player in line
   OnStartTurn(); // will cause the next player to begin his turn
}
Run Code Online (Sandbox Code Playgroud)

cou*_*and 3

您的问题似乎集中在前端代码上,虽然前端代码很重要,但并不是这个问题的关键部分。正如您所指出的,回合制游戏的核心是活跃玩家的循环传球。您可能希望在服务器端完成此操作:从那里协调各个玩家要容易得多。

您将在服务器上维护给定游戏的玩家列表。在游戏开始之前,每个客户端都会向服务器注册,并在其中存储一个可识别的用户 ID。然后在每一轮中,服务器允许每个玩家轮流。回合顺序当然取决于游戏的具体情况,但无论回合顺序是固定的还是可变的,总体思路都是相同的。

注册玩家

当轮到每个玩家时,服务器会向该玩家的客户端发送一张票证。这本质上是一个一次性密码本 (OTP) 概念:生成一个难以猜测的随机令牌(因此不要仅使用递增的整数,而是使用一些廉价的哈希函数等)。然后,客户端发送此票证以及他们想要进行的移动的请求,并且服务器在采取任何操作之前验证该票证是否对应于当前活跃的玩家。

玩家移动

根据游戏的规则和要求,服务器可以立即使票证无效(例如,国际象棋),可以等到“回合结束”移动,或者可以在一段时间后使票证无效。然后,服务器为下一个要走的玩家生成一张新票。

客户端代码自然地遵循此架构。默认情况下可以禁用所有输入,并且仅当客户端持有有效票证时才启用。如果票证设计为超时,您可能需要一种查询服务器的方法来确定它是否仍然有效。如果用户始终负责结束自己的回合(显式或隐式),那么您就可以摆脱困境。