c# - 在母板( 2d 矩阵) 上,该类负责设置块的像素 一块或者一块木板?

  显示原文与译文双语对照的内容
0 0

所以,我现在有一个 Board 类,它由 Piece 。 每个 Piece 都有一个颜色和一个字符串,描述了。 它也有一个 2d 个矩阵,其中有一个是开或者关的,这让我知道用所需的颜色或者不。

我的问题是,哪个类应该让responsability在黑板上绘制块? 一方面,我认为 Piece 类应该这样做。 但是要做到这一点,我必须通过 Board 作为对 PieceDraw() 方法的引用,虽然这并不可怕,但我觉得这是一个。 这就引发了一个问题,那就是Piece会有"了解"。

另一方面我可以让 Piece

Boolean[,] IsPixelSet(int x, int y)

然后Board将有一种形式的方法:

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

你如何去获取此项信息? 为什么在这些方法中我看不到明显的赢家。

谢谢

编辑

我不是说在屏幕上画东西。 发生什么是我正在实现一个俄罗斯方块游戏( 目前,没有 GUI ),我需要在每一个时刻设置一个正方形的像素在不同的位置,因为它下降到地面。 董事会基本上只有一个访问器和每个( x,y ) 点的mutator 。 现在我想在黑板上画一个正方形的( 一种类型) 。 要知道板和它的Draw() 方法对板的改变,或者板的存取获取块的方法,自己做它自己?

时间:原作者:6个回答

0 0

我觉得那块画。 例如你的函数不允许增强该块,使它的具有几种颜色。

这块不需要知道所有的板,只是一些方法( 可能是接口的一部分) Draw(x,y,color)

原作者:
0 0

在一般的MVC理论中,FWIW都不应该绘制自己。 表示将是一个单独的视图。

原作者:
0 0

在我看来,这件件应该画出来,板子应该画板。

我有类似的东西:

class Piece 
{
 Image Render(Rectangle bounds) {/* */}
}
class Board
{
 void Render(Graphics g)
 {
//Draw the base
 foreach (piece in Pieces)
 {
 var rect = figureOutPosition();//Positioning logic to 
 g.DrawImage(location, rect, piece.Render(rect));
 }
//Draw any overlays
 }
}
原作者:
0 0

我同意 nonnb,对于一个棋子或者棋盘没有"绘图"的逻辑概念,可以认为棋盘对所有的棋子都有引用,所以它应该画出自己的名字。 但是这个参数同样表示它可能是一个 helper 对象,或者是一个用来绘制图形的环境。

我个人会选择一个渲染类( 例如也许你希望能够用ASCII打印棋盘以记录所有的移动),或者在未来升级到 3d 渲染引擎或者其他东西。

原作者:
0 0

这并不重要。你可能想要做的是使它的任何一个板依赖于一块或者一块板,你所做的一切。

原作者:
0 0

我将 go 用于复合设计 Pattern - 基本上是与 @Pondidum. 相同的解决方案

  • 可以绘制的方法绘制( )
  • Board
  • 一磅
  • Board 有一个的array阵列。
原作者:
...