主题:我花两天时间做的俄罗斯方块,各路高手请指点一下
#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();
}
#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();
}