俄罗斯方块(十五)游戏结束

本文详细介绍了如何在C++中实现一个完整的俄罗斯方块游戏逻辑,包括游戏开始、结束判断、界面更新等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最后,我们来处理一下游戏结束。

先在Panel中增加一个游戏结束标志

class Panel : public CWnd
{
private:
	bool gameover;

 

构造函数的时候设定他为true;

Panel::Panel()
{
	...
	gameover = true;
}

 

游戏开始时,设定他为false;

void Panel::start()
{
	....
	gameover = false;

 

然后游戏开始正常运行。那什么时候游戏结束呢?看上去应该是障碍块累计到Panel的顶上。再仔细一想,应该是没有办法再增加新的方块的时候,游戏就结束了。

这样,我们需要在新的方块产生的时候,查看一下是否可以产生,也就是产生的方块是不是到边际或者遇到障碍块了。如果是这样则游戏结束。

void Panel::randomCreate()
{
	srand(time(NULL));
	int i = rand() % 4;
	if(i == 0)
		element = new Bar(getWidth()/2,0, this);
	if(i == 1)
		element = new Square(getWidth()/2,0, this);
	if(i == 2)
		element = new ShapeL(getWidth()/2,0, this);
	if(i == 3)
		element = new ShapeT(getWidth()/2,0, this);

	if (element->ifOccupied(element->body)) 
	{
		gameover =true;
		KillTimer(ID_TIMER);
	}
}

 注意这里除了设置gameover标志外,还使用KillTimer系统函数关闭计数器。既然游戏结束了,我们确实没有必要每0.1秒运行俄罗斯方块往下掉一格的事情了。

 

好吧,让我们从Panel上可视的了解到游戏结束了。游戏结束时,我们简单的在界面上显示Gameover字样好了。

void Panel::OnPaint()
{
	CPaintDC dc(this); // device context for painting

	CRect rect;
	this->GetClientRect(rect);
	CBrush brushbg( RGB(125,125,125) );

	if(gameover)
	{
		CString str("game over");
		dc.DrawText( str,rect, DT_CENTER);
	}
	else
	{
		...
 

现在运行一下,我们应该可以看到一个相对完整的俄罗斯方块了。俄罗斯方块的C++演示也就到这章结束了。希望大家能够顺利完成自己的俄罗斯方块,并增加自己的内容。取得好分数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值