0

モノポリータイプのボードゲームで、すべてのマス目を通してペグをトラバースする方法は?

クリックすると、ランダムに生成された数値から取得した目的の位置にペグを移動する movepegbutton の関数を作成しました。

これは、Move peg Button についてこれまでに書いたものです。

(IBAction)movePegButton:(id)sender
{
    self.pegDestinationPositionIndex = self.pegCurrentPositionIndex + self.randomNumber;
    if (self.pegDestinationPositionIndex > [self.boardCordinatesArray count] - 1)
    {
         self.pegDestinationPositionIndex = self.pegDestinationPositionIndex - [self.boardCordinatesArray count];
    }
    [self animatePeg];
    self.pegCurrentPositionIndex = self.pegDestinationPositionIndex;
}

これは、ペグをアニメーション化するために書いたものです。

(void)animatePeg
{
    int destinationXCord = [[[self.boardCordinatesArray objectAtIndex:self.pegDestinationPositionIndex] objectForKey:@"x"]intValue];
    int destinationYCord = [[[self.boardCordinatesArray objectAtIndex:self.pegDestinationPositionIndex] objectForKey:@"y"]intValue];
    [UIView animateWithDuration:1.0 animations:^{
            self.peg.center = CGPointMake(destinationXCord, destinationYCord);
    }];
}

これまでのところ、ペグは目的のマスに正しく移動しますが、途中ですべてのマスを通過していません。たとえば、8X8 のマスの場合、最初のサイコロが 6 を転がすと、ペグは正しく 6 番目のマスに移動し、2 番目のサイコロが振れます。 5 をロールすると、ペグは目的のマスに正しく移動しますが、その位置に斜めに直接ジャンプし、途中のマスを横断しません。

ここで立ち往生しています。どうすればいいですか??

4

1 に答える 1

0

つまり、ペグは四角形を歩くことになっています。ボードの端をたどりますが、代わりに角を切ります、そうですか?

もしそうなら、答えは非常に簡単です。ペグがボード上に配置されたマスを確実にたどるには、元のマスから目的のマスまでのパス内のすべてのマスにペグを移動させる必要があります。

プレーヤーが 4 をロールし、正方形 9 に立っていて、正方形 13 に到達しなければならない場合。次に、ペグを直接正方形 13 に移動させる代わりに、ペグを強制的に最初に 10、次に 11、次に 12、次に最後の正方形 13.
もちろん、正方形が正方形のマナーで整列されている場合、つまり; エッジが 4 つある場合は、いくつかの最適化を行うことができ、ソース スクエアとデスティネーション スクエアの間にコーナーがある場合にのみパスを分割できます。
そしてもちろん、この最適化は、正方形がマナーのように正方形に整列していなくても、何らかの経路をたどり、「コーナー」がどこにあるかを知っている限り、適用できます。

編集:
説明されている 3 つのケース
自分のペイント スキルをテストし、目前の問題を視覚化するために、ペイント内に何かを作成しました。

提示されたコードで行っていることはCase 1です。ペグを動かすと、単一のアニメーションが実行されます。本当にやりたいのはCase 2-(void)animatePeg;です。ここでは、目的の正方形が 1 正方形以上離れていることを関数が認識する必要があるため、 1 つ の移動アニメーションではなく、一連の移動アニメーションを実行します。より正確には、アニメーションの数です。は常にindexOfDestinationSquare - indexOfSourceSquareしたがって、図のケースでは、ペグは1 つだけではなく、合計8 つの移動アニメーションを実行する必要があります。

ケース 3は、移動の方向を認識することでこのプロセスを最適化し、コーナーを曲がるときにのみ分割する方法を示しています。

これにより、私がどのようなアプローチをとるかが明確になることを願っています。このアプローチを行うには、-(void)animatePeg;関数を拡張して、単一の動きを一連の動きに分割し、動きを 1 つずつアニメーション化できるようにする必要があります。

于 2013-09-03T19:43:09.987 に答える