Vs环境下使用OpenGL编写了一个2d俄罗斯方块

本文详细介绍了在Visual Studio环境下使用OpenGL编写2D俄罗斯方块游戏的过程。主要涉及游戏逻辑更新、键盘事件处理、碰撞检测以及游戏状态管理。通过`timer`函数控制游戏流程,`special`函数响应键盘输入,`Game::update`处理碰撞和方块移动,以及`rotationCollision`和`moveCollision`检测旋转和移动时的碰撞。在游戏暂停或结束时,会显示相应的暂停或结束菜单。
摘要由CSDN通过智能技术生成

各个功能模块的主要实现程序:

void timer(int id)

{

if (game.killed) { // If the game is over

game.paused = true;

//glutTimerFunc(200, timer, id);

game.clearMainGrid();

game.clearNextPieceGrid();

glutPostRedisplay();

} else if (!game.paused) { // If the game continues and is not paused

game.update();

if (game.killed) {

glutTimerFunc(10, timer, 1);

} else {

glutPostRedisplay();

glutTimerFunc(game.timer, timer, 0);

}

}

}这段代码是一个计时器函数,通常用于游戏或应用程序的帧率控制和时间管理。具体来说,该函数用于俄罗斯方块游戏。:

游戏状态检查:首先,它检查游戏是否结束(game.killed)。如果游戏结束,它将进入第一个if语句块。

游戏结束处理:

如果游戏结束,它将设置game.paused为true来表示游戏已被暂停。

它清除了主网格(game.clearMainGrid())和下一个方块网格(game.clearNextPieceGrid()),这是为了在重新开始或继续游戏时准备新的游戏状态。

最后,它调用glutPostRedisplay()来请求重新绘制屏幕。这通常意味着所有的图形和界面元素都需要被重新绘制。

游戏继续且未暂停:如果游戏没有结束且没有被暂停,它将进入第二个else if语句块。

首先,它调用game.update()来更新游戏状态。这可能包括移动方块、检查碰撞等。

然后,它检查游戏是否结束。如果游戏结束,它将设置一个新的计时器(10毫秒),因为当游戏结束时可能会有一些动画或效果需要显示。

如果游戏没有结束,它将请求重新绘制屏幕并设置一个新的计时器(由game.timer决定)。

总之,这个函数主要负责控制游戏的流程和帧率,根据游戏的状态(是否结束、是否暂停)来决定何时更新游戏、何时重绘屏幕以及使用哪个时间间隔。

void special(int key, int x, int y)

{

if (!game.paused && !game.killed) {

if (key ==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值