我如何将一个对象从我的main传递到我的类

本文关键字:我的 main 一个对象 | 更新日期: 2023-09-27 18:12:08

我是一名正在做课外项目的学生,我的教授让我编写一个处理类的程序。

我创建了一个名为"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对象到另一个类,连同它的内容。

基本上现在的程序流程是:

    <
  • 创建对象/gh>
  • 在Main中使用对象
  • 做数学
  • 更改表单图片

如果可能的话,我想把它改成:

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

我知道这看起来像我把东西复杂化了,但是我的教授告诉我main唯一要做的就是渲染图片。这个类应该处理与数学相关的东西。

请给我一些建议好吗?我在"mathClass"中实例化"Piece"类吗?

我如何将一个对象从我的main传递到我的类

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

第一次变异:在这里,游戏板并没有被"描述"为一个完整的物体。它是一个数组,其中一些(静态)实用程序方法放在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是一个"full"类。

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

创建一个GameBoard类,在构造函数或一些Initialize方法中创建棋子。然后,您可以在主表单中遍历这些部分并绘制图片。

查看Dragger Game在CodePlex上的实现