Вы выполняете итерацию только в одном направлении, то есть слева направо. Ваш первый цикл 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, но вы не покрыли 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++;
}
}
}
очевидно, вы можете разбить часть этого на другие методы, потому что есть много повторяющихся вещей. Идея состоит в том, что вы выполняете зигзагообразное движение, основываясь на том, находитесь ли вы в нечетном или четном ряду.