我创建了一个结构列表,每个结构都有一些属性。我的目的是使用一个基本的10x10地图练习/学习为我开发工具的游戏编写A *搜索算法。我的地图结构基本上是一个Tile对象数组,每个对象都有以下属性:
public struct Tile
{
public int x { get; set; }
public int y { get; set; }
public int cost { get; set; }
public bool walkable { get; set; }
}
我也有节点的结构,虽然它与这个问题无关,但是,我会发布它,因为任何人都有什么要对我大喊大叫:
public struct Node
{
public int x { get; set; }
public int y { get; set; }
public int total { get; set; }
public int cost { get; set; }
public Tile parent { get; set; }
}
我的formload事件看起来像这样:
private void Form1_Load(object sender, EventArgs e)
{
CheckBox[] chbs = new CheckBox[100];
for (int x = 0; x < 10; x++)
{
for (int y = 0; y < 10; y++)
{
Map = new Structs.Tile[100];
Map[x + y].x = x;
Map[x + y].y = y;
Map[x + y].cost = 100;
Map[x + y].walkable = true;
//MessageBox.Show(Convert.ToString(Map[x + y].x) + " : " + Convert.ToString(Map[x + y].y));
if ( x == 5 )
{
if (y == 4 | y == 5 | y == 6)
{
Map[x + y].walkable = false;
}
}
}
}
int i = 0;
foreach (Structs.Tile tile in Map)
{
CheckBox chb = new CheckBox();
chb.Location = new Point(tile.x * 20, tile.y * 20);
chb.Text = "";
chbs[i] = chb;
i++;
}
this.Controls.AddRange(chbs);
}
我已经事先宣布了这一点,通过这个类全球使用:
Structs.Tile[] Map;
问题是,为什么这只添加2个复选框?它似乎将它们添加到位于X:0,Y:0,X:1,Y:1的大约正确的位置,但是没有添加其他的?我把形式扩展到荒谬的尺寸,但仍然没有。我对它完全感到困惑。
这是结果,乘数设置为2:
我相信我已经正确设置了,我无法理解为什么它不起作用。我可以理解表格是否冻结,但它只是没有,并将值设置为愚蠢的高(100+)并没有任何区别。 WinForms中的偏移量表明乘数需要大约为12 ......
像往常一样,任何建议都非常受欢迎。我也会尽快回答一些问题,因为我从你那里学到了很多很棒的人!
谢谢!
修订FormLoad:
private void Form1_Load(object sender, EventArgs e)
{
int ind = 0;
CheckBox[] chbs = new CheckBox[100];
Map = new Structs.Tile[100];
for (int x = 1; x < 11; x++)
{
for (int y = 1; y < 11; y++)
{
Map[ind].x = x;
Map[ind].y = y;
Map[ind].cost = 100;
Map[ind].walkable = true;
//MessageBox.Show(Convert.ToString(Map[x + y].x) + " : " + Convert.ToString(Map[x + y].y));
if ( x == 5 )
{
if (y == 4 | y == 5 | y == 6)
{
Map[ind].walkable = false;
}
}
ind++;
}
}
int i = 0;
foreach (Structs.Tile tile in Map)
{
CheckBox chb = new CheckBox();
chb.Location = new Point(tile.x * 12, tile.y * 12);
chb.Text = "";
chbs[i] = chb;
i++;
}
this.Controls.AddRange(chbs);
}
答案 0 :(得分:0)
答案是每次进入血腥循环时我都在重置数组。嘎,这太晚了!
感谢所有看过/考虑过的人!