2014-10-17 40 views
0

我目前停留在我的任務的一部分,我似乎無法弄清楚。它涉及到我建立一個遊戲板,使用tablelayoutpanel作爲遊戲板。按照特定的順序在tablelayoutpanel單元中放置對象

到目前爲止,我已經顯示在黑板上的瓦片「廣場」,但地磚(細胞)是不是爲了像這樣:

enter image description here

我需要開始片顯示在左下角,和精是在右上方,在中間的細胞,以便爲這樣:

enter image description here

其中涉及這部分的方法是這些:

/////此方法設置使用遊戲板和陣列「廣場」的,(仍在進展中的工作,但主要是做)

private void SetupGameBoard() { 

        for (int i = 0; i <= 41; i++) { 

      SquareControl squareCreate = new SquareControl(Board.Squares[i], null); 

      int coloumn = 0; 
      int row = 0; 

      MapSquareNumToScreenRowAndColumn(i, out coloumn, out row); 

      boardTableLayoutPanel.Controls.Add(squareCreate, coloumn, row); 

     } 


    }// SetupGameBaord 

而這一點,

private static void MapSquareNumToScreenRowAndColumn(int squareNumber, out int rowNumber, out int columnNumber) { 



      // ######################## Add more code to this method and replace the next two lines by something more sensible. ############################### 
      rowNumber = 0;  // Use 0 to make the compiler happy for now. 
      columnNumber = 0; // Use 0 to make the compiler happy for now.     



     }//end MapSquareNumToScreenRowAndColumn 

到目前爲止,我所掌握的是在MapSquareToScreenRowandcColumn中,我計算出的方塊需要發生的位置。

真的會喜歡一些提示/建議/幫助/任何事情。

如果你們需要更多信息,請告訴我。

謝謝!

編輯:

所以我想通了幾分怎麼辦,只是想知道一個更好的方式來做到這一點。在MapSqauretoScreenRowandColumn我把這個小if語句只是爲了測試:

if (squareNumber >= 0 && squareNumber <= 5) { 

       rowNumber = 6; 


      } 

所以如果sqaurenumber大於0且小於5,其放在右排。我的問題是,有沒有更好的方法來做到這一點?而不是爲此寫一連串的線,有幾種方法可以做到這一點?

回答

0

你的參數要行,然後列

private static void MapSquareNumToScreenRowAndColumn(int squareNumber, 
            out int rowNumber, out int columnNumber) { 

,但你有它向後:

MapSquareNumToScreenRowAndColumn(i, out coloumn, out row); 
+0

感謝您的回覆,但是我放置它們的順序真的很重要嗎?我認爲這將有更多的與MapSquareNumtoScreen(等..)的實際計算 – user3496101 2014-10-17 03:43:48

+0

另外,請查看我在OP編輯,謝謝! – user3496101 2014-10-17 03:54:19

+0

@ user3496101我在代碼中看不到如何計算列和行值。但我的回答是處理你正在混合你的列和行的事實。我認爲只有兩個循環會更容易:'fox y = 0到rows,然後是x = 0到columns'。 – LarsTech 2014-10-17 13:12:47

0

我可以給你一擊,但我不能告訴你一切的原因在IM同班。哈哈。

基本上:

的座標(x,y)是相同(得到columnnumber,ROWNUMBER)小心不要混淆這些。其中columnNumber = x和rowNumber = y。

現在要弄清楚我們在做什麼x和y,我們只是做簡單的數學。

Table size: (6,7) (6 wide by 7 high), 

我們可以根據指數計算x和y是什麼。

所以讓我們開始爲x:

解決了什麼是X,我們需要做的是找出跨越它在任何給定的時間有多少。所以,簡單地說:

x = index % table.width 

現在我們解決y的 這就要求我們從數最多回分鐘。所以:

y = table.height - (index/table.width) 

此外,我們在int中分,以便小數只是在這種情況下我們想要的結束。 我們除以寬度,因爲我們想要計算出它到達當前位置的列數。

我們得到逆轉作用的研究,我們基本上要做到這一點每一個奇數列 所以我們需要做的基本上是:

if (y % 2 != 0) { //if it is an odd number 
    x = table.width - x; 
} 

創建相反的效果;

此外,請記住關鍵點,table.width和table.height =鍵,所以如果table.width = 6則關鍵是5,因爲從0開始的數組...

希望有所幫助。

相關問題