我是一名学生正在做一个超级成绩的项目,我的教授要我创建一个处理课程的程序。
所以,我创建了一个名为“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”类吗?
答案 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);