如何识别这个数组中某些字符的索引?

时间:2013-04-24 02:49:05

标签: ios objective-c arrays algorithm multidimensional-array

对于我的游戏,我在文本文件中读取以设置我的地图。文本文件是由逗号分隔的一系列字符,每个字符代表游戏中的图块。例如,我的地图文件的一部分可能如下所示:

  

FR,G,G,

     

克,FY,W,

     

G,G,W,

在此,“fr”代表花红色,“g”代表草,“w”代表水等。现在问题是地图比显示的地图部分大得多。例如,地图文件可能如下:

  

G,G,G,W,G,G,FR

     

克,FY,W,W,G,G,G

     

G,G,W,G,G,FR,克

     

G,G,FY,G,G,W,克

但我一次只能显示这些图块的3x3部分,所以例如我可以在地图的右上角显示上面地图文件的3x3部分,即瓷砖:

  

G,G,G,W, G,G,FR

     

克,FY,W,W, G,G,G

     

G,G,W,G,的克,FR,克

     

G,G,FY,G,G,W,克

但是因为我把这个文件读成1维数组(Objective-C中没有2D数组),我的问题是我无法弄清楚如何识别我想要显示的部分的索引。

因此,此地图将在内部表示为(粗体字符是将显示的字符):

  

G,G,G,W, GZ,G,FR 下,克,FY,W,W, G,G,G 下,G,G,W ,G,的克,FR,克下,G,G,FY,G,G,W,克

我用“z”标识起始字符,因此如果我想要显示右上部分,上面的地图可能会显示如下:

  

G,G,G,W, GZ,G,FR

     

克,FY,W,W, G,G,G

     

G,G,W,G,的克,FR,克

     

G,G,FY,G,G,W,克

我的问题是如何识别构成我想要显示的部分的字符的索引?

修改 我根据@Ted的答案修改了我的代码,但结果很奇怪。这是我制定的算法:

NSMutableArray *nodes = [[NSMutableArray alloc] init];
int tilesAcross = DEVICE_WIDTH/TILE_WIDTH;
int tilesUp = DEVICE_HEIGHT/TILE_HEIGHT;

int startX = self.renderer.indexOfStartNode / BIOME_WIDTH;
int startY = self.renderer.indexOfStartNode % BIOME_WIDTH;

for(int index = 0; index < self.entireMap.count; index++) {

    int currentX = index / BIOME_WIDTH;
    int currentY = index % BIOME_WIDTH;

    if((currentX > startX && currentX <= (startX + tilesAcross)) && (currentY > startY && currentY <= (startY + tilesUp))) {

        [nodes addObject:[self.entireMap objectAtIndex:index]];
    }
}

1 个答案:

答案 0 :(得分:1)

对于线性数组中逐行存储宽度为w的矩阵,您可以在线性索引i和坐标row之间来回转换,{{1使用公式:

column

这适用于从零开始的索引。