javascript - 在 Javascript 中创建用户回合制游戏

标签 javascript

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

现在我试图阻止用户同时在 Canvas 上绘图,如果可能的话,我希望每个用户在 Canvas 上绘图时都有公平的轮流。我不确定如何完成此操作,但我认为 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
}

最佳答案

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

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

register player

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

player move

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

客户端代码自然遵循此架构。默认情况下可以禁用所有输入,并且仅在客户端持有有效票证时才启用。如果票据设计为超时,您可能需要一种查询服务器的方法以确定它是否仍然有效。如果用户总是负责结束他们自己的回合(明确或隐含),你可以不用这样做。

关于javascript - 在 Javascript 中创建用户回合制游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26573696/

相关文章:

JavaScript - 替换字符串包含旧字符串,因此替换自身

javascript - 如果 0 为 null,则更改数组中每个对象的值

javascript - 添加注销前的 jQuery 确认

javascript - IE9 和 Safari 5 中单页上的 2 个 ACE 编辑器

javascript - while 循环中的代码未被执行 JavaScript

javascript - 如果我将 JavaScript 保留在底部或将 JavaScript 保留在 document.ready 中的 <head> 中,两者是一回事吗?

javascript - 如何在另一个函数中调用reduce函数

java - 图像在部署到服务器时被禁止使用 403

javascript - 在 Canvas 中旋转图像

javascript - 如何使复选框开关来回改变英雄背景?