#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
char x,y,ty,ty1,zhuan,line1=0,line2=0,ss[16],hol[10][29]={0},a[4][2]={0};
int score1=0,speed=1000;
void unit(char,char,char); void dl(int);
void block(char); void fuzi(char,char);
void up(void); void down(void);
void left(void); void right(void);
char fx(char,char,char); char fy(char,char,char);
char max1(char,char,char); char min1(char,char,char);
void score(void); void xiao(void);
void save(void);
main()
{
char cycy=0,i,j,b,ci;
initgraph(VGA,VGAHI,"c://tc//egavga.bgi");
getch();
setfillstyle(1,7);
setcolor(7);
bar(200,10,350,430);
setcolor(15);rectangle(198,8,352,432);
x=4;ty=0;zhuan=0;y=1;
do
{
fuzi(ty,zhuan);
block(14);
score();
for(ci=0;ci<10;ci++)
{
if(kbhit()!=0)
b=getch();
else
b=0;
if(b==13)
break;
switch(b)
{
case 72: up(); break;
case 75: left(); break;
case 77: right(); break;
case 80: down(); break;
}
dl(speed/2);
}
j=max1(a[3][1],a[1][1],a[2][1]);
if((j>=27)||(hol[a[0][0]][a[0][1]+1]+hol[a[1][0]][a[1][1]+1]+hol[a[2][0]][a[2][1]+1]+hol[a[3][0]][a[3][1]+1]
>=1))
{
hol[a[0][0]][a[0][1]]=1;hol[a[1][0]][a[1][1]]=1;
hol[a[2][0]][a[2][1]]=1;hol[a[3][0]][a[3][1]]=1;
y=2;
x=5;
do
{
randomize();
ty1=random(100);
ty1%=7;
if(ty1==0)
ty1=7;
}
while(ty==ty1);
ty=ty1;
j=0;
xiao();
}
else
{
block(0);
y++;
}
for(i=0;i<10;i++)
if(hol[i][0]==1)
{
cycy=1;
getch();
break;
}
if(cycy==1)
{
cycy=0;
break;
}
}
while(b!=13);
getch();
closegraph();
save();
getch();
}
void unit(char x,char y,char color)
{
setfillstyle(1,color);
setcolor(color);
bar(200+x*15,10+y*15,200+(x+1)*15-2,10+(y+1)*15-2);
}
void block(char color)
{
char i,t;
for(i=0;i<4;i++)
unit(a[i][0],a[i][1],color);
}
void dl(int a)
{
int r,n;
for(r=0;r<a;r++)
for(n=0;n<30000;n++)
{
n++;
n--;
}
}
char fx(char x0,char y0,char n)
{
char x1,x2,y1,y2;
x1=y0+x-y;
y1=x+y-x0;
if(n==0)
return(x0);
if(n==1)
return(x1);
if(n>=2)
{
x2=y1+x-y;
y2=x+y-x1;
if(n==2)
return(x2);
else
{
x1=y2+x-y;
y1=x+y-x2;
if(n==3)
return(x1);
}
}
}
char fy(char x0,char y0,char n)
{
char x1,x2,y1,y2;
x1=y0+x-y;
y1=x+y-x0;
if(n==0)
return(y0);
if(n==1)
return(y1);
if(n>=2)
{
x2=y1+x-y;
y2=x+y-x1;
if(n==2)
return(y2);
else
{
x1=y2+x-y;
y1=x+y-x2;
if(n==3)
return(y1);
}
}
}
void left()
{
char j;
fuzi(ty,zhuan);
block(0);
j=min1(a[3][0],a[1][0],a[2][0]);
if((j>=1)&&(hol[a[0][0]-1][a[0][1]]==0)&&(hol[a[1][0]-1][a[1][1]]==0)&&(hol[a[2][0]-1][a[2][1]]==0)&&(hol[a[3][0]-1]
[a[3][1]]==0))
{
j--;
x--;
}
fuzi(ty,zhuan);
block(14);
}
void right()
{
char j;
fuzi(ty,zhuan);
block(0);
j=max1(a[3][0],a[1][0],a[2][0]);
if((j<9)&&(hol[a[0][0]+1][a[0][1]]==0)&&(hol[a[1][0]+1][a[1][1]]==0)&&(hol[a[2][0]+1][a[2][1]]==0)&&(hol[a[3][0]+1]
[a[3][1]]==0))
{
j++;
x++;
}
fuzi(ty,zhuan);
block(14);
}
void fuzi(char n,char zhuan)
{
a[0][0]=x;
a[0][1]=y;
n=n%7;
if(n==0)
n=7;
zhuan=zhuan%4;
switch (n)
{
case 1: a[1][0]=fx(x-1,y,zhuan);a[1][1]=fy(x-1,y,zhuan);
a[2][0]=fx(x,y+1,zhuan);a[2][1]=fy(x,y+1,zhuan);
a[3][0]=fx(x,y+2,zhuan);a[3][1]=fy(x,y+2,zhuan);
break;
case 2: a[1][0]=fx(x-1,y,zhuan);a[1][1]=fy(x-1,y,zhuan);
a[2][0]=fx(x,y-1,zhuan);a[2][1]=fy(x,y-1,zhuan);
a[3][0]=fx(x,y-2,zhuan);a[3][1]=fy(x,y-2,zhuan);
break;
case 3: a[1][0]=fx(x-1,y-1,zhuan);a[1][1]=fy(x-1,y-1,zhuan);
a[2][0]=fx(x,y+1,zhuan);a[2][1]=fy(x,y+1,zhuan);
a[3][0]=fx(x-1,y,zhuan);a[3][1]=fy(x-1,y,zhuan);
break;
case 4: a[1][0]=fx(x-1,y,zhuan);a[1][1]=fy(x-1,y,zhuan);
a[2][0]=fx(x-1,y+1,zhuan);a[2][1]=fy(x-1,y+1,zhuan);
a[3][0]=fx(x,y-1,zhuan);a[3][1]=fy(x,y-1,zhuan);
break;
case 5: a[1][0]=fx(x-1,y,zhuan);a[1][1]=fy(x-1,y,zhuan);
a[2][0]=fx(x,y-1,zhuan);a[2][1]=fy(x,y-1,zhuan);
a[3][0]=fx(x,y+1,zhuan);a[3][1]=fy(x,y+1,zhuan);
break;
case 6: a[1][0]=fx(x,y+1,zhuan);a[1][1]=fy(x,y+1,zhuan);
a[2][0]=fx(x,y-1,zhuan);a[2][1]=fy(x,y-1,zhuan);
a[3][0]=fx(x,y-2,zhuan);a[3][1]=fy(x,y-2,zhuan);
break;
case 7: a[1][0]=fx(x-1,y,zhuan);a[1][1]=fy(x-1,y,zhuan);
a[2][0]=fx(x,y-1,zhuan);a[2][1]=fy(x,y-1,zhuan);
a[3][0]=fx(x-1,y-1,zhuan);a[3][1]=fy(x-1,y-1,zhuan);
break;
}
}
void up()
{
char j,k;
fuzi(ty,zhuan);
block(0);
zhuan++;
zhuan=zhuan%4;
fuzi(ty,zhuan);
j=min1(a[3][0],a[1][0],a[2][0]);
k=max1(a[3][0],a[1][0],a[2][0]);
if((k<=9)&&(j>=0))
{
if((hol[a[0][0]][a[0][1]]==0)&&(hol[a[1][0]][a[1][1]]==0)&&(hol[a[2][0]][a[2][1]]==0)&&(hol[a[3][0]][a[3]
[1]]==0))
block(14);
else
{
zhuan+=3;
zhuan%=4;
fuzi(ty,zhuan);
block(14);
}
}
else
{
zhuan+=3;
zhuan%=4;
fuzi(ty,zhuan);
block(14);
}
}
void down(void)
{
char j,cy=0;
fuzi(ty,zhuan);
block(0);
j=max1(a[3][1],a[2][1],a[1][1]);
while(j<28)
{
j=max1(a[3][1],a[1][1],a[2][1]);
if((j>=27)||(hol[a[0][0]][a[0][1]+1]==1)||(hol[a[1][0]][a[1][1]+1]==1)||(hol[a[2][0]][a[2][1]+1]==1)||(hol[a
[3][0]][a[3][1]+1]==1))
{
hol[a[0][0]][a[0][1]]=1;
hol[a[1][0]][a[1][1]]=1;
hol[a[2][0]][a[2][1]]=1;
hol[a[3][0]][a[3][1]]=1;
block(14);
xiao();
y=2;
x=5;
do
{
randomize();
ty1=random(100);
ty1%=7;
if(ty1==0)
ty1=7;
}
while(ty1==ty);
ty=ty1;
j=0;
fuzi(ty,zhuan);
block(14);
cy=1;
}
else
{
dl(speed/4);
fuzi(ty,zhuan);
block(0);
y++;
}
if(cy==1)
{
cy=0;
break;
}
fuzi(ty,zhuan);
block(14);
}
}
void xiao(void)
{
char jj,y1,r,x1,y2;
for(jj=0;jj<4;jj++)
{
for(y1=27;y1>0;y1--)
{
r=0;
for(x1=0;x1<10;x1++)
{
if(hol[x1][y1]==1)
r++;
}
if(r==10)
{
line1++;
for(x1=0;x1<10;x1++)
{
unit(x1,y1,0);
hol[x1][y1]=0;
}
for(y2=y1-1;y2>0;y2--)
{
for(x1=0;x1<10;x1++)
{
if(hol[x1][y2]==1)
{
hol[x1][y2]=0;
unit(x1,y2,0);
unit(x1,y2+1,14);
hol[x1][y2+1]=1;
}
}
}
}
}
}
}
char max1(char a,char b,char c)
{
char max3;
if(a>=b)
max3=a;
else
max3=b;
if(max3<c)
max3=c;
return(max3);
}
char min1(char a,char b,char c)
{
char min;
if(a<=b)
min=a;
else
min=b;
if(min>c)
min=c;
return(min);
}
void score(void)
{
char a,b=1;
setcolor(0);
outtextxy(20,20,ss);
setcolor(14);
for(a=0;a<line1-line2;a++)
b*=2;
score1+=b-1;
if(b>1)
speed-=2;
line2=line1;
sprintf(ss,"Your score:%d.",score1);
outtextxy(20,20,ss);
}
void save(void)
{
FILE * fp;
int i;
i=0;
fp=fopen("bloscore.txt","rb+");
i=(int)(fgetc(fp))-48;
if(fp=NULL)
i=0;
fclose(fp);
if(i<score1)
{
fp=fopen("bloscore.txt","wb+");
fprintf(fp,"%d",score1);
fclose(fp);
printf("Your score: %d are the highest!",score1);
}
getch();
}
相关文章
- 01-07c语言写随机座位,并可以指定座位
- 01-07如何用C语言写一个基于服务器和客户端(TCP)
- 01-07C语言二分法写猜数字小游戏
- 01-07C语言写猜数字(随机数、循环、if判断)
- 01-07瞎写c语言玩哦
- 01-07C语言:二十三 不用库函数/局部or全局变量写测字符串长度的函数
- 01-07利用C语言写一个等额本息的还款计算器。
- 01-07C语言 简单的文件操作 写文件
- 01-07(2021.12.18自认为思路得到深化不再只是单纯写步骤说明而是会讲明白完成难点与解决思路)leetcode1518换酒问题(c语言)(官方答案手把手解析)
- 01-07C语言从入门到入土(入门篇)如何让朋友也能玩自己写的游戏(.exe文件如何附带静态链接库)