3

1D配列の衝突検出タイプの方法に苦労しています。

私は最大 4 人のプレーヤーがいるコンソール ゲームを持っています。各プレーヤーは順番にサイコロを転がし、ボード上で動きます。

ルールは、ボード上に同時に 1 人のプレイヤーしか存在できないということです。

したがって、プレーヤー 1 が 1 をロールした場合、彼はスクエア 1 にいます。プレーヤー 2 が自分のターンに 1 をロールした場合、彼はスクエア 2 にいます。プレーヤー 3 が自分のターンに 1 をロールした場合、彼はスクエア 3 にいます。等々...

private static void PlayerMove(int playerNo)
{
    // TODO: Makes a move for the given player

        for (int i = 0; i < NumberOfPlayers; i++)
        {
            NextMove = playerPositions[i] + playerPositions[i] + DiceThrow();
            playerPositions[i] = NextMove;
        }
}

これは、プレーヤーを移動するための現在の方法です。これは、プレーヤーがそれぞれ移動できることを示す現時点でのテスト方法です。この結果、各プレイヤーは正方形番号 1 に着地します。

static bool PlayerInSquare(int squareNo)
{
    //TODO: write a method that checks through the 
    //rocket positions and returns true if there is a rocket in the given square

    if (This conditional is what has me confused)
    {
        return true;
    }

}

これは私に頭を悩ませている方法です。私は条件付きで実験しており、半分は機能していましたが、うまくいかないようです。

よろしくお願いします。

4

2 に答える 2

3

playerPositions[]プレーヤーがいる正方形の番号を含む整数の配列であると仮定すると、次を試すことができます。

static bool PlayerInSquare(int squareNo)
{
    return playerPositions.Any(pos => pos == squareNo);
}

Linq-y の少ないソリューション (同じことになります) は次のようになります。

static bool PlayerInSquare(int squareNo)
{
    for (int i = 0; i < NumberOfPlayers; i++)
        if (playerPositions[i] == squareNo)
            return true;

    return false;
}
于 2012-11-02T17:17:11.883 に答える
1

次のように使用できます。

static bool PlayerInSquare(int squareNo)
{
    return playerPositions.Any(pos => pos == squareNo);
}
于 2012-11-02T17:17:30.217 に答える