回 帖 发 新 帖 刷新版面

主题:我花两天时间做的俄罗斯方块,各路高手请指点一下

#include<stdlib.h>
#include<graphics.h>
aa[30][30],cc[3][3];
int cc_x=255,cc_y=10,step,ne=0,rec=0;

ht(int x,int y,int l,int color)
{
setcolor(color);
setfillstyle(1,3);
l=l/2;
line(x-l,y-l,x+l,y-l);
line(x+l,y-l,x+l,y+l);
line(x+l,y+l,x-l,y+l);
line(x-l,y+l,x-l,y-l);
}

start()
{int i,j;
for(i=0;i<22;i++)
   {aa[29][i]=1;

    }
setcolor(5);
line(cc_x-6-55,cc_y,110+cc_x-5,cc_y);
line(110+cc_x-5,cc_y,110+cc_x-5,cc_y+325);
line(110+cc_x-6,cc_y+325,cc_x-6-55,cc_y+325);
line(cc_x-6-55,cc_y+325,cc_x-6-55,cc_y);
printf("well come to 'fys_elcfk'\n");
printf("left  =[A]\n");
printf("right =[D]\n");
printf("change=[L]\n");
printf("exit  =[Esc]\n");
printf("start =[space]\n");
printf("stop  =[space]\n");
getch();
printf("\n your record=   ");
}

nextstep(int x,int y,int ch)
{
  int i,j ;
step=step+1;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
   {
   if(cc[i][j]==1)  ht(cc_x+j*11,cc_y+i*11,9,0);
   }
if (ch==1) { change();y=11;}
for (i=0;i<3;i++)
for (j=0;j<3;j++)
   {
  if(cc[i][j]==1)  ht(cc_x+j*11+x,cc_y+i*11+y,9,3);
   }
cc_x=cc_x+x;
cc_y=cc_y+y;
}

change()
{
int i,j,zj;
for(j=0,i=2;j<2;j++,i--)
  {
   zj=cc[0][j];
   cc[0][j]=cc[i][0];
   cc[i][0]=cc[2][i];
   cc[2][i]=cc[j][2];
   cc[j][2]=zj;
  }
}


check()
{ int i,j,n,k[3]={0,0,0},st_x;
st_x=(cc_x-200)/11;

for(j=0;j<3;j++) for(i=2;i>=0;i--) if(cc[i][j]==1) {k[j]=i ;break;} else k[j]=-1;

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

if(k[i]>-1)
if(aa[k[i]+step][st_x+i]==1)
{
for(j=0;j<3;j++)
for(n=0;n<3;n++)
if(cc[j][n]==1) aa[j+step-1][st_x+n]=1;
ne=1; break;
}

}

next()
{
int i,j,k;
ne=0;
step=0;
cs();
cc_x=255;
cc_y=10;
}

cs()
{
int  ccx[8][3][3]={{1,1,1,0,1,0,0,0,0},{1,0,0,1,0,0,1,0,0},{1,0,0,1,1,0,0,1,0},{0,1,0,1,1,0,1,0,0},{1,1,0,1,1,0,0,0,0},{1,1,0,0,1,0,0,1,0},{0,1,1,0,1,0,0,1,0},{1,1,1,1,0,1,0,0,0}};
int i,j,k;
randomize();
k=rand()%8;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
   cc[i][j]=ccx[k][i][j];

}

check_side(int x)
{
int i,j,k;
int left=2,right=0;

for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
if(cc[j][i]==1) {left=i;break;}
if(left!=2) break;
}
for(i=2;i>0;i--)
{
for(j=0;j<3;j++)
if(cc[j][i]==1) {right=i;break;}
if(right!=0)break;
}
if(cc_x+(left-1)*11<194 && x==-11) x=0;
if(cc_x+right*11>=354 && x==11) x=0;
return(x);
}

check_lr(int x)
{
int i,j,k,fx,st_x;
fx=x/10;
st_x=(cc_x-200)/11;

for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
if(cc[i][j]==1 && aa[step+i][st_x+j+fx]==1){x=0;break;}
if(x==0) break;
}
return(x);
}

record()
{
int i,j,rdy=0;
for(i=28;i>=0;i--)
{
for(j=0;j<15;j++)
if(aa[i][j]==0) break;
if(j==15)
    {
       rec=rec+10;
    down(i);
    if (rdy==0) rdy=i;
    }
}
if(rdy!=0)
{
setfillstyle(1,0);
bar(195,11,359,26+rdy*11);
setfillstyle(1,3);
printf("\b\b\b%3d",rec);
}

for(j=rdy;j>0;j--)
for(i=0;i<15;i++)
   if(aa[j][i]==1) ht(i*11+200,j*11+22,9,3);
}

down(int i)
{
int j,k;
for(j=i;j>0;j--)
for(k=0;k<15;k++)
   aa[j][k]=aa[j-1][k];
}

main()
{ int fx,ch=0,x=0,y=11,i;
  long sj1,sj2 ;
int gd,gm;
   gd=DETECT;
initgraph(&gd,&gm,"");

start();
cs();
step=0;
for (i=1;i<10000;)
{
  fx=0;
  while(kbhit())
   {
      fx=bioskey(0);
      switch(fx)
    {
       case 9836: {ch=1;} break;
       case 7777: {x=-11;y=11;} break;
       case 8292: {x=11;y=11;} break;
       case 8051: {x=0;y=11;} break;
       default:break;
       }
   }
  if(x==11 || x==-11) {x=check_side(x);x=check_lr(x);}
  check();
if (ne==1) { record(); next();}

if(fx==14624) getch();
nextstep(x,y,ch);
ch=0;x=0;
  for(sj1=1;sj1<15000;sj1++) for(sj2=1;sj2<1000;sj2++) sj1=sj1;
  for(sj1=0;sj1<15;sj1++)
     if(aa[0][sj1]==1)
      {
      printf("\n you are over");
      fx=283;
      getch();
      }
  if (fx==283 ) break;
}
closegraph();
}













回复列表 (共19个回复)

沙发

汗楼上的,注释都没有,

这么长,有谁有空给你看啊

板凳

呵呵~是啊~~适当的注释很重要的~快加点吧~

3 楼

11111111

4 楼

我还没有这个水平呢:)

5 楼

编译不了。

6 楼

里面有不少bug
如:
其中的方块的旋转,进行旋转时,在其新位置可能因为有别的方块存在而不能旋转,
但此程序中没有限止,当出现这种情况时就会出错,

7 楼

8 楼

9 楼

你好:
   你辛苦了!
   
   你这个程序测试通过了吗?怎么不把编译好的程序打包发上来,让我试一试.我才能给你评价,不试试怎么知道好坏呢?



                          有空再联系!!!

10 楼

我是刚加入的新手,所以看不懂![em10]

我来回复

您尚未登录,请登录后再回复。点此登录或注册