画完了底板,再来画方块。根据我们最开始的类结构可以知道:不同俄罗斯方块形状的画的方法都是一样的,就是把body的4个小方块显示一下就可以了。所以同样的代码可以写在他们共同的基类中
在基类中增加一个print方法,参数就是那个画板CPaintDC & 或者CDC &.(CPaintDC继承自CDC)
void Element::print(CDC& dc)
{
for(int i = 0; i < 4; i++)
body[i].print(dc);
}
而小方块的现实如下:
void Box::print(CDC& dc)
{
CRect rect(x*step,y*step,(x+1)*step,(y+1)*step);
CBrush brush(RGB(255,255,0));
dc.FillRect(rect, &brush );
}
这里的step用来说明每个小方块占用几个像素。如果step=10,将会画出一个10*10像素的正方形。这个值在整个游戏期间不会变,所以我们可以把它申明成Box类的static const成员
class Box
{
private:
int x;
int y;
public:
static const int step=10;
最后,需要寻找时机调用显示函数,这个时机就是在底板Panel获取WM_PAINT消息时
void Panel::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
this->GetClientRect(rect);
CBrush brushbg( RGB(125,125,125) );
dc.FillRect(rect,& brushbg);
if (element!=NULL)
element->print(dc);