我正在开发GUI。我有一个游戏板,使用TableLayoutPanel显示。它有6列7行。方形数字的顺序正确,它们应该在某些行上从右到左。 例如;
但在我的代码中,方数总是从左到右。你能帮忙吗?
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++;
}
}
}
答案 0 :(得分:1)
你只是在一个方向上迭代,那是从左到右。您的第一个for循环需要在上下迭代列之间交替。
你想要一个游戏板,这些游戏板在行下方摆动。迭代行的逻辑很好,从最高行开始向下移动。现在你只需要处理列。您声明列中的值在它们现在出现时始终从左到右。也就是说,我认为它们看起来像:
这是因为您的列值始终为0-> max,但您还没有覆盖max-&gt; 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++;
}
}
}
显然,你可以将其中的一部分分解为其他方法,因为有很多重复的东西。我们的想法是,如果您处于奇数行或偶数行,则可以完成锯齿形。
答案 1 :(得分: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);
}