0

如何在大富翁类型的棋盘游戏中穿过所有方块?

我已经为 movepegbutton 编写了一个函数,它在单击时将挂钩移动到它从随机生成的数字中获得的目标位置。

这是我迄今为止为移动挂钩按钮所写的内容。

(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 个方格,对于第二次运行骰子掷出 5,钉子正确地移动到目标方格,但它直接沿对角线跳到那个位置,它不会穿过它所经过的方格。

我卡在这里了,我该怎么办??

4

1 回答 1

0

所以你的钉子应该走在一个广场上,嗯。沿着板的边缘走,而是偷工减料,对吗?

如果我是这样,那么答案很简单。为确保钉子跟随棋盘上的方格,您必须使其移动到从源方格到目标方格的路径中的每个方格,否则它将简单地切入角落并直奔目标方格。

如果玩家掷出 4,并且站在 9 格上并且必须到达 13 格。那么我不会让钉子直接移动到格子 13,而是强制钉子先移动到 10,然后是 11,然后是 12,然后是最后一个方格 13.
当然,如果方格是在一个方形庄园中对齐的,那就是;四个边,然后可以进行一些优化,并且只有在源方格和目标方格​​之间有一个角时才分割路径。
当然,这种优化也可以应用,即使正方形不是像庄园一样的正方形对齐,只要它遵循一些路径,并且你知道“角落”在哪里。

编辑:
描述的三种情况
为了尝试测试我的绘画技巧并尝试将手头的问题可视化,我在绘画中创建了一些东西。

您在提供的代码中所做的是Case 1。移动挂钩时,您正在执行单个动画。您真正想要做的是Case 2,在这里您的函数-(void)animatePeg;应该识别出目标方格超过 1 个方格,因此不做单个 移动动画,而是一系列移动动画,更准确地说,动画的数量总是indexOfDestinationSquare - indexOfSourceSquare。所以在图示的例子中,钉子应该做总共八个移动动画而不是一个

案例 3展示了如何通过识别移动方向来优化此过程,并且仅在绕过拐角时拆分。

我希望这能阐明我将采取什么方法。要执行此方法,您需要扩展您的-(void)animatePeg;函数,以便能够将单个动作拆分为一系列动作,然后逐个动画化这些动作。

于 2013-09-03T19:43:09.987 回答