C++与OpenGL实现俄罗斯方块简要设计说明及源代码(3)

2018-11-30 20:19

}

int tmpx=(int)x;

if(tmpx > 19||tmpx < 0) break; }

if(BLOCK[(int)y][(int)x]==1) //判断是否发生冲突 { }

break;

}

if(i < 4)

return 1; return 0;

/*

关键部分在这里,主要是要判断方块下一次的移动是否合法, 本程序通过对b数组所存储的下标是否在BLOCK数组中已经为1 来判断,这样,只需要在BLOCK的最外层加一圈1,就不用通过 原来的方式来判断方块是否越界 */

void key(unsigned char k,int x,int y) {

int i,ret;

if(over == false) { if(k==UP)//此处需要改成调用变换图形样式的函数

{

Change(); } else if(k==DOWN)//后续还要修改,移动到底部过了一段时间之后就不能左右移动了

{

for(i=0;i<4;i++)//需继续添加以1和-1作为哨兵 { }

curLoc[i][1]-=0.1f;

ret=CheckConflict();

if(ret == 1)//发生冲突,则将修改复原 { }

for(i=0;i<4;i++) curLoc[i][1]+=0.1f;

over=true;//并且可以生成下一个方块了

}

else if(k==RIGHT) {

}

} { }

for(i=0;i<4;i++)

curLoc[i][0]+=0.1f; ret=CheckConflict(1);

if(ret == 1)//发生冲突,则将修改复原 { }

for(i=0;i<4;i++)

curLoc[i][0]-=0.1f;

else if(k==LEFT)

for(i=0;i<4;i++)

curLoc[i][0]-=0.1f; ret=CheckConflict(1);

if(ret == 1)//发生冲突,则将修改复原 { }

for(i=0;i<4;i++) curLoc[i][0]+=0.1f;

if(over==true) CheckDelete();

glutPostRedisplay();//调用这个函数可以重新绘图,每次相应消息之后,所有全部重绘

} /*

让方块定时下降 */

void down(int id) { int i,ret;

if(over!=true) { for(i=0;i<4;i++)//需继续添加以1和-1作为哨兵 {

}

curLoc[i][1]-=0.1f;

ret=CheckConflict();

if(ret == 1)//发生冲突,则将修改复原 {

for(i=0;i<4;i++)

curLoc[i][1]+=0.1f;

if(curLoc[0][1] >= b[currentBlock][0][1]) { cout<<\

}

}

exit(1);

}

over=true;//并且可以生成下一个方块了

if(over==true) CheckDelete(); glutPostRedisplay();

glutTimerFunc(1000,down,1); }

//作图函数,要修改,利用BLOCK数组绘图 void myDisplay1() {

int i,j;

glClear(GL_COLOR_BUFFER_BIT); //不能使用深度测试,否则画出来的图形很乱

for(i=0;i<20;i++) {

for(j=0;j<20;j++) { }

if(BLOCK[i][j]==1) { }

glColor3f(0.0f,1.0f,0.0f);

//用蓝色画图

glRectf(j/10.0f-1.0f,i/10.0f-1.0f,j/10.0f-1.0f+0.1f,i/10.0f-1.0f+0.1f); glLineWidth(2.0f);

glBegin(GL_LINE_LOOP); glColor3f(0.0f,0.0f,0.0f);

glVertex2f(j/10.0f-1.0f,i/10.0f-1.0f);

glVertex2f(j/10.0f-1.0f+0.1f,i/10.0f-1.0f);

glVertex2f(j/10.0f-1.0f+0.1f,i/10.0f-1.0f+0.1f); glVertex2f(j/10.0f-1.0f,i/10.0f-1.0f+0.1f); glEnd(); glFlush();

}

if(over == false) {

for(i=0;i<4;i++) { glColor3f(0.0f,1.0f,0.0f);

glLineWidth(2.0f);

glBegin(GL_LINE_LOOP); glColor3f(0.0f,0.0f,0.0f);

//用蓝色画图

glRectf(curLoc[i][0],curLoc[i][1],curLoc[i][0]+0.1f,curLoc[i][1]+0.1f);

}

}

glVertex2f(curLoc[i][0],curLoc[i][1]);

glVertex2f(curLoc[i][0]+0.1f,curLoc[i][1]);

glVertex2f(curLoc[i][0]+0.1f,curLoc[i][1]+0.1f); glVertex2f(curLoc[i][0],curLoc[i][1]+0.1f); glEnd(); glFlush();

}

glutSwapBuffers();

/*

* 随机生成方块,原理即生成一个7以内的随机数, * 对应的二维数组即为下一个产生的方块 */

void CreateBlocks() {

int i,j;

myDisplay1(); if(over) {

srand(time(NULL));

currentBlock=rand()%7; for(i=0;i<7;i++) //关键之处,每次创建一个新的方块后要将变形的记录

turn[i]=0;

清空 }

}

for(i=0;i<4;i++) for(j=0;j<2;j++)

{ }

curLoc[i][j]=b[currentBlock][i][j];

over=false;

glutPostRedisplay();

void main(int argc ,char **argv) {

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE); glutInitWindowPosition(400,100); glutInitWindowSize(600,600);

InitBLOCK();

glutCreateWindow(\俄罗斯方块 author:parkfang\glutDisplayFunc(&CreateBlocks); glutTimerFunc(1000,down,1);

}

glutKeyboardFunc(key);

glClearColor(1.0f,1.0f,1.0f,1.0f);//用白色清除屏幕 glutMainLoop();


C++与OpenGL实现俄罗斯方块简要设计说明及源代码(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2011财务报表分析练习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: