对于我的游戏,我读入文本文件以设置我的地图。文本文件是由逗号分隔的一系列字符,每个字符代表游戏中的一个图块。例如,我的地图文件的一部分可能如下所示:
法,克,克,
g,fy,w,
g,g,w,
其中,“fr”代表花红,“g”代表草,“w”代表水,等等。现在的问题是地图比显示的地图部分大得多。例如,地图文件可能如下:
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
但是我一次只会显示这些图块的 3x3 部分,因此例如我可以在地图的右上角显示上述地图文件的 3x3 部分,这将是图块:
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 中没有二维数组),我的问题是我无法弄清楚如何识别我想要显示的部分的索引。
所以这个地图将在内部表示为(粗体字符是要显示的字符):
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”标识起始字符,所以如果我想显示右上角部分,上面的地图可能会显示如下:
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]];
}
}