4

私は現在、非常に基本的なレベルで「倉庫番」ゲームを開発しています。これを for ループにしようとしていますが、完了できないようです。私の目的は、以下の移動コードの例を実行することです。「(diamondlist.Count) & (Playerlist.Count)」という別の条件を追加することに関して、構文が間違っていると感じています。エラーは「Operator」です。 「&」は、タイプ「bool」および「int」のオペランドには適用できません。二重の「&&」を追加しようとしましたが、これでも解決しません。助けていただければ幸いです-ありがとう:D

    protected override void Update(GameTime gameTime)
    {
        for (int i = 0; i < (diamondlist.Count) & (Playerlist.Count); i++)
        {
            if ((Playerlist[i].Position == diamondlist[i].Position) && kb_old.IsKeyDown(Keys.W))
            {
                if (currentMap.isWalkable(new Point(diamondlist[i].m_position.X, diamondlist[i].m_position.Y - 1)))
                    diamondlist[i].m_position.Y--;
            }
4

8 に答える 8

12

いくつかの問題があります。

  1. i < (diamondlist.Count) & (Playerlist.Count)は次のように評価されます。

    (i < diamondlist.Count) & Playerlist.Count
    

    i < diamondlist.Count式 ( )の最初の部分はですboolが、2 番目の部分 ( Playerlist.Count) はintです。&はそのような 2 つの異なるタイプを受け入れないため、不平を言っています。

  2. 次に、ビットごとの AND 演算子&である (整数の場合)を適用しようとしています。これは、両方の型が同じであれば機能しますが、不必要な CPU サイクルを消費する可能性があり、通常はブール式では使用されません。--論理演算子または条件付き and 演算子を使用することをお勧めします。&&

代わりにこれを試してください:

for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++)
{
    ...
}
于 2013-05-01T19:09:33.457 に答える
5

テスト条件を簡素化するのはどうですか?

int maxValue = System.Math.Min(diamondlist.Count,Playerlist.Count);
for (int i = 0; i < maxValue; i++)
于 2013-05-01T19:09:35.983 に答える
2

各チェックは互いに独立しています。何をチェックしているのかを明確にする必要があります。「 i 未満 diamondlist.Count および playerList.Count 」と言うとき、それは本当に「i 未満 diamondlist.Count および i 未満playerlist.Count 」を意味します。

for (int i = 0; (i < diamondlist.Count) && (i < Playerlist.Count); i++)
....
于 2013-05-01T19:09:25.363 に答える
0
for (int i = 0; i < (diamondlist.Count) && i < (Playerlist.Count); i++)
于 2013-05-01T19:09:19.057 に答える
0

あなたが何を達成しようとしているのか正確にはわかりませんが、これがあなたが望むものだと思います:

for (int i = 0; i < (diamondlist.Count && i < Playerlist.Count; i++)

于 2013-05-01T19:10:59.723 に答える
0

試すことができますか: for (int i = 0; i < (diamondlist.Count) & i < (Playerlist.COunt); i++)

あなたが得ているエラーは、それi < (diamondlist.Count) & (Playerlist.Count)が比較i < (diamondlist.Count)を実行し、 int である&with を実行していることを示しているようです。(Playlist.Count)

于 2013-05-01T19:11:21.737 に答える
0

両方の条件を確認する場合は、次のようになります。

for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++) ...

&& は論理 AND 演算子です。& はビットごとの AND 演算子です。

于 2013-05-01T19:11:58.617 に答える