簡體   English   中英

如何將一個物體從我的主體傳遞到我的班級?

[英]How do I pass an object from my main into my class?

我是一名學生正在做一個超級項目,我的教授要我創建一個處理課程的程序。

所以,我用以下代碼創建了一個名為“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對象及其內容傳遞給另一個類。

基本上,現在的程序流程是:

  • 創建對象
  • 使用Object在Main中進行數學運算
  • 更改表單圖片

並且,如果可能的話,我想將其更改為:

  • 創建對象
  • 在數學課上做數學
  • 將對象從數學類返回/傳遞給Main
  • 更改表單圖片

我知道這看起來像是讓事情變得復雜,但我的教授告訴我,唯一應該做的就是渲染圖片。 該課程應該處理數學相關的東西。

我可以就此提出一些建議嗎? 我在“mathClass”中實例化“Piece”類嗎?

創建一個GameBoard類,它在構造函數或一些Initialize方法中創建Pieces。 然后,您可以迭代主窗體中的碎片並繪制圖片。

在CodePlex上查看Dragger Game的實現

我會提出兩種變體。 請記住,數組是引用類型。 如果將其中一個傳遞給方法,則該方法可以直接修改它。

第一種變體 :這里游戲板不是“描述”為完整對象。 它是一個數組,其中包含一些放在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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM