Направление строки C # - PullRequest
0 голосов
/ 22 мая 2011

Я работаю над GUI. У меня есть игровая доска, которая отображается с помощью TableLayoutPanel. Имеет 6 столбцов и 7 строк. Квадратные числа в правильной последовательности, и они должны идти справа налево в некоторых строках. Например;


  • 23-22-21-20-19-18
  • 12-13-14-15-16-17
  • 11-10-9-8-7-6
  • Пуско-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++;
        }
    }
}

Ответы [ 2 ]

1 голос
/ 22 мая 2011

Вы выполняете итерацию только в одном направлении, то есть слева направо. Ваш первый цикл 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++;
               }
            }
        }

очевидно, вы можете разбить часть этого на другие методы, потому что есть много повторяющихся вещей. Идея состоит в том, что вы выполняете зигзагообразное движение, основываясь на том, находитесь ли вы в нечетном или четном ряду.

0 голосов
/ 22 мая 2011

Тебе просто нужно немного посчитать.Вот математика, чтобы перебрать все ячейки (по номеру ячейки) и получить строку и столбец.Я оставляю вам остальное.ПРИМЕЧАНИЕ: я не проверял ... могут быть опечатки или синтаксические ошибки.

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);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...