2011-05-22 26 views
0

我正在使用GUI。我有一個使用TableLayoutPanel顯示的遊戲板。它有6列和7行。正方形數字的順序是正確的,它們應該在一些行上右移。例如, ;C#行方向


  • 23-22-21-20-19-18
  • 12-13-14-15-16-17
  • 11-10-9-8-7-6
  • 開始-1 1-2-3-4-5

但是在我的代碼中,方塊數總是從左到右。能否請你幫忙?

private void SetupGameBoard() { 
    int counter = 0; 

    for (int row = NUM_OF_ROWS-1; row > -1; row--) { 
     for (int column = 0; column < NUM_OF_COLUMNS; column++) { 
      SquareControl squareControl = new SquareControl 
       (hareAndTortoiseGame.Board.Squares[counter], hareAndTortoiseGame.Players); 
      if ((row == 6 && column == 0) || (row == 0 && column == 5)){ 
       squareControl.BackColor = Color.BurlyWood; 
      } 
      GameTableLayout.Controls.Add(squareControl, column, row); 
      counter++; 
     } 
    } 
} 

回答

1

你只是在一個方向上迭代,那是從左到右。您的第一個for循環需要在迭代列之間進行交替。

你想要一個遊戲板,這種排列順序排列。用於迭代行的邏輯很好,你從最高行開始往下移動。現在你只需要處理列。你聲明列中的值在現在出來時總是保持從右到左。也就是說,我認爲他們看起來像:

  • 23-22-21-20-19-18
  • 17-16-15-14-13-12
  • 11-10-9-8 -7-6-5
  • 4-3-2-1啓動

這是因爲你的列值總是從0->最大值去,但你還沒有覆蓋MAX-> 0。

一些peusdo代碼:

for number of rows 
    if row % 2 == 0 //if we are on an even row 
    iterate up 
    else 
    iterate down 

一些未經測試的實際代碼:

private void SetupGameBoard() { 
     int counter = 0; 

     for (int row = NUM_OF_ROWS-1; row > -1; row--) { 
      if(row % 2 == 0){ 
       for (int column = NUM_OF_COLUMNS; column > -1; column--) { 
       SquareControl squareControl = new SquareControl 
        (hareAndTortoiseGame.Board.Squares[counter], hareAndTortoiseGame.Players); 
       if ((row == 6 && column == 0) || (row == 0 && column == 5)){ 
        squareControl.BackColor = Color.BurlyWood; 
       } 
       GameTableLayout.Controls.Add(squareControl, column, row); 
       counter++; 
       } 
      } 
      else{ 
       for (int column = 0; column < NUM_OF_COLUMNS; column++) { 
       SquareControl squareControl = new SquareControl 
        (hareAndTortoiseGame.Board.Squares[counter], hareAndTortoiseGame.Players); 
       if ((row == 6 && column == 0) || (row == 0 && column == 5)){ 
        squareControl.BackColor = Color.BurlyWood; 
       } 
       GameTableLayout.Controls.Add(squareControl, column, row); 
       counter++; 
       } 
      } 
     } 

可以很明顯的打破一些的說出來到其他方法,因爲有很多重複的東西。這個想法是,如果你在奇數行或偶數行上,你可以根據它來完成之字形。

+0

我該如何迭代它? – Bri 2011-05-22 14:28:59

+0

您顯示的代碼片段正在迭代。也就是說,列從左到右。你需要另外一個for循環,從右到左向控制板添加控制。 – Fourth 2011-05-22 14:30:33

+0

我試過了我可以做的一切,但它不起作用。你能解釋一下嗎? – Bri 2011-05-22 14:46:45

0

你只需要做一些數學。這是循環遍歷所有單元格(按單元格編號)並獲取行和列的數學。我把其餘的留給你。注意:我沒有測試...可能是拼寫錯誤或語法錯誤。

const int maxCols = 6; 
const int maxRows = 4; 

int numberCells = maxCols * maxRows; // zero based in main array. 

for (int cellNumber = 0; cellNumber < numberCells; cellNumber) 
{ 
    int row; 
    int col; 

    row = maxRows - floor(cellNumber/maxRows); 

    bool oddRow = (row % 2) == 1; 

    col = oddRow ? (cellNumber % maxCols) + 1 : maxCols - (cellNumber % maxCols); 

    // I believe the following is what you want to do in your proc. 
    SquareControl squareControl = new SquareControl(hareAndTortoiseGame.Board.Squares[cellNumber], hareAndTortoiseGame.Players); 
    if ((row == 6 && col == 0) || (row == 0 && col == 5)) 
    // if ((cellNumber == 0) || (cellNumber == (numberCells-1))) 
    { 
     squareControl.BackColor = Color.BurlyWood; 
    } 
    GameTableLayout.Controls.Add(squareControl, col, row); 

}