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

标签 ios objective-c arrays algorithm multidimensional-array

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

fr,g,g,

g,fy,w,

g,g,w,

其中,“fr”代表花红,“g”代表草,“w”代表水等等。现在的问题是 map 比显示的 map 部分大很多。例如, map 文件可能如下:

g,g,g,w,g,g,fr

g,fy,w,w,g,g,g

g,g,w,g,g,fr,g

g,g,fy,g,g,w,g

但我一次只会显示这些图 block 的 3x3 部分,因此例如我可以在 map 的右上角显示上述 map 文件的 3x3 部分,这将是图 block :

g,g,g,w,g,g,fr

g,fy,w,w,g,g,g

g,g,w,g,g,fr,g

g,g,fy,g,g,w,g

但是由于我将这个文件读入一维数组(Objective-C 中没有二维数组),我的问题是我不知道如何识别我想要显示的部分的索引。

因此这张 map 在内部会表示为(粗体字符是将要显示的字符):

g,g,g,w,gz,g,fr,g,fy,w,w,g,g,g,g,g,w,g,g,fr,g,g,g,fy,g,g,w,g

我用“z”标识起始字符,所以如果我想显示右上部分,上面的 map 可能会这样:

g,g,g,w,gz,g,fr

g,fy,w,w,g,g,g

g,g,w,g,g,fr,g

g,g,fy,g,g,w,g

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

编辑: 我根据@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]];
    }
}

最佳答案

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

i = row * w + column
row = i / w
column = i % w

这对从零开始的索引有效。

关于ios - 如何识别这个数组中某些字符的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16182545/

相关文章:

iphone - iOS 网站。使电话号码不可点击

objective-c - NSMutableArray 和 NSDictionary 的内存泄漏

objective-c - 移动 NSView 直到它碰到边界

iOS 8 AutoLayout 改变 View 的位置

php - 从查询返回多个数组

ios - Swift 如何以编程方式移动 UIButton?

ios - iPhone 如何在按下音量键时隐藏音量覆盖

arrays - 近似排序算法

c++ - 使用字符数组调用 scanf_s()

iOS 根据浮点值排序数组