俄罗斯方块(六)画方块

画完了底板,再来画方块。根据我们最开始的类结构可以知道:不同俄罗斯方块形状的画的方法都是一样的,就是把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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值