【问题标题】:Two players game - how to match them using database?两个玩家游戏 - 如何使用数据库匹配他们?
【发布时间】:2014-09-04 14:31:19
【问题描述】:

我正在开发一个简单的游戏程序。这个游戏是基于网络的,两个玩家互相玩。现在我需要随机匹配玩家。我使用的方法如下。

玩家进来
-> 将用户放入数据库中,可用性为 1,配对状态为 0。
-> 随着更多玩家的加入,db有很多想要匹配的玩家。
-> 所以玩家得到其他玩家ID的数组并随机选择一个
-> 然后把ID作为对手。
-> 将可用性更改为 0,配对状态为 1。

所以这里的问题是,有时 2 名玩家获得相同的 ID(相同的对手)。所以我真的在寻找解决这个问题的方法。

我的想法是我做临时对手并检查玩家是否正确地相互拥有对方,然后将其作为实际对手。如果他们没有自己的名字作为临时对手,则移除临时对手并继续寻找匹配的球员。

我试图描述我遇到的问题。任何想法将不胜感激!

谢谢!

【问题讨论】:

  • 匹配玩家时锁定数据库表
  • 找到解决方案了吗?
  • 不,我还没有解决这个问题。我想基本上我想知道如何在线连接两个玩家。由于我使用 db(mysql) 连接它们,因此会产生很多问题。

标签: algorithm


【解决方案1】:

主要取决于玩家匹配的实现方式,但你需要确保你只分配两个尚未分配的玩家,并且每个ID只使用一次。

是否有多个进程在进行匹配?

【讨论】:

  • 没有。只有一个进程进行匹配,它有服务器。我还读到,当我执行“ALTER TABLE ...”时,mysql 会暂时锁定表,因为访问是只读的。我想我应该在分配之前尝试使用 temp 和 actual 方法仔细检查?
  • @Jules 您能否将实际的 SQL 查询添加到您的问题中?如果只有一个进程分配 ID,则查询中可能会出错。
【解决方案2】:

你应该有一笔交易。将对手的可用性设置为 0 并创建一个游戏行。创建完成后,检查对方是否已经玩过其他游戏,如果是,则回滚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2023-01-27
    • 1970-01-01
    • 2011-03-12
    相关资源
    最近更新 更多