所以,我目前有一个Board由Pieces 组成的课程.每个Piece都有一个颜色和一个描述作品类型的字符串.它还有一个2d矩阵,其位设置为开或关,这使我可以知道哪些像素用所需颜色绘制.
我的问题是,哪个班级应该负责在棋盘上绘制作品?一方面,我会说Piece班级应该这样做.但要做到这一点,我必须传递一个Board作为参考Piece的Draw()方法,虽然它并不可怕但我发现它有点尴尬.这引起了Piece将"知道"Board类的问题.
另一方面,我可以Piece拥有一个
Boolean[,] IsPixelSet(int x, int y)
Run Code Online (Sandbox Code Playgroud)
然后董事会将采用以下形式的方法:
void DrawPieceOnBoard() {
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
if (piece.IsPixelSet(x, y) {
board.DrawPixelAt(x, y, piece.GetColor());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
你会怎么做?为什么?我无法在任何这些方法中看到明显的赢家.
谢谢
我不是在谈论实际在屏幕上绘制东西.会发生的事情是我正在实施俄罗斯方块游戏(目前没有GUI),我需要随时将棋盘上不同位置的像素设置为落地.该板基本上只有(x,y)点中的每一个都有一个存取器和一个mutator.我们现在说我想在棋盘上绘制一个Square(一种棋子).如果该板块知道该板块及其Draw()方法是否对板块进行了更改,或者板块是否应该访问Piece的getter方法并自行完成?
我想说这件作品很吸引人。例如,您的函数不允许增强片段以允许它们具有多种颜色。
Piece 不必知道所有的 Board,只需知道一些方法(可能是接口的一部分)Draw(x,y,color)。