【问题标题】:Get a scores of all users from the room after game completes in socket.io在 socket.io 中游戏完成后获取房间内所有用户的分数
【发布时间】:2017-12-23 07:29:40
【问题描述】:

我正在开发一款多人游戏,其中有四个房间,每个房间都有多个正在玩游戏的客户。完成游戏后,我想将所有用户的分数发送到服务器,将其存储在数组中,进行比较并希望返回获胜者的姓名。那么,在完成游戏后,我怎样才能得到房间里所有用户的分数。

var delayInMilliseconds = 2000;
var hit = 0;

$('#hit').click(function() 
{
  hit++;
});

var modal = document.getElementById('myModal');
var btn = document.getElementsByClassName("common");
var span = document.getElementsByClassName("close")[0];

setTimeout(function() 
{
    var seconds_left = 15;
    var interval = setInterval(function() 
    {
        document.getElementById('timer').innerHTML = --seconds_left;
        if (seconds_left <= 0)
        {
            // document.getElementById('timer').innerHTML = "Time's up!";
            clearInterval(interval);
          console.log(hit);
          $('#hit').attr("disabled", true);
          $('#score').html(hit);
          modal.style.display = "block";

        }
    }, 1000);
}, delayInMilliseconds);

上面是游戏的客户端代码,游戏会在15秒后完成,所以我的想法是我可以将数据发送到if(seconds_left &lt;= 0),但是我怎样才能得到房间里所有客户端的分数。

【问题讨论】:

  • 我猜hit 是分数?
  • 是的,命中就是得分
  • 您可能希望将分数发送回服务器,或者您可以创建一个端点,将分数发送到该端点,以便将其保存到数据库中。

标签: javascript node.js express socket.io


【解决方案1】:

首先,您必须以某种方式识别用户。让我们将它们保存到名为 users 的对象中,其中包含 key userName 和 value score。就像这样:var users = { user1: 12, user2: 9 };.
比我们必须将此数据发送到服务器。我们可以像官方socket.io documentation的例子那样做

<script>
  var socket = io('http://localhost');
  socket.on('connection', function () {
    console.log('Socket connected');
  });

  // here is your code to handle users actions. 
  // When the game is finished, you do it like this
  socket.emit('game finished', users);
</script>

在服务器端,您可以使用要解析的数据侦听 game finished 事件。

此外,您可以使用ajax 向服务器发出请求以处理分数数据,您可以阅读有关jQuery implementationnative JS 的信息

【讨论】:

  • 谢谢@Grynets。我明白了你解析数据的观点。但我有点困惑。即房间有四种用途。那么,服务器如何才能注意到所有用户的分数都提交了呢?因为,仅存储所有用户的分数后,我可以比较并将其发送给所有用户。抱歉,如果这是个愚蠢的问题,因为我是初学者。
  • @DharaVihol 在我看来,您在游戏中与用户的过程应该是这样的: 1. 用户来到游戏中。您向服务器发出用户已经到来的事件,并为其提供一些 id(或名称)以识别他/她。比所有用户都完成游戏室,他们玩过,当游戏结束时,你会向服务器发出事件。在那里你将数据存储在数组中。就像这个[{room1: [scores]}]。比您检查数组长度是否为 4,如果是,您可以将结果和emit 结果与用户进行比较。如果没有,您可以等到数组填充并发出事件。
猜你喜欢
  • 2018-04-06
  • 2017-03-21
  • 1970-01-01
  • 2020-03-17
  • 2021-03-08
  • 1970-01-01
  • 2015-10-06
  • 2017-02-25
  • 1970-01-01
相关资源
最近更新 更多