2014-10-17 2 views
0

Im в настоящее время застрял на части моего задания, которое я не могу понять. Это связано с тем, что я устанавливаю игровое поле, используя панель 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 - это то, где должен произойти мой расчет выяснения того, где квадраты встают на свои места.

Было бы очень приятно некоторые советы/советы/помощь/что-либо на этом.

Если вам нужна дополнительная информация, то дайте мне знать.

Спасибо!

EDIT:

Так я понял, то, как это сделать, просто интересно о лучшем способе сделать это. В MapSqauretoScreenRowandColumn я ставлю это мало, если заявление, только для проверки:

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

+0

Также, пожалуйста, просмотрите мое редактирование в OP, спасибо! – user3496101

+0

@ user3496101 Я не вижу в вашем коде, как вы вычисляете столбец и значение строки. Но мой ответ касался того факта, что вы смешиваете свои столбцы и строки. Я бы подумал, что было бы проще просто иметь два цикла: 'fox y = 0 для строк, а затем для x = 0 для столбцов внутри. – LarsTech

0

Я могу дать вам удар, но я не могу сказать вам все, что причина им в тот же класс. ха-ха.

В основном:

координаты (х, у) такая же, как (ColumnNumber, ROWNUMBER) будьте осторожны, чтобы не путать их. Где columnNumber = x и rowNumber = y.

Теперь, чтобы решить, что мы имеем в x и y, мы просто делаем простую математику.

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

мы можем рассчитать, какие x и y соответствуют индексу.

так что позволяют начать с й:

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

x = index % table.width 

теперь мы разрешим для у это требует, чтобы мы отсчитать назад от макс до мин. так:

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

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

Теперь, чтобы получить реверсивный эффект, мы в основном хотят, чтобы это произошло, каждый нечетный столбец поэтому все, что нам нужно сделать, это в основном:

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

создать этот обратный эффект;

ТАКЖЕ, помните узловой точки table.width и table.height = ключи, так что если table.width = 6, то ключ 5 из массива, начиная с 0 ...

Надежда, что помогает.

Смежные вопросы