从文本文件中获取数据并将其输入二维数组
Getting data out of a textfile and feeding it into a 2d array
我想让我的游戏中的关卡从文本文件加载并将其加载到二维数组中,这就是关卡文本文件的外观:
0,0,0,0,0,0,0,0,0,0
1,1,1,1,1,1,1,1,1,1
2,2,2,2,2,2,2,2,2,2
3,3,3,3,3,3,3,3,3,3
4,4,4,4,4,4,4,4,4,4
5,5,5,5,5,5,5,5,5,5
6,6,6,6,6,6,6,6,6,6
7,7,7,7,7,7,7,7,7,7
8,8,8,8,8,8,8,8,8,8
9,9,9,9,9,9,9,9,9,9
我希望每个数字在游戏中都是一个单独的图块,逗号将充当分隔符,但我不知道如何将数据从中实际提取到我的二维数组中。这是我的进度:
Tile[,] Tiles;
string[] mapData;
public void LoadMap(string path)
{
if (File.Exists(path))
{
mapData = File.ReadAllLines(path);
var width = mapData[0].Length;
var height = mapData.Length;
Tiles = new Tile[width, height];
using (StreamReader reader = new StreamReader(path))
{
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
Tiles[x, y] = new Tile(SpriteSheet, 5, 3, new Vector2(x * 64, y * 64));
}
}
}
}
}
Tiles[x, y] = new Tile() 行中的数字 5 和 3 表示纹理在纹理图集中的位置。我想添加一个 if 语句,如果文件中的数字在左上角为 0,我希望 Tiles[0, 0] 设置为我的 textureatlas 中的特定行和列。任何对此的帮助将不胜感激,我没有看到它!
首先,var width = mapData[0].Length;
要return字符数组的长度,包括逗号,是19。看起来你不想return逗号.所以,你应该像这样拆分字符串:
Tile[,] Tiles;
string[] mapData;
public void LoadMap(string path)
{
if (File.Exists(path))
{
mapData = File.ReadAllLines(path);
var width = mapData[0].Split(',').Length;
var height = mapData.Length;
Tiles = new Tile[width, height];
using (StreamReader reader = new StreamReader(path))
{
for (int y = 0; y < height; y++)
{
string[] charArray = mapData[y].Split(',');
for (int x = 0; x < charArray.Length; x++)
{
int value = int.Parse(charArray[x]);
...
Tiles[x, y] = new Tile(SpriteSheet, 5, 3, new Vector2(x * 64, y * 64));
}
}
}
}
}
我想让我的游戏中的关卡从文本文件加载并将其加载到二维数组中,这就是关卡文本文件的外观:
0,0,0,0,0,0,0,0,0,0
1,1,1,1,1,1,1,1,1,1
2,2,2,2,2,2,2,2,2,2
3,3,3,3,3,3,3,3,3,3
4,4,4,4,4,4,4,4,4,4
5,5,5,5,5,5,5,5,5,5
6,6,6,6,6,6,6,6,6,6
7,7,7,7,7,7,7,7,7,7
8,8,8,8,8,8,8,8,8,8
9,9,9,9,9,9,9,9,9,9
我希望每个数字在游戏中都是一个单独的图块,逗号将充当分隔符,但我不知道如何将数据从中实际提取到我的二维数组中。这是我的进度:
Tile[,] Tiles;
string[] mapData;
public void LoadMap(string path)
{
if (File.Exists(path))
{
mapData = File.ReadAllLines(path);
var width = mapData[0].Length;
var height = mapData.Length;
Tiles = new Tile[width, height];
using (StreamReader reader = new StreamReader(path))
{
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
Tiles[x, y] = new Tile(SpriteSheet, 5, 3, new Vector2(x * 64, y * 64));
}
}
}
}
}
Tiles[x, y] = new Tile() 行中的数字 5 和 3 表示纹理在纹理图集中的位置。我想添加一个 if 语句,如果文件中的数字在左上角为 0,我希望 Tiles[0, 0] 设置为我的 textureatlas 中的特定行和列。任何对此的帮助将不胜感激,我没有看到它!
首先,var width = mapData[0].Length;
要return字符数组的长度,包括逗号,是19。看起来你不想return逗号.所以,你应该像这样拆分字符串:
Tile[,] Tiles;
string[] mapData;
public void LoadMap(string path)
{
if (File.Exists(path))
{
mapData = File.ReadAllLines(path);
var width = mapData[0].Split(',').Length;
var height = mapData.Length;
Tiles = new Tile[width, height];
using (StreamReader reader = new StreamReader(path))
{
for (int y = 0; y < height; y++)
{
string[] charArray = mapData[y].Split(',');
for (int x = 0; x < charArray.Length; x++)
{
int value = int.Parse(charArray[x]);
...
Tiles[x, y] = new Tile(SpriteSheet, 5, 3, new Vector2(x * 64, y * 64));
}
}
}
}
}