按特定顺序将对象放在tablelayoutpanel单元格中

时间:2014-10-17 02:49:34

标签: c# 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中我需要计算出正方形到位的位置。

真的很喜欢这方面的一些提示/建议/帮助/任何内容。

如果你们需要更多信息,请告诉我们。

谢谢!

编辑:

所以我已经想出了怎么做,只是想知道更好的方法。在MapSqauretoScreenRowandColumn中,我将这个小if语句用于测试:

if (squareNumber >= 0 && squareNumber <= 5) {

                rowNumber = 6;


            }

因此,如果sqaurenumber大于0且小于5,则将其放在右侧。我的问题是,有没有更好的方法来做其余的事情?而不是为此写一堆线,有没有办法在少数几个?

2 个答案:

答案 0 :(得分:0)

您的参数需要行,然后是列

private static void MapSquareNumToScreenRowAndColumn(int squareNumber,
                                    out int rowNumber, out int columnNumber) {

但你倒退了:

MapSquareNumToScreenRowAndColumn(i, out coloumn, out row);

答案 1 :(得分:0)

我可以给你一个打击,但我不能告诉你一切因为我在同一个班级。哈哈。

基本上:

坐标(x,y)与(columnNumber,rowNumber)相同,注意不要混淆这些。其中columnNumber = x和rowNumber = y。

现在要弄清楚我们所处的x和y,我们只是做简单的数学运算。

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

我们可以根据索引来计算x和y是什么。

所以让我们从x开始:

要解决x是什么,我们需要做的就是在任何给定时间找出它的数量。简单地说:

x = index % table.width

现在我们解决了y 这要求我们从最大值到最小值。这样:

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

另外我们将int除以这样的情况下小数点落在我们想要的结尾。 我们除以宽度,因为我们想知道它到达当前位置的列数。

现在要获得反转效果,我们基本上希望每个奇数列发生这种情况 所以我们需要做的就是:

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

创造反效果;

另外,请记住KEY POINT,table.width和table.height = keys,所以如果table.width = 6则键为5,因为数组从0开始...

希望有所帮助。