如何将一个物体从我的主体传递到我的班级?

时间:2011-10-22 10:02:06

标签: c# class object

我是一名学生正在做一个超级成绩的项目,我的教授要我创建一个处理课程的程序。

所以,我创建了一个名为“Piece”的类,其代码如下:

namespace GG
{
    class Piece
    {
        public int rank;
        public int player; 
    }
}

我在我的主程序(Form)中实例化了它,如下所示:

namespace GG
{
    public partial class frmPGame : Form
    {
        public frmPGame()
        {
            InitializeComponent();
        }

        Piece[,] gameBoard = new Piece[9, 8];

        public void clearGameBoard()
        {
            for (int y = 0; y < 8; y++)
            {
                for (int x = 0; x < 9; x++)
                {
                    gameBoard[x, y] = new Piece();
                    gameBoard[x, y].rank = -1;
                    gameBoard[x, y].player = 0;
                }
            }
        }
    }
}

无论如何,表单有图片,并且,根据我创建的2D数组内部的内容,图片可能会发生变化。但是,我也在我的主程序中做了一些数学计算,这使得它变得杂乱而漫长。我想问一下,我是否能以某种方式将gameBoard对象及其内容传递给另一个类。

现在基本上程序流程是:

  • 创建对象
  • 使用对象
  • 在Main中进行数学运算
  • 更改表单图片

而且,如果可能的话,我想将其改为:

  • 创建对象
  • 在数学课上做数学
  • 将对象从数学类返回/传递给Main
  • 更改表单图片

我知道我看起来很复杂,但我的教授告诉我,主要应该做的唯一事情是渲染图片。该课程应该处理数学相关的东西。

我可以就此提出一些建议吗?我在“mathClass”中实例化“Piece”类吗?

2 个答案:

答案 0 :(得分:1)

创建一个GameBoard类,它在构造函数或一些Initialize方法中创建Pieces。 然后,您可以迭代主表单中的各个部分并绘制图片。

请参阅CodePlex上Dragger Game的实施

答案 1 :(得分:1)

我会提出两种变体。请记住,数组是引用类型。如果将其中一个传递给方法,该方法可以直接修改它。

第一个变体: 这里游戏板不是“描述”为完整对象。它是一个数组,其中一些(静态)实用程序方法放在GameBoardMath类中。

namespace GG
{
    public partial class frmPGame : Form
    {
        public frmPGame()
        {
            GameBoardMath.ClearGameBoard(gameBoard); // Clear the game board

            InitializeComponent();
        }

        Piece[,] gameBoard = new Piece[9, 8];    
    }

    public class GameBoardMath
    {
        public static void ClearGameBoard(Piece[,] gameBoard)
        {
            int lenX = gameBoard.GetLength(0);
            int lenY = gameBoard.GetLength(1);

            for (int y = 0; y < lenY; y++)
            {
                for (int x = 0; x < lenX; x++)
                {
                    gameBoard[x, y] = new Piece();
                    gameBoard[x, y].rank = -1;
                    gameBoard[x, y].player = 0;
                }
            }
        }
    }
}

第二种变体:我们认为GameBoard是一个“完整”类。

public class GameBoard
{
    public readonly Piece[,] Board;

    public GameBoard(int x, int y)
    {
        Board = new Piece[x, y];

        ClearGameBoard();
    }

    public void ClearGameBoard()
    {
        int lenX = Board.GetLength(0);
        int lenY = Board.GetLength(1);

        for (int y = 0; y < lenY; y++)
        {
            for (int x = 0; x < lenX; x++)
            {
                Board[x, y] = new Piece();
                Board[x, y].rank = -1;
                Board[x, y].player = 0;
            }
        }
    }
}

要在Form

中使用它
GameBoard gameBoard = new GameBoard(9, 8);