如何遍历iOS中Monopoly类型游戏中的所有方块

时间:2013-09-03 19:29:00

标签: ios objective-c

如何通过Monopoly式棋盘游戏中的所有方块遍历挂钩?

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

这是我到目前为止为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个方格,对于第二次运行骰子滚动5,挂钩正确地移动到目标方块但它直接跳到对角线的那个位置,它没有遍历它所带来的方块。

我被困在这里,我该怎么做?

1 个答案:

答案 0 :(得分:0)

所以你的挂钉应该走在一个正方形,ei。按照董事会的边缘,但改为削减角落,我是对的吗?

如果我是这样,那么答案非常直截了当。为了确保挂钩跟随板上的正方形,你必须移动到从源方到目标方的路径中的每个方格,否则它将简单地切割角落并直接前往目的地方块。

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

编辑:
The described three cases
为了尝试测试我的绘画技巧并尝试可视化手头的问题,我在绘画中创造了一些东西。

您在演示代码中所做的是案例1 。移动挂钩时,您正在执行单个动画。你真正想做的是案例2 ,这里你的函数-(void)animatePeg;应该认识到目标广场距离超过1平方,因此不能做移动动画,但一系列移动动画,更准确地说,动画的数量总是indexOfDestinationSquare - indexOfSourceSquare。因此,在图示的情况下,peg应该总共执行八个移动动画而不是仅一个

案例3 显示了如何通过识别移动的方向来优化此过程,并且仅在转弯时分割。

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