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

2018-11-30 20:19

switch(turn[4])

{ case 0: curLoc[0][0]=temp00-0.1f; curLoc[0][1]=temp01+0.1f;

curLoc[1][0]=temp00-0.1f; curLoc[1][1]=temp01; curLoc[2][0]=temp00; curLoc[2][1]=temp01; curLoc[3][0]=temp00; curLoc[3][1]=temp01-0.1f; break;

case 1: curLoc[0][0]=temp20; }

curLoc[0][1]=temp21;

curLoc[1][0]=temp20+0.1f; curLoc[1][1]=temp21; curLoc[2][0]=temp10; curLoc[2][1]=temp11-0.1f; break;

turn[4]=(turn[4]+1)%2; break; case 5://L字形

switch(turn[5]) { case 0:

curLoc[0][0]=temp10; curLoc[0][1]=temp11;

curLoc[1][0]=temp10+0.1f; curLoc[1][1]=temp11;

curLoc[2][0]=temp10+0.2f; curLoc[2][1]=temp11; curLoc[3][0]=temp20; curLoc[3][1]=temp21; break;

curLoc[0][0]=temp00;

curLoc[0][1]=temp01+0.1f; curLoc[1][0]=temp10; curLoc[1][1]=temp11+0.1f; curLoc[2][0]=temp10; curLoc[2][1]=temp11; curLoc[3][0]=temp10;

case 1:

curLoc[3][1]=temp11-0.1f;

break; case 2: curLoc[0][0]=temp20+0.1f; curLoc[0][1]=temp21;

curLoc[1][0]=temp20-0.1f; curLoc[1][1]=temp21-0.1f; curLoc[2][0]=temp20; curLoc[2][1]=temp21-0.1f; curLoc[3][0]=temp20+0.1f; curLoc[3][1]=temp21-0.1f; break;

case 3: curLoc[0][0]=temp10;

curLoc[0][1]=temp11+0.2f; curLoc[1][0]=temp10; curLoc[1][1]=temp11+0.1f; curLoc[2][0]=temp10; curLoc[2][1]=temp11; curLoc[3][0]=temp20; curLoc[3][1]=temp21;

break; } turn[5]=(turn[5]+1)%4; break;

case 6://反L字形

switch(turn[6])

{ case 0: curLoc[0][0]=temp20-0.1f;

curLoc[0][1]=temp21+0.1f; curLoc[1][0]=temp20-0.1f; curLoc[1][1]=temp21; break;

case 1: curLoc[0][0]=temp00+0.1f;

curLoc[0][1]=temp01+0.1f; curLoc[1][0]=temp30;

curLoc[1][1]=temp31+0.2f; curLoc[2][0]=temp00+0.1f; curLoc[2][1]=temp01; curLoc[3][0]=temp20; curLoc[3][1]=temp21; break;

}

case 2:

curLoc[0][0]=temp00-0.1f; curLoc[0][1]=temp01-0.1f; curLoc[1][0]=temp20; curLoc[1][1]=temp21; curLoc[2][0]=temp20+0.1f; curLoc[2][1]=temp21; curLoc[3][0]=temp30+0.1f; curLoc[3][1]=temp31; break;

case 3: curLoc[0][0]=temp20; }

curLoc[0][1]=temp21+0.1f; curLoc[1][0]=temp20; curLoc[1][1]=temp21; curLoc[2][0]=temp30-0.1f; curLoc[2][1]=temp31; curLoc[3][0]=temp30; curLoc[3][1]=temp31; break;

turn[6]=(turn[6]+1)%4; break; }

//如果旋转非法(即旋转时碰到墙壁了),则要恢复原来的状态 int ret;

ret=CheckConflict(); if(ret == 1) { curLoc[0][0]=temp00; }

curLoc[0][1]=temp01; curLoc[1][0]=temp10; curLoc[1][1]=temp11; curLoc[2][0]=temp20; curLoc[2][1]=temp21; curLoc[3][0]=temp30; curLoc[3][1]=temp31;

/*

消除满格的一行,在每次over被修改为true的时候都要检查一遍 算法思想是从第0行开始依次判断,如果empty为true则将下面的向上, 并不是判断一次就移动所有的,而是只移动最近的,将空出来的 那一行的empty标记为true

*/

void Delete(int *empty) { int i,j; int pos; while(1) //将上面非空的行填补到下面的空行中 }

/*

*1、判断新生成的图形是否和原来的图形有冲突,有则不能更改,这个地方比较不好实现

*2、判断是否有满格的行,有则调用Delete函数去掉

*3、这里似乎还要加上判断是否到大顶部,如果到达顶部则游戏结束(可采用监视方框最上

*面一行之上那行里面有没有方格,如果有的话则游戏结束)

*结束之后就可以把当前方块存入BLOCK中

*empty表示一行中方块的数目,-1表示为空行,0表示部分为空,1表示满行 */

void CheckDelete()//目前这个函数还只是实现了一个方块到达终点之后是否有能够被删除的行

{

i=1;

while(i < 20&&empty[i] == 0) { }

i++;

break;

j++;

//为空或者满,都需要将上面的行移下来填充

if(i >= 20) j=i+1;

while(j < 20&&empty[j] == -1) if(j >= 20) break; if(j < 20&&empty[j] != -1) { for(pos=0;pos<20;pos++)

BLOCK[i][pos]=BLOCK[j][pos];

empty[i]=empty[j];

empty[j]=-1; } }

for(i=1;i<20;i++)

if(empty[i] != 0) { }

for(j=0;j<20;j++) BLOCK[i][j]=0;

{ int i,j;

int empty[SIZE]; bool is_needed=false; int count;

for(i=0;i

empty[i]=-1;

for(i=0;i<4;i++) { double x=(curLoc[i][0]+1)*10+0.5; //此处无需注意取值,checkConflict已经解决

double y=(curLoc[i][1]+1)*10+0.5; BLOCK[(int)y][(int)x]=1;//融合

}

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

for(j=0;j<20;j++) if(BLOCK[i][j]==1)

count++;

if(count==20)

{ empty[i]=1; //若满格,则可以删除,置为true score++; //此处计分

is_needed=true;

}

else if(count > 0&&count < 20) { empty[i]=0;

}

}

if(is_needed==true)//如果有满行则去删除,否则免之

Delete(empty);

}

int CheckConflict(int lef_rig) { int i;

for(i=0;i<4;i++) { double x=(curLoc[i][0]+1)*10; //注意取值!!! double y=(curLoc[i][1]+1)*10+0.5; //y方向无需注意

x=x>0?(x+0.5):(x-0.5); if(lef_rig == 1)

{


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

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

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

马上注册会员

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