我創建了一個結構體列表,每個結構體都有幾個屬性。我的意圖是使用一個基本的10x10地圖來練習/學習爲我正在開發的工具編寫的A *搜索算法。我已經得到了地圖的結構基本上瓷磚對象的數組,每個具有以下屬性:爲地圖查看器添加多個複選框
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);
}
我試過一些新的東西,在while循環中添加一個索引來設置X和Y,它似乎沒有幫助,我現在編輯它。 – XtrmJosh 2013-02-14 21:55:47