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) { 为 因