0

我是iOS开发的初学者,所以这是我的问题,

我试图实现一个简单的战舰游戏,我手动将我的船放入 allCoordinates 数组中,第一个元素是 x 坐标,第二个元素是 y 坐标,第三个元素是船的大小。

问题是; 每次尝试必须只增加一次命中和未命中,但是当用户进入第 6 艘船时,命中变为 1,未命中变为 5,因为循环继续检查每一行并增加未命中。

我不能在错过++之后休息一下,所以我在这里没有想法。

谢谢 :

for ( int i=0 ;i<19;i++ ){


    if ([self.xCoordinate.text isEqualToString:[allCoordinates objectAtIndex:i*3]] && 
        [self.yCoordinate.text isEqualToString:[allCoordinates objectAtIndex:i*3+1]] )

    {



        NSLog(@"hit");

        hit++;

        result.text = [NSString stringWithFormat:@"You hit %ix1 ship",[allCoordinates objectAtIndex:i*3+2]];

        break;
    }else {

        NSLog(@"not hit");
       result.text = [NSString stringWithFormat:@"You missed"];


        missed++;

    }

hitLabel.text = [NSString stringWithFormat:@"%i!",hit];

missed = missed%18;

missedLabel.text = [NSString stringWithFormat:@"%i!",missed];

这是我的数组

allCoordinates = [[NSArray alloc] initWithObjects:
                          @"15",@"2",@"3",
                          @"13",@"2",@"3",
                          @"14",@"2",@"3",
                  @"10",@"7",@"3",
                  @"11",@"7",@"3",
                  @"12",@"7",@"3",
                    @"16",@"8",@"3",
                    @"16",@"9",@"3",
                    @"16",@"10",@"3",
                          @"3",@"4",@"4",
                          @"4",@"4",@"4",
                          @"5",@"4",@"4",
                          @"6",@"4",@"4",
                  @"9",@"10",@"4",
                  @"9",@"11",@"4",
                  @"9",@"12",@"4",
                  @"9",@"13",@"4",
                          @"5",@"14",@"1",
                          @"18",@"17",@"1",
                            nil];

编辑:我通过在 for 循环之后放置一个 BOOL ishit 来修复它,它解决了我的问题

   if(ishit==YES){

    hit++;

}else {
    missed++;
}
4

1 回答 1

2

如果您对点击数感兴趣,请在循环期间计算点击数。不要计算失误。看起来计数无论如何都无关紧要,所以BOOL如果有任何东西被击中,只需使用 for 。在循环之后,如果有任何命中,则设置命中文本。如果没有,所有都是未命中,您应该设置未命中文本。

于 2013-07-08T13:58:45.120 回答