我创建了一个白板网络应用程序,其中有大量注册用户,登录并开始在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
}
答案 0 :(得分:1)
您的问题似乎集中在前端代码上,虽然这很重要,但并不是此问题的关键部分。正如你所指出的,回合制游戏的核心是活跃玩家的循环传递。您可能希望在服务器端完成此操作:从那里协调各种玩家要容易得多。
您将维护服务器上给定游戏中的玩家列表。在游戏开始之前,每个客户端都将向服务器注册,并在那里存储识别用户ID。然后在每一轮中,服务器允许每个玩家转弯。转弯顺序当然取决于游戏的具体情况,但总体思路是相同的,无论转弯顺序是固定的还是流畅的。
当每个玩家转过身时,服务器会向该玩家的客户发送一张票。这本质上是一次性填充(OTP)概念:生成难以猜测的随机令牌(因此不要仅使用递增的整数,而是使用一些廉价的散列函数等)。然后,客户端发送此票证以及他们想要进行移动的请求,并且服务器在采取任何行动之前验证票证是否对应于当前活动的玩家。
根据游戏的规则和要求,服务器可以立即使票证无效(例如国际象棋),可以等到“回合结束”移动,或者可以在一段时间后使票证无效。然后,服务器为下一个玩家生成一张新票。
客户端代码自然地来自这种架构。默认情况下,可以禁用所有输入,并且仅在客户端持有有效票证时启用。如果票证设计为超时,您可能需要一种查询服务器以确定它是否仍然有效的方法。如果用户总是负责结束他们自己的转向(明确地或隐含地),那么你可以在没有它的情况下逃脱。