1

所以关于我首先要做什么的一些细节。我有一个在线游戏系统,用户在其中写一个单词,然后将其发布到带有一些值的数据库中。这一切都很好。

这是一个数据库条目示例:

uniqueID   victim      rival    wordguess   won
   6      607260120   504374351     Gg       0

现在的问题是,许多受害者可以与许多对手开始游戏,受害者如何检查他们是否对他们发起了游戏,以及他们是否已经对一个人发起了游戏?

我有两个 PHP 文件,目前用于通过这些行检查这些内容:

$query = "SELECT `rival` FROM currentgames WHERE `victim` = '$victim'";
echo $row["rival"].",";

而受害者则相反。

现在在我的 Java 中,我正在检查 listarray 适配器中的当前值,如下所示:

for (int i = 0;i<NetPlay.rivalArray.length-1;i++)
        {
            Log.i("VICTIM ARRAY DATA ", NetPlay.rivalArray[i]);

            if (NetPlay.rivalArray[i].equals(f.id))
            {
                ingame = true;
                break;

            }
            else
            {
                ingame = false;

            }
        }

        for (int i = 0;i<NetPlay.victimArray.length-1;i++)
        {
            Log.i("RIVAL ARRAY DATA ", NetPlay.victimArray[i]);

            if (NetPlay.victimArray[i].equals(NetPlay.myId))
            {
                battle = false;
                break;
            }
            else
            {
                battle = true;

            }

        }

        if (battle.equals(false))
        {
            battleBtn.setVisibility(View.INVISIBLE);
        }
        else 
        {
            battleBtn.setVisibility(View.VISIBLE);
        }

        if (ingame.equals(true))
        {
            newgameBtn.setVisibility(View.INVISIBLE);
        }
        else 
        {
            newgameBtn.setVisibility(View.VISIBLE);
        }

奇怪的是,我可以让玩家显示他们是否已经与对手进行了一场比赛,从而隐藏了“新游戏”按钮,但我无法让“接受游戏”按钮正常工作。数据库和 SQL 绝对是我的弱点,我真的想不出一个合适的方法来解决这个问题。最初的想法是在数据库中为每个用户/受害者提供他们自己的表,但是随后提出了在其他 UserId 的表中检查游戏与他们的问题,很快就会变得混乱。

我可能还应该添加这是在 listview 适配器内部进行的,因此每个 listview 项目的 f.id 都会发生变化,这些检查也会发生在每个 listview 适配器上,我意识到这不是很有效,但我的主要重点是得到它工作,然后从那里优化。

另外要注意的是,我的“新游戏”按钮工作正常,我认为第二个按钮几乎是同一类的东西,但无论我用哪种方式工作,它都不起作用,我确定它我只是忽略了一些东西。有什么想法吗?

好的,我已将其范围缩小到这样一个事实,即用于检查此人是否已针对您发起的游戏的 SQL 语句没有返回任何内容,所以这显然是我出错的地方,但我就是不知道是什么错了,各种办法都试过了!

4

1 回答 1

0

不要选择某人已经与之对抗的所有玩家。相反,查询类似:

SELECT `uniqueID` 
FROM currentgames 
WHERE (`victim` = '$victim' AND `rival` = '$rival')
OR (`victim` = '$rival' AND `rival` = '$victim');

这样,您要么返回一行,要么不返回,并且您不需要检查返回的行来查看其中一行是否有问题。这也应该使您的接受逻辑更容易。

于 2012-08-16T00:12:16.493 回答