1

だから私が最初にやろうとしていることについて少し詳しく説明します。私は、ユーザーが単語を書くオンライン ゲーム システムを持っています。これは、いくつかの値でデータベースに投稿されます。これはすべてうまくいきます。

データベース エントリの例を次に示します。

uniqueID   victim      rival    wordguess   won
   6      607260120   504374351     Gg       0

さて、問題は、多くの被害者が多くのライバルとゲームを開始できることです。被害者は、自分たちに対してゲームを開始したこと、および人に対してゲームを開始したことをどのように確認しますか?

これらのことを次の行でチェックするために現在使用されている2つの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 は間違いなく私の弱点であり、これを解決する適切な方法が本当にわかりません。最初のアイデアは、データベース内で各ユーザー/被害者に独自のテーブルを与えることでしたが、他のユーザー ID のテーブル内でそれらに対してゲームをチェックするという問題が発生し、非常に速く乱雑になります。

おそらく、これはリストビューアダプター内で行われていることも追加する必要があるため、リストビューアイテムごとに f.id が変更され、これらのチェックもすべてのリストビューアダプターごとに行われます。これはあまり効率的ではないことがわかりますが、私の主な焦点はそれを取得することです動作し、そこから最適化します。

また、「新しいゲーム」ボタンが完全に機能していることに注意してください。2番目のボタンはほとんど同じ種類のものだと思いましたが、どのように操作しても機能しません。私が見落としているもの。アイデアはありますか?

わかりました、この人物によってあなたに対してゲームが開始されたかどうかを確認するための SQL ステートメントが何も返さないという事実に絞り込みました。ダメです、いろいろ試しました!

4

1 に答える 1

0

誰かがすでに対戦しているすべてのプレイヤーを選択しないでください。代わりに、次のようにクエリします。

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

この方法では、行が返されるか返されないかのどちらかであり、返された行をチェックして行の 1 つに問題があるかどうかを確認する必要はありません。これにより、Accept ロジックも非常に簡単になります。

于 2012-08-16T00:12:16.493 に答える