俄罗斯方块 C语言程序.docx
《俄罗斯方块 C语言程序.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块 C语言程序.docx(16页珍藏版)》请在冰点文库上搜索。
俄罗斯方块C语言程序
#include
#include
#include
#include
#include
#include
#include
#defineLEFT0x4b00
#defineRIGHT0x4d00
#defineDOWN0x5000
#defineUP0x4800
#defineESC0x011b
intBox_x[5],Box_y[5],Box_xy[15][10]={0},num,life=1,score,mx,my,key,x[5],y[5],size,grade=0;
int*buf;
voidInit();
voidmy_ad_1();
voidmy_ad_2();
voidmy_ad_3();
voidplay();
voidjiang();
voidDe_B_xy();
voidDraw_Box();
voidAd_Box_y();
voidMi_Box_x();
voidAd_Box_x();
voidch_B_xy();
voidrebuild();
voidDraw_New();
voidclose();
voiddelay_n(intn);
voidmain()
{
Init();
my_ad_1();
my_ad_2();
my_ad_3();
play();
close();
}
voidInit()
{
intdriver=DETECT,mode;
initgraph(&driver,&mode,"C:
\\ProgramFiles\\CYuYan\\bin");
mx=getmaxx();
my=getmaxy();
setbkcolor(BLUE);
size=imagesize(0,0,32,32);
if(size!
=-1)
buf=malloc(size);
getimage(0,0,32,32,buf);
}
voidmy_ad_1()
{intch1[]={100,120,100,300,120,300,120,200,200,200,200,280,180,280,180,300,220,300,220,180,120,180,120,140,300,140,300,100,280,120,100,120},
ch2[]={240,100,280,300,300,300,260,100,240,100},
ch3[]={280,160,264,280,284,280,300,160,280,160},
j1[]={300,120,340,160,360,160,320,100,300,120},
j2[]={300,180,340,220,360,220,320,160,300,180},
j3[]={300,300,340,300,380,220,360,220,300,300},
j4[]={380,120,380,140,420,140,420,280,360,280,360,300,500,300,500,280,440,280,440,140,480,140,480,120,380,120};
settextjustify(CENTER_TEXT,CENTER_TEXT);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,5);
setcolor(WHITE);
sleep
(2);
outtextxy(320,200,"CProgramFlashCreation");
settextstyle(3,HORIZ_DIR,3);
sleep
(1);
outtextxy(320,300,"ChengJiang,ElectronicClass1,PhysicDepartment,GDUT");
sleep
(1);
cleardevice();
fillpoly(16,ch1);
fillpoly(5,ch2);
fillpoly(5,ch3);
fillpoly(5,j1);
fillpoly(5,j2);
fillpoly(5,j3);
fillpoly(12,j4);
sleep
(2);
cleardevice();
}
voidmy_ad_2()
{
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(0,0,150,my);
bar(450,0,mx,my);
setviewport(150,0,450,my,1);
}
voidmy_ad_3()
{
inti,j;
outtextxy(150,30,"Waitting...");
setlinestyle(1,1,1);
rectangle(0,60,450,90);
setlinestyle(SOLID_LINE,1,THICK_WIDTH);
jiang();
for(i=0;i<10;i++)
{
bar(30*i,60,30*(i+1),90);
rectangle(30*i,60,30*(i+1),90);
sleep
(1);
}
clearviewport();
outtextxy(150,240,"OK!
Press[Enter]");
getch();
clearviewport();
}
voidplay()
{
inti,j;
outtextxy(150,460,"grade:
0score:
0");
while
(1)
{
randomize();
num=random(19);
De_B_xy();
while
(1)
{
while(kbhit())
{
key=bioskey(0);
Draw_Box();
switch(key)
{
caseUP:
getch();break;
caseDOWN:
Ad_Box_y();break;
caseRIGHT:
Ad_Box_x();break;
caseLEFT:
Mi_Box_x();break;
caseESC:
close();break;
default:
ch_B_xy();break;
}
if(check())break;
}
Draw_Box();
if(check())break;
for(i=1;i<5;i++)
Box_y[i]+=1;
if(!
kbhit())
delay_n(10-grade);
}
rebuild();
Draw_New();
if(!
life)break;
}
}
voidDraw_Box()
{
inti;
for(i=1;i<5;i++)
putimage(x[i]*30-1,30*y[i]-1,buf,COPY_PUT);
if(!
(y[1]&&y[2]&&y[3]&&y[0]))
for(i=4;i<8;i++)
putimage(30*i-1,0,buf,COPY_PUT);
for(i=1;i<5;i++)
{
x[i]=Box_x[i];
y[i]=Box_y[i];
bar(Box_x[i]*30,Box_y[i]*30,(Box_x[i]+1)*30,(Box_y[i]+1)*30);
rectangle(Box_x[i]*30,Box_y[i]*30,(Box_x[i]+1)*30,(Box_y[i]+1)*30);
}
}
voidDe_B_xy()
{
inti;
switch(num)
{
case0:
{Box_x[1]=Box_x[2]=Box_x[3]=Box_x[4]=0;Box_y[1]=0;Box_y[2]=1;Box_y[3]=2;Box_y[4]=3;}break;
case1:
{Box_y[1]=Box_y[2]=Box_y[3]=Box_y[4]=0;Box_x[1]=0;Box_x[2]=1;Box_x[3]=2;Box_x[4]=3;}break;
case2:
{Box_x[1]=0;Box_x[2]=1;Box_x[3]=0;Box_x[4]=1;Box_y[1]=0;Box_y[2]=0;Box_y[3]=1;Box_y[4]=1;}break;
case3:
{Box_x[1]=0;Box_x[2]=0;Box_x[3]=0;Box_x[4]=1;Box_y[1]=0;Box_y[2]=1;Box_y[3]=2;Box_y[4]=1;}break;
case4:
{Box_x[1]=0;Box_x[2]=1;Box_x[3]=1;Box_x[4]=2;Box_y[1]=2;Box_y[2]=1;Box_y[3]=2;Box_y[4]=2;}break;
case5:
{Box_x[1]=0;Box_x[2]=1;Box_x[3]=1;Box_x[4]=1;Box_y[1]=1;Box_y[2]=0;Box_y[3]=1;Box_y[4]=2;}break;
case6:
{Box_x[1]=0;Box_x[2]=1;Box_x[3]=1;Box_x[4]=2;Box_y[1]=1;Box_y[2]=1;Box_y[3]=2;Box_y[4]=1;}break;
case7:
{Box_x[1]=0;Box_x[2]=0;Box_x[3]=1;Box_x[4]=1;Box_y[1]=0;Box_y[2]=1;Box_y[3]=1;Box_y[4]=2;}break;
case8:
{Box_x[1]=0;Box_x[2]=1;Box_x[3]=1;Box_x[4]=2;Box_y[1]=1;Box_y[2]=0;Box_y[3]=1;Box_y[4]=0;}break;
case9:
{Box_x[1]=0;Box_x[2]=0;Box_x[3]=1;Box_x[4]=1;Box_y[1]=1;Box_y[2]=2;Box_y[3]=0;Box_y[4]=1;}break;
case10:
{Box_x[1]=0;Box_x[2]=1;Box_x[3]=1;Box_x[4]=2;Box_y[1]=1;Box_y[2]=1;Box_y[3]=2;Box_y[4]=2;}break;
case11:
{Box_x[1]=0;Box_x[2]=0;Box_x[3]=0;Box_x[4]=1;Box_y[1]=0;Box_y[2]=1;Box_y[3]=2;Box_y[4]=2;}break;
case12:
{Box_x[1]=0;Box_x[2]=1;Box_x[3]=2;Box_x[4]=2;Box_y[1]=1;Box_y[2]=1;Box_y[3]=0;Box_y[4]=1;}break;
case13:
{Box_x[1]=0;Box_x[2]=1;Box_x[3]=1;Box_x[4]=1;Box_y[1]=0;Box_y[2]=0;Box_y[3]=1;Box_y[4]=2;}break;
case14:
{Box_x[1]=0;Box_x[2]=0;Box_x[3]=1;Box_x[4]=2;Box_y[1]=0;Box_y[2]=1;Box_y[3]=0;Box_y[4]=0;}break;
case15:
{Box_x[1]=0;Box_x[2]=1;Box_x[3]=1;Box_x[4]=1;Box_y[1]=2;Box_y[2]=0;Box_y[3]=1;Box_y[4]=2;}break;
case16:
{Box_x[1]=0;Box_x[2]=1;Box_x[3]=2;Box_x[4]=2;Box_y[1]=0;Box_y[2]=0;Box_y[3]=0;Box_y[4]=1;}break;
case17:
{Box_x[1]=0;Box_x[2]=0;Box_x[3]=0;Box_x[4]=1;Box_y[1]=0;Box_y[2]=1;Box_y[3]=2;Box_y[4]=0;}break;
case18:
{Box_x[1]=0;Box_x[2]=0;Box_x[3]=1;Box_x[4]=2;Box_y[1]=0;Box_y[2]=1;Box_y[3]=1;Box_y[4]=1;}break;
}
for(i=1;i<5;i++)
Box_x[i]+=4;
}
intcheck()
{
inti,p=0;
for(i=1;i<5;i++)
if(Box_xy[Box_y[i]+1][Box_x[i]]||Box_y[i]>13)
p=1;
return(p);
}
voidAd_Box_y()
{
inti,p=1;
for(i=1;i<5;i++)
if(Box_xy[Box_y[i]+1][Box_x[i]]||Box_y[i]>13)
p=0;
if(p)
for(i=1;i<5;i++)
Box_y[i]+=1;
}
voidAd_Box_x()
{
inti,p=1;
for(i=1;i<5;i++)
if(Box_xy[Box_y[i]][Box_x[i]+1]||Box_x[i]>8)
p=0;
if(p)
for(i=1;i<5;i++)
Box_x[i]+=1;
}
voidMi_Box_x()
{
inti,p=1;
for(i=1;i<5;i++)
if(Box_xy[Box_y[i]][Box_x[i]-1]||Box_x[i]<1)
p=0;
if(p)
for(i=1;i<5;i++)
Box_x[i]-=1;
}
voidch_B_xy()
{
inti,j,t,maxx=Box_x[1],maxy=Box_y[1];
for(i=2;i<5;i++)
{
if(maxxmaxx=Box_x[i];
if(maxymaxy=Box_y[i];
}
switch(num)
{
case0:
num=num+1;break;
case1:
num=num-1;
case2:
;break;
case3:
num=num+1;break;
case4:
num=num+1;break;
case5:
num=num+1;break;
case6:
num=num-3;break;
case7:
num=num+1;break;
case8:
num=num-1;break;
case9:
num=num+1;break;
case10:
num=num-1;break;
case11:
num=num+1;break;
case12:
num=num+1;break;
case13:
num=num+1;break;
case14:
num=num-3;break;
case15:
num=num+1;break;
case16:
num=num+1;break;
case17:
num=num+1;break;
case18:
num=num-3;break;
}
De_B_xy();
for(i=1;i<5;i++)
{
Box_x[i]=Box_x[i]+maxx-Box_x[4];
Box_y[i]=Box_y[i]+maxy-2;
}
}
voidrebuild()
{
inti,j,p,t[4]={0},k=0;
for(i=1;i<5;i++)
Box_xy[Box_y[i]][Box_x[i]]=1;
for(i=0;i<15;i++)
{
p=1;
for(j=0;j<10;j++)
if(!
Box_xy[i][j])
p=0;
if(p)
{
t[k]=i;
k++;
score+=10*k;
}
}
for(k=0;k<4;k++)
{
if(t[k])
{
for(i=t[k];i>0;i--)
for(j=0;j<10;j++)
Box_xy[i][j]=Box_xy[i-1][j];
}
}
for(i=0;i<10;i++)
if(Box_xy[0][i])
life=0;
setfillstyle(1,4);
for(i=0;i<4;i++)
if(t[i])
bar(0,30*t[i],300,30*(t[i]+1));
setfillstyle(1,9);
for(i=1;i<5;i++)
{
x[i]=0;
y[i]=0;
}
grade=(score-score%100)/100;
delay(30000);
}
voidDraw_New()
{
inti,j;
chartext[20];
clearviewport();
for(i=0;i<15;i++)
for(j=0;j<10;j++)
if(Box_xy[i][j])
{
bar(30*j,30*i,30*j+30,30*i+30);
rectangle(30*j,30*i,30*j+30,30*i+30);
}
sprintf(text,"grade:
%dscore:
%d",grade,score);
gotoxy(100,460);
outtextxy(150,460,text);
}
voidclose()
{
inti,j;
for(i=14;i>=0;i--)
{
for(j=0;j<10;j++)
{
bar(30*j,30*i,30*(j+1),30*(i+1));
rectangle(30*j,30*i,30*(j+1),30*(i+1));
}
delay(20000);
}
clearviewport();
jiang();
outtextxy(150,60,"gameover");
getch();
closegraph();
}
voiddelay_n(intn)
{
inti;
for(i=0;i}
voidjiang()
{
intjx=0,jy=4;
for(jx=0;jx<3;jx++)
{
bar(30*jx,30*jy,30*(jx+1),30*(jy+1));
rectangle(30*jx,30*jy,30*(jx+1),30*(jy+1));
bar(30*jx,30*(jy+3),30*(jx+1),30*(jy+4));
rectangle(30*jx,30*(jy+3),30*(jx+1),30*(jy+4));
jy++;
}
jy=14;
for(jx=0;jx<4;jx++)
{
bar(30*jx,30*jy,30*(jx+1),30*(jy+1));
rectangle(30*jx,30*jy,30*(jx+1),30*(jy+1));
jy--;
}
jy=4;
for(jx=4;jx<9;jx++)
{
bar(30*jx,30*jy,30*(jx+1),30*(jy+1));
rectangle(30*jx,30*jy,30*(jx+1),30*(jy+1));
}
jy=14;
for(jx=3;jx<11;jx++)
{
bar(30*jx,30*jy,30*(jx+1),30*(jy+1));
rectangle(30*jx,30*jy,30*(jx+1),30*(jy+1));
}
jx=6;
for(jy=5;jy<15;jy++)
{
bar(30*jx,30*jy,30*(jx+1),30*(jy+1));
rectangle(30*jx,30*jy,30*(jx+1),30*(jy+1));
}
}