俄罗斯方块(十二)方块沉底

边界处理完成后,我们运行程序,可以看到方块只能在Panel的区域内移动或旋转。不过因为没有障碍块,所以不能验证对障碍块的处理是否正确。

障碍块是怎么形成的呢?-- 方块沉底以后就变成了障碍了。

方块什么时候算沉底呢?--落到无法再下落的时候就沉底了。

因此我们可以在moveDown中增加这么一段代码

void Element::moveDown()
{
	Box newBody[4];
	for (int i=0; i<4; i++)
	{
		newBody[i].setX(body[i].getX());
		newBody[i].setY(body[i].getY()+1);
	}
	if (!move(newBody))
		myPanel->ElementDead();
}

 move函数返回bool值,说明move是不是确定发生,如果返回的是false就说明无法移动,则代表元素沉底了。沉底后通知Panel这个元素死了。

 

为什么要通知Panel元素死了呢,因为当前的元素以及元素死以后转换成的障碍块都是Panel的成员变量,所以这件事情告诉Panel后Panel可以做相应的处理。

void Panel::ElementDead()
{
	//死掉的Element变成障碍块。
	for (int i=0; i<4; i++)
	{
		body[element->body[i].getY()][element->body[i].getX()] = true;
	}
	//清除已经死的Element
	delete (element);

	//创建一个新的障碍块
	randomCreate();
}
 

好了。保存,运行。看看掉下来的方块是不是变成了障碍块,新的方块能不能收到障碍块的阻挡。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值