2013-02-14 12 views
0

我創建了一個結構體列表,每個結構體都有幾個屬性。我的意圖是使用一個基本的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:

Test program screenshot displaying the issue

我相信我已經正確設置它,我不能工作了,爲什麼它不工作。我可以理解,如果表單凍結但它不是,並且將值設置爲某種愚蠢的高(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

我試過一些新的東西,在while循環中添加一個索引來設置X和Y,它似乎沒有幫助,我現在編輯它。 – XtrmJosh 2013-02-14 21:55:47

回答

0

答案是我是我進​​入血腥循環每次重新排列。加啊,這太晚了!

感謝所有看上去/考慮過的人!