流星实时游戏 - 根据他们的得分匹配两名球员?

时间:2015-02-26 02:04:46

标签: meteor

我想建立一个实时测验游戏,随机匹配两个玩家(如果他们登录,则根据他们的获胜率)。我已经阅读了Discover Meteor一书并对该框架有了基本的了解,但我根本不知道如何实现匹配部分。有谁知道怎么做?

3 个答案:

答案 0 :(得分:1)

如果您想匹配分数相近的用户,您可以执行以下操作:mongodb - Find document with closest integer value

那些Mongo查询的Meteor代码非常相似,但有一些细微的差别是有点棘手的。在Meteor中,它看起来像这样:

  SP  // "selected player" = the User you want to match someone up with
 var score = SP.score; // selected player's score

  var queryLow = {score: {$lte:score},_id:{$ne:SP._id}};
  var queryHigh = {score:{$gte:score},_id:{$ne:SP._id}};

  // "L" is the player with the closest lower score
  var L=Players.findOne(queryLow,{sort:{score:-1},limit:1});

  // "H" is the player with the closest higher score
  var H=Players.findOne(queryHigh,{sort:{score:1},limit:1});

所以,现在你已经引用了那些在所选选手的正上方和右下方分数的玩家'。在使其成为随机的方面,也许从一个简单的算法开始,比如"将我与下一个可用得分最接近的玩家匹配" ,如果它太可预测和无聊,你可以在算法中抛出一些随机性。

您可以在此处查看上面的Meteor代码http://meteorpad.com/pad/4umMP4iY8AkB9ct2d/ClosestScore 你可以用它来解决问题,看看它是如何工作的。 祝好运!流星很棒,我真的很喜欢它。

答案 1 :(得分:0)

一种实现可能如下:

用户以某种方式触发“寻找游戏”事件,该事件将user.profile.lookingForGame上的属性设置为true。然后该事件调用服务器端Meteor方法,该方法查询寻找游戏的所有其他在线用户。

从那里你真的取决于你匹配后如何处理用户。

要确定所有在线用户,请尝试使用“用户状态”包: https://github.com/mizzao/meteor-user-status

添加后,任何在线用户都会在“在线”的个人资料对象中拥有一个属性。您可以使用它来查询所有在线用户。

答案 2 :(得分:0)

如果你将软件包peppelg:random-opponent-matcher添加到你的应用程序中,你可以像这样匹配对手:

在服务器上,您需要具有RandomOpponentMatcher的实例,如下所示:

new RandomOpponentMatcher('my-matcher', {name: 'fifo'}, function(user1, user2){
    // Create the match/game they should play.
})

当两个用户匹配相互比赛时,您传递给RandomOpponentMatcher的功能将被调用。在其中,你可能想要创建用户应该相互比赛的比赛(这个包只能匹配对手,它不包含任何玩游戏/比赛的功能)。

在客户端上,您还需要创建RandomOpponentMatcher的实例,但只需将名称传递给它(与您在服务器上使用的名称相同):

myMatcher = new RandomOpponentMatcher('my-matcher')

然后,当用户登录并与随机对手匹配时,您需要做的就是调用add方法。例如:

<template name="myTemplate">
    <button class="clickMatchesWithOpponent">Match me with someone!</button>
</template>
Template.myTemplate.events({
    'click .clickMatchesWithOpponent': function(event, template){
        myMatcher.add()
    }
})

当两个不同的登录用户点击该按钮时,您传递给服务器上RandomOpponentMatcher的功能将被调用。