2

私は大学でc#を使用して吟遊詩人のゲームを作成する任務を負っています。

2〜4人のプレイヤーがいる必要があり、各プレイヤーは順番にサイコロを振ります。目的は、グリッドの最後の正方形に到達することです。

この質問に関連する唯一のルールは、一度に同じマスにいることができるプレイヤーは1人だけであるということです。

だから例えば

両方のプレーヤーは位置0から開始します。

プレーヤー(A)は正方形1で1 =プレーヤー(A)をロールします。プレーヤー(B)は1 =プレーヤー(B)をロールし、プレーヤー(A)を「スキップ」して正方形2に着地します。

私はサイコロを振る方法と私の知識に関してはそれらが質問に関連していないという主なものを省略しました。

private static void PlayerTurn(int playerNo)
        {
        playerPositions[playerNo] = playerPositions[playerNo] + RollDice();  
        // The selected player rolls the dice and moves x amount of squares 
        //(dependant on dice roll value)
        }

それが各プレイヤーを動かす方法です。

私が苦労しているのは次の方法です。

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

メソッドは、配列内の衝突をチェックする必要があります。したがって、プレーヤー(A)が最初のロールで1をロールし、プレーヤー(B)が最初のロールで1をロールした場合、プレーヤー(B)の「リープフロッグ」プレーヤー(A)を正方形2に移動させる必要があります。

現時点では、それが役立つ場合は、ゲームはコンソールで実行されています。この質問の形式について申し訳ありませんが、これまでここで質問したことはありません。

どうもありがとう

4

1 に答える 1

1

さて、あなたは単に両方のプレーヤーが同じ位置を共有するかどうかをチェックする必要があります、そしてその場合、「アクティブなプレーヤー」はもう1つ動くことが許されます

if(playerpositions[otherPlayer] == playerpositions[currentPlayer])
    playerpositions[currentPlayer]++;

したがって、そのための関数を作成する必要がある場合は、次のようになります。

static bool RocketInSquare(int squareNo)
{
    return playerpositions[0] == squareNo ||
           playerpositions[1] == squareNo ||
           playerpositions[2] == squareNo ||
           playerpositions[3] == squareNo;
}

その後

int dice = RollDice();

if(RocketInSquare(playerPositions[playerNo] + dice))
{
    playerPositions[playerNo] += dice +1;
}
else
{
    playerPositions[playerNo] += dice;
}
于 2012-11-01T17:25:39.433 に答える