[英]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對象及其內容傳遞給另一個類。
基本上,現在的程序流程是:
並且,如果可能的話,我想將其更改為:
我知道這看起來像是讓事情變得復雜,但我的教授告訴我,唯一應該做的就是渲染圖片。 該課程應該處理數學相關的東西。
我可以就此提出一些建議嗎? 我在“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.