生成的.txt文件未显示



所以,我正在尝试生成一个矩阵为 0 和 1 的 txt 文件,其中所有边框均为 0,矩阵的主体随机填充这两个值。它应该是一个位图,其中 0 是一个障碍物,1 是寻路算法的可能节点。应多次调用该方法,以生成并保存为用户所需的糊状映射。

我做了这个类来生成地图:

public static class GenerateText
{
static string obstacle = "0";
static string node = "1";

public static void CreateMap(int x, int y, string name)
{
string path = "Assets/" + name + ".txt";
if(!File.Exists(name + ".txt"))
{
FileStream fs = File.Create(path);
StreamWriter writer = new StreamWriter(fs);
string[,] map = new string[x, y];
for (int i = 0; i < x; ++i)
{
for (int h = 0; h < y; ++h)
{
int randomValue = RandomGenerator.GetRandom(0, 10);
if (randomValue > 6 || i == 0 || h == 0 || i == x || h == y)
{
map[i, h] = obstacle;
}
else
{
map[i, h] = node;
}
}
}
fs.Close();
writer.WriteLine(map);
}

}
}

结果应该是这样的:

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

调用的方法工作正常并到达终点,但是如果我检查解决方案,则应该生成的文件丢失了。

我是这种事情的新手,所以这可能是一个愚蠢的问题,但有人可以帮助我吗?

1-在写入任何内容之前关闭文件流
2-您正在尝试编写数组。但是您只将数组对象发送到您需要循环的文件

public static class GenerateText
{
static string obstacle = "0";
static string node = "1";

public static void CreateMap(int x, int y, string name)
{
string path = Directory.GetCurrentDirectory() + "/" + name + ".txt";
if (!File.Exists(name + ".txt"))//if there is a empty file with this name
{                               //function doesnt work make sure you 
//delete any empty file 
FileStream fs = File.Create(path);
StreamWriter writer = new StreamWriter(fs);
string[,] map = new string[x, y];
for (int i = 0; i < x; ++i)
{
for (int h = 0; h < y; ++h)
{
int randomValue = RandomGenerator.GetRandom(0, 10);
if (randomValue > 6 || i == 0 || h == 0 || i == x || h == y)
{
map[i, h] = obstacle;
}
else
{
map[i, h] = node;
}
}
}
for (int a = 0; a < x; a++)
{
for (int b = 0; b < y; b++)
{
writer.Write(map[a, b]);
}
writer.WriteLine();
}
writer.Close();
fs.Close();
}
}
}

在写入 StreamWriter 之前,您将关闭文件流!

fs.Close();
writer.WriteLine(map);

对于这种情况,最好有 Using 语句,然后最大限度地减少此类问题。 带或不带括号是您的选择。

using (FileStream fs = File.Create(path))
using (StreamWriter writer = new StreamWriter(fs))
string[,] map = new string[x, y];
for (int i = 0; i < x; ++i)
{
for (int h = 0; h < y; ++h)
{
int randomValue = RandomGenerator.GetRandom(0, 10);
if (randomValue > 6 || i == 0 || h == 0 || i == x || h == y)
{
map[i, h] = obstacle;
}
else
{
map[i, h] = node;
}
}
}
writer.WriteLine(map);

相关内容

  • 没有找到相关文章

最新更新