重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一个俄罗斯方块的源代码,自己写的,有点笨的……
创新互联公司专注于企业全网营销推广、网站重做改版、万州网站定制设计、自适应品牌网站建设、H5建站、商城开发、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为万州等各大城市提供网站开发制作服务。
#includedos.h
#includestdlib.h
#includeconio.h
#includegraphics.h
#includestdio.h
#includebios.h
#define LEFT 0x4b
#define RIGHT 0x4d
#define DOWN 0x50
#define CHANGE 0x20
#define ESC 0x1b
#define INTR 0x1C
#define DefaultX 5
#define DefaultY 1
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
static unsigned counter=0;
static unsigned shape[7][4][4][4]={
{
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
},
{
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}},
{{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0}},
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}},
{{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0}},
},
{
{{0,1,0,0},{1,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,0,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,1,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
},
{
{{1,0,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,1,1,0},{1,1,0,0},{0,0,0,0}},
{{1,0,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,1,1,0},{1,1,0,0},{0,0,0,0}},
},
{
{{0,1,0,0},{1,1,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,0,0},{0,1,1,0},{0,0,0,0}},
{{0,1,0,0},{1,1,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,0,0},{0,1,1,0},{0,0,0,0}},
},
{
{{1,0,0,0},{1,0,0,0},{1,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{1,0,0,0},{0,0,0,0}},
{{1,1,0,0},{0,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,0,1,0},{1,1,1,0},{0,0,0,0}},
},
{
{{0,1,0,0},{0,1,0,0},{1,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,0,0,0},{1,1,1,0},{0,0,0,0}},
{{1,1,0,0},{1,0,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{0,0,1,0},{0,0,0,0}},
},
};
unsigned back[22][14]={{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
char ShapeColor[7]={8,10,11,12,13,14,15};
char DigitalShape[10]={128+119,3,62,31,128+75,128+93,128+125,19,128+127,128+95};
char ZodiacBack[11]={4,6,12,13,11,10,2,3,9,1,8};
char ZodiacSoft[18][14]={{0,0,0,0,96,0,0,0,0,0,0,0,60,0},
{255,248,0,0,96,0,0,0,0,248,0,0,124,0},
{255,248,0,0,97,128,0,0,3,248,0,0,192,0},
{0,112,0,0,97,128,0,0,7,0,0,1,128,48},
{0,224,0,0,96,0,0,0,14,0,0,1,128,48},
{1,192,0,0,96,0,0,0,12,0,0,1,128,48},
{3,128,120,15,97,128,240,60,12,0,15,15,249,255},
{7,0,252,31,225,131,248,127,14,0,31,143,249,255},
{7,1,142,48,225,135,24,227,7,240,49,193,128,48},
{14,3,134,96,97,142,24,192,3,252,112,193,128,48},
{28,3,6,96,97,140,25,192,0,28,96,193,128,48},
{56,3,6,96,97,140,25,128,0,6,96,193,128,48},
{56,3,6,96,97,140,25,128,0,6,96,193,128,48},
{120,3,6,96,97,140,25,128,0,6,96,193,128,48},
{224,1,140,48,225,142,25,195,24,14,49,129,128,48},
{255,249,252,63,225,135,252,255,28,28,63,129,128,48},
{255,248,240,15,97,131,236,60,15,248,30,1,128,48},
{0,0,0,0,0,0,0,0,7,224,0,1,128,0}};
unsigned long TotalMark=0;
unsigned int Erasered=0,ETimes=0;
int Speed=0;
int CEr=0;
int NumOfLev[5]={0,0,0,0,0};
int TimeDelay[10]={21,18,17,15,13,11,9,7,5,3};
char NewShape[2];
unsigned PerOnce[4];
void interrupt ( *oldhandler)(__CPPARGS);
void interrupt handler(__CPPARGS)
{
++counter;
oldhandler();
}
void DrawBackground()
{
//setlinestyle
}
void DrawDigital(int x,int y,int a)
{
int i=7;
setcolor(((DigitalShape[a]i)1)*7+4);
//printf("%d",(DigitalShape[a]i)1);
i--;
line(x,y+1,x,y+15);
line(x+1,y+2,x+1,y+14);
line(x+2,y+3,x+2,y+13);
setcolor(((DigitalShape[a]i)1)*7+4);
i--;
line(x,y+17,x,y+31);
line(x+1,y+18,x+1,y+30);
line(x+2,y+19,x+2,y+29);
setcolor(((DigitalShape[a]i)1)*7+4);
i--;
line(x,y+17,x,y+31);
line(x+1,y+18,x+1,y+30);
line(x+2,y+19,x+2,y+29);
setcolor(((DigitalShape[a]i)1)*7+4);
i--;
line(x+1,y,x+16,y);
line(x+2,y+1,x+15,y+1);
line(x+3,y+2,x+14,y+2);
setcolor(((DigitalShape[a]i)1)*7+4);
i--;
line(x+2,y+15,x+15,y+15);
line(x+1,y+16,x+16,y+16);
line(x+2,y+17,x+15,y+17);
setcolor(((DigitalShape[a]i)1)*7+4);
i--;
line(x+3,y+30,x+14,y+30);
line(x+2,y+31,x+15,y+31);
line(x+1,y+32,x+16,y+32);
setcolor(((DigitalShape[a]i)1)*7+4);
i--;
line(x+15,y+3,x+15,y+13);
line(x+16,y+2,x+16,y+14);
line(x+17,y+1,x+17,y+15);
setcolor(((DigitalShape[a]i)1)*7+4);
line(x+15,y+19,x+15,y+29);
line(x+16,y+18,x+16,y+30);
line(x+17,y+17,x+17,y+31);
}
void ArtClear()
{
for(int i=480;i=0;i-=2)
{
setcolor(3);
line(0,i-6,639,i-6);
setcolor(9);
line(0,i-4,639,i-4);
setcolor(1);
line(0,i-2,639,i-2);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
for(i=1;i480;i+=2)
{
setcolor(3);
line(0,i+6,639,i+6);
setcolor(9);
line(0,i+4,639,i+4);
setcolor(1);
line(0,i+2,639,i+2);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
}
void end()
{
for(int j=0;j4;j++)
{
for(int i=j;i480;i+=4)
{
setcolor(3);
line(0,i+8,639,i+8);
setcolor(9);
line(0,i+4,639,i+4);
setcolor(1);
line(0,i,639,i);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
delay(5);
}
setcolor(YELLOW);
outtextxy(260,200,"[ Game Over ]");
gotoxy(14,16);
printf("This freeware is written by Daniel.Qu ZodiacSoft 2000");
gotoxy(12,17);
printf("Please e-mail to swami@yeah.net or visit my homepage at");
gotoxy(12,18);
printf(" if you have question.");
gotoxy(14,20);
printf("I will soon provide something new,please wait...");
gotoxy(14,22);
printf("We hold these truths to be self-evident,that all codes");
gotoxy(12,23);
printf("are created FREE.");
getch();
clrscr();
closegraph();
exit(0);
}
void ShowTitle()
{
int gdriver=DETECT,gmode,errorcode,i,j,k;
initgraph(gdriver,gmode,"");
errorcode=graphresult();
if (errorcode!=grOk)
{
printf("Graphics error: %s\n\007",grapherrormsg(errorcode));
exit(1);
}
setbkcolor(9);//This line needs to be changed
for(i=0;i11;i++)
{
setcolor(ZodiacBack[i]);
line(200,i*8+100,440,i*8+100);
}
delay(1000);
for(j=0;j17;j++)
for(i=0;i11;i++)
{
setcolor(ZodiacBack[(i+j)%16]);
line(200,i*8+100,440,i*8+100);
delay(4);
}
for(j=0;j18;j++)
{
for(i=0;i14;i++)
{
for(k=7;k=0;k--)
if((ZodiacSoft[j][i]k)1)
{
putpixel(i*8-k+271,j+122,14);
}
}
delay(10);
}
for(j=17;j=0;j--)
{
for(i=0;i14;i++)
for(k=7;k=0;k--)
{
if((ZodiacSoft[j][i]k)1)
putpixel(i*8-k+271,158-j,5);
}
delay(10);
}
setcolor(15);
outtextxy(295,171,"Present");
getch();
ArtClear();
}
void DrawShape(int x,int y,int color)
{
//if(x2||x12||y19)
// return;
setcolor(color);
/*line(x4,y4,x4,(y4)+14);
line(x4,(y4)+14,(x4)+14,(y4)+14);
line((x4)+14,(y4)+14,(x4)+14,y*16);
line((x4)+14,y4,x4,y*16);
line((x4)+1,y4,(x4)+1,(y4)+14);
line((x4)+1,(y4)+13,(x4)+14,(y4)+13);
line((x4)+13,(y4)+13,(x4)+13,(y4)+1);
line((x4)+13,(y4)+1,x4,(y4)+1); */
for(int i=0;i15;i++)
line(x4,(y4)+i,(x4)+14,(y4)+i);
setcolor(8);
line((x4)+15,(y4)+1,(x4)+15,(y4)+15);
line((x4)+1,(y4)+15,(x4)+15,(y4)+15);
setcolor(color-8);
line((x4)+2,(y4)+2,(x4)+12,(y4)+2);
line((x4)+2,(y4)+2,(x4)+2,(y4)+12);
}
void DrawNull(int x,int y)
{
setcolor(getbkcolor());
for(int i=0;i16;i++)
line(x4,(y4)+i,(x4)+15,(y4)+i);
}
void show(int x,int y,int CurrentShape,int Status)
{
int temp;
for(int i=0;i20;i++)
for(int j=2;j12;j++)
{
if(back[i][j]==1)
DrawShape(6+j,4+i,8);
else
DrawNull(6+j,4+i);
} //no matter what the status be,I will draw the background
for(int l=0;l4;l++)
for(int p=0;p4;p++)
{
if(l+x2||x+l11||p+y19)
continue;
//if(shape[CurrentShape][Status][p][l]+back[y+p][x+l]==1)
// DrawShape(3+l+x,3+p+y,8+CurrentShape);
//else
//cout'O';
// DrawNull(3+j,3+i);
if(shape[CurrentShape][Status][p][l]==1)
DrawShape(6+l+x,4+p+y,ShapeColor[CurrentShape]);
if(back[y+p][x+l]==1)
DrawShape(6+l+x,4+p+y,8);
}
}
void DrawScore()
{
int temp=TotalMark;
for(int i=0;i7;i++)
{
DrawDigital(477-i*20,65,temp%10);
temp/=10;
}
temp=Erasered;
for(i=0;i4;i++)
{
DrawDigital(491-i*20,111,temp%10);
temp/=10;
}
if(Erasered==0)
return;
for(i=1;i5;i++)
{
setfillstyle(1,8);
bar(378,163+i*14,508,170+i*14);
setfillstyle(1,5);
bar(378,163+i*14,378+130*NumOfLev[i]/ETimes,170+i*14);
}
DrawDigital(466,293,Speed);
return;
}
int CreateNewShape()
{
NewShape[1]=NewShape[0];
NewShape[0]=rand()%7;
setfillstyle(1,0);
bar(447,240,514,288);
for(int l=0;l4;l++)
for(int p=0;p4;p++)
if(shape[NewShape[0]][0][p][l]==1)
DrawShape(28+l,15+p,ShapeColor[7]);
return NewShape[1];
}
int Possible(int x,int y,int CurrentShape,int Status)
{
for(int i=0;i4;i++)
{
for(int j=0;j4;j++)
{
if(shape[CurrentShape][Status][i][j]+back[y+i][x+j]==2)
//this line can also write as the following type:
//if(shape[CurrentShape][Status][i][j]back[y+i][x+j])
return 0;
}
}
return 1;
}
void GoLeft(intx,inty,intCurrentShape,intStatus)
{
if(Possible(x-1,y,CurrentShape,Status))
x--;
show(x,y,CurrentShape,Status);
}
void GoRight(intx,inty,intCurrentShape,intStatus)
{
if(Possible(x+1,y,CurrentShape,Status))
x++;
show(x,y,CurrentShape,Status);
}
void GoDown(intx,inty,intCurrentShape,intStatus)
{
int AllAreOne=1,temp=0;
if(Possible(x,y+1,CurrentShape,Status))
{
y++;
show(x,y,CurrentShape,Status);
return;
}
TotalMark+=3*CurrentShape;
for(int i=0;i4;i++)
for(int j=0;j4;j++)
back[i+y][j+x]+=shape[CurrentShape][Status][i][j];
for(int r=1;r20;r++)
{
for(int l=2;l13;l++)
{
if(back[r][l]==0)
AllAreOne=0;
}
if(AllAreOne==1)
{
for(int rr=r;rr0;rr--)
for(int ll=2;ll13;ll++)
back[rr][ll]=back[rr-1][ll];
Erasered++;
CEr++;
temp++;
}
AllAreOne=1;
}
CurrentShape=CreateNewShape();
x=DefaultX;y=DefaultY;Status=0;
NumOfLev[temp]++;
TotalMark+=5*temp;
show(x,y,CurrentShape,Status);
counter=0;
if(!Possible(x,y,CurrentShape,Status))
{
getch();
end();
}
if(CEr=30)
{
Speed=(Speed+1)%10;
CEr/=30;
}
if(temp)
ETimes++;
DrawScore();
return;
}
void ChageShape(intx,inty,intCurrentShape,intStatus)
{
if(Possible(x,y,CurrentShape,(Status+1)%4))
Status=(Status+1)%4;
show(x,y,CurrentShape,Status);
}
void DrawFace()
{
int temp;
setcolor(15);
line(351,59,519,59);
line(351,60,518,60);
line(351,59,351,156);
line(352,59,352,155);
setcolor(7);
line(518,61,518,154);
line(519,60,519,154);
line(353,155,519,155);
line(352,156,519,156);
setcolor(8);
for(int i=61;i155;i++)
line(353,i,517,i);
setcolor(7);
line(427,106,512,106);
line(428,107,511,107);
line(427,106,427,147);
line(428,106,428,146);
setcolor(15);
line(512,106,512,147);
line(511,107,511,146);
line(428,146,511,146);
line(427,147,512,147);
settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
setcolor(14);
outtextxy(357,119,"Erasered");
outtextxy(370,130,"Level:");
setcolor(15);
line(352,167,519,167);
line(352,168,518,168);
line(352,169,352,407);
line(353,169,353,406);
setcolor(7);
line(519,167,519,407);
line(518,168,518,406);
line(352,407,519,407);
line(353,406,519,406);
line(524,55,89,55); //outter border 1st
line(524,55,524,411);
line(89,411,524,411);
line(89,55,89,411);
line(524,56,89,56); //outter border 2nd
line(525,55,525,411);
line(89,410,524,410);
line(88,55,88,411);
setfillstyle(8,7);
bar(94,59,336,406);
//setfillstyle(1,3);
//bar(128,78,296,386);
for(i=0;i8;i++)
DrawDigital(357+i*20,65,0);
for(i=0;i4;i++)
DrawDigital(431+i*20,111,0);
setfillstyle(1,8);
setcolor(12);
for(i=0;i4;i++)
{
temp=i+'1';
outtextxy(364,177+14*i,(char*)temp);
bar(378,177+i*14,508,184+i*14);
}
setcolor(14);
outtextxy(366,250,"Next Shape");
setcolor(10);
outtextxy(366,294,"Current");
outtextxy(382,309,"Level");
setcolor(6);
outtextxy(366,334,"Message:");
bar(362,348,509,398);
DrawDigital(466,293,Speed);
}
void WannaQuit()
{
int choise=0,temp;
setfillstyle(1,8);
bar(362,348,509,398);
setcolor(15);
outtextxy(378,355,"Are you sure to");
outtextxy(368,368,"quit game?");
outtextxy(410,388,"Yes");
outtextxy(470,388,"No");
setcolor(14);
circle(399,392,4);
while((temp=bioskey(0))!=7181)
{
if(temp==19200)
{
setcolor(8);
circle(459,392,4);
choise=0;
setcolor(14);
circle(399,392,4);
}
if(temp==19712)
{
setcolor(8);
circle(399,392,4);
choise=1;
setcolor(14);
circle(459,392,4);
}
}
if(choise==0)
{
end();
}
setfillstyle(1,8);
bar(362,348,509,398);
return;
}
void main()
{
ShowTitle();
unsigned c;
int CurrentShape,x=6,y=0,Status=0;
oldhandler=getvect(INTR);
setvect(INTR,handler);
randomize();
NewShape[0]=rand()%7;
DrawFace();
CurrentShape=CreateNewShape();
show(x,y,CurrentShape,Status);
while(1)
{
if(kbhit())
{
c=getch();
if(c==0)
c=getch();
switch(c)
{
case 's' :Speed=(Speed+1)%10;DrawDigital(466,293,Speed);break;
case DOWN :GoDown(x,y,CurrentShape,Status);break;
case LEFT :GoLeft(x,y,CurrentShape,Status);break;
case RIGHT :GoRight(x,y,CurrentShape,Status);break;
case CHANGE :ChageShape(x,y,CurrentShape,Status);break;
case ESC :WannaQuit();
}
}
if((counter%=TimeDelay[Speed])==(TimeDelay[Speed]-1))
{
GoDown(x,y,CurrentShape,Status);
counter=0;
}
}
}
public void go()//主调方法 表示 1 step 如果游戏没结束则继续 如此往复直到游戏结束
{
if (downCheck())//如果有下落空间
{
down();//下落操作
}
else//如果到底了 或者 跟其他shape接触
{
merge();//把 “卡住”的方块 “印”到画布(容器gameArea)中去,意思就是把卡住的方块“堆”到游戏区
if (!isOver)//如果游戏没有结束(判断依据为方块是否已经堆积到容器的顶端) 重新实例化一个shape 让他down下来
{
shape s = new shape();
int pindx = 0;
for (int i = 0; i s.transform.GetLength(0); i++)
{
for (int j = 0; j s.transform.GetLength(1); j++)
{
if (s.transform[i, j] == true)
{
sh[pindx++] = new Point(j, i);
}
}
}
}
}
setScore();//在重新实例化之前先检查 gameArea 看是否有可消除的行 并计算得分
#include graphics.h
#include stdio.h
#include dos.h
#include conio.h
#include time.h
#include math.h
#include stdlib.h
void draw_block(int x,int y,int style,int way);
void kill_line(int y);
void draw_little_block(int x,int y,int z,int style);
int check_block(int x,int y,int style);
int change(int *i,int *j,int key);
int style1,style,score,speed,l;
int board[10][20];
char str[100];
struct shape
{
int xy[8],next;
};
struct shape shapes[19]= /* 19种方块(前
8个点表示4个小方块的相对位置 第9点表示类型) */
{
{
0,-2, 0,-1, 0, 0, 1, 0, 1
},
{-1, 0, 0, 0, 1,-1, 1, 0, 2},
{ 0,-2, 1,-2, 1,-1, 1, 0, 3},
{-1,-1,-1, 0, 0,-1, 1,-1, 0},
{ 0,-2, 0,-1, 0, 0, 1,-2, 5},
{-1,-1, 0,-1, 1,-1, 1, 0, 6},
{ 0, 0, 1,-2, 1,-1, 1, 0, 7},
{-1,-1,-1, 0, 0, 0, 1, 0, 4},
{-1, 0, 0,-1, 0, 0, 1, 0, 9},
{ 0,-2, 0,-1, 0, 0, 1,-1,10},
{-1,-1, 0,-1, 1,-1, 0, 0,11},
{ 0,-1, 1,-2, 1,-1, 1, 0, 8},
{-1, 0, 0,-1, 0, 0, 1,-1,13},
{ 0,-2, 0,-1, 1,-1, 1, 0,12},
{-1,-1, 0,-1, 0, 0, 1, 0,15},
{ 0,-1, 0, 0, 1,-2, 1,-1,14},
{ 0,-3, 0,-2, 0,-1, 0, 0,17},
{-1, 0, 0, 0, 1, 0, 2, 0,16},
{ 0,-1, 0, 0, 1,-1, 1, 0,18}
};
#define MAPXOFT 9 /* 第1个方块的位置 */
#define MAPYOFT 5
#define MAPXOFT1 18 /* 下一个方块的位置 */
#define MAPYOFT1 17
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define ENTER 0x1c0d
int main()
{
int gdriver,gmode,
i,j,key,x0=5,y0=1,m,n,c,key1,p,q,le=0,b;
l=1,score=0;
gdriver=DETECT;
initgraph(gdriver,gmode,"D:\\TURBOC2");
randomize();
for(m=0;m=19;m++)
for(n=0;n=19;n++)
board[m][n]=0; /* 初始游戏版 */
setcolor(10); /* 开机的画面 */
settextstyle(0,0,3);
outtextxy(10,150,"WELCOME TO RUSSIS");
outtextxy(10,250,"READY GO");
setcolor(14);
settextstyle
(0,0,4);
outtextxy(10,350,"^_^");
/*
circle(400,350,60);
ellipse(370,340,60,120,25,25);
ellipse(430,340,60,120,25,25);
ellipse(400,350,225,315,30,30);*/
getch();
settextstyle(0,0,1);
cleardevice();
setcolor(LIGHTRED); /* 画出游戏所在的范围图
*/
setlinestyle(0,0,3);
setfillstyle(1,14);
rectangle(157,419,533,429);
floodfill(300,424,LIGHTRED);
setcolor(LIGHTRED);
setlinestyle(0,0,3);
setfillstyle(1,14);
rectangle(147,95,157,429);
floodfill(152,200,LIGHTRED);
setcolor(LIGHTRED);
setlinestyle(0,0,3);
setfillstyle(1,14);
rectangle(323,95,333,429);
floodfill(330,320,LIGHTRED);
setcolor(LIGHTRED);
setlinestyle(0,0,1);
setfillstyle(1,BLUE);
rectangle(450,50,500,70);
floodfill(455,55,LIGHTRED);
setcolor(10);
for(m=0;m=10;m=m+2)
ellipse(240,94,0,180,84+m,84+m);
setcolor(14);
setfillstyle(1,0);
circle(440,330,60);
floodfill(440,330,14);
outtextxy(420,80,"* you can change the game");
/* 对游戏的说明 */
outtextxy(440,90,"-speed and the gradth by"); /*
上为变形 左右 为 调整
下为快下 ESC为退出 */
outtextxy(440,100," using 'up'and'down'.");
outtextxy(420,110,"* when you are plying the");
outtextxy(440,120,"game,you can use these pu");
outtextxy(440,130,"-tturns.");
outtextxy(420,140,"* if you want to go into t");
outtextxy(440,150,"-he game,please 'enter'.");
outtextxy(420,160,"* you can chang shapes ");
outtextxy(440,170," using UP");
outtextxy(420,180,"* RIGHT and LEFT can" );
outtextxy(440,190," move shapes");
outtextxy(10,40,"GAMESPEED:");
outtextxy(10,100,"GRADTH:");
printf("\n\n\n 1");
printf("\n\n\n\n 0");
/* setcolor(LIGHTRED);
setlinestyle(0,0,1);
setfillstyle(1,10);
rectangle(10,65,110,85);
floodfill(15,75,LIGHTRED); */
outtextxy(450,40,"SCORES:");
outtextxy(10,190,"**The speed will");
outtextxy(10,200,"increas if score");
outtextxy(10,210,"increas 3");
for(p=0;p=100;p++) /* 对速度的调整 */
{ key=bioskey(0);
if(key==ENTER)
break;
if(key==UP)
{
if(l==9)
l=9;
if(l9)
l++;
}
if(key==DOWN)
{
if(l==1)
l=l;
if(l1)
l--;
}
gotoxy(2,4);
printf("%d",l);
}
for(q=0;q=100;q++) /* 对高度的调整 */
{
key=bioskey(0);
if(key==ENTER)
break;
if(key==UP)
{
if(le==5)
le=le;
if(le5)
le++;
}
if(key==DOWN)
{
if(le==0)
le=le;
if(le0)
le--;
}
gotoxy(2,8);
printf("%d",le);
}
key=bioskey(0);
if(key==ENTER)
{
style=random(19);
for(m=1;m=le;m++) /* 具体的对高度的调整 */
{
b=random(7)+1;
for(n=1;n=10;n++)
{
if(random(2))
{
board[n-1][20-m]=1;
draw_little_block(MAPXOFT+n,MAPYOFT+21-m,1,b);
}
}
}
while(1)
{
while(1)
{
i=x0,j=y0;
style1=random(19);
setcolor(14); /* 画出下一个方
块 */
draw_block(MAPXOFT1,MAPYOFT1,style1,1);
for(j=y0;j=20;j++)
{
while(1)
{
if(bioskey(1)) /* 方块的
调整 */
{
key=bioskey(0);
change(i,j,key);
}
if(!check_block
(i,j+1,style)) /* 判断方块能不能下降 */
break;
if(j==20)
break;
if(speed==1)
{
draw_block
(i,j,style,0); /* 方块的下降 */
j++;
draw_block
(i,j,style,1);
delay(10000);
}
if(speed!=1)
{
m++;
delay
(10000);
if(m=3*(10-l))
{
m=0;
draw_block
(i,j,style,0); /* 方块的下降 */
j++;
draw_block
(i,j,style,1);
}
}
}
speed=0;
for(m=0;m=6;m+=2) /* 对有方块的位置给予1
的数值 */
board[i+shapes[style].xy[m]-1]
[j+shapes[style].xy[m+1]-1]=1;
if(board[ i][4]==1)
{
setcolor(14);
settextstyle(0,0,2);
outtextxy(10,450,"CAREFUL -_-");
delay(100000000);
delay(100000000);
setcolor(0);
outtextxy(10,450,"CAREFUL -_-");
settextstyle(0,0,1);
setcolor(LIGHTRED);
}
/* setcolor(LIGHTRED);
setlinestyle(0,0,1);
setfillstyle(1,10);
rectangle(10,65,110,85);
floodfill(15,75,LIGHTRED);*/
if(l==1) /* 显示当前游戏等级 */
{
setcolor(LIGHTRED);
setlinestyle(0,0,1); /* 容易的速度 */
setfillstyle(1,10);
rectangle(10,65,110,85);
floodfill(15,75,LIGHTRED);
outtextxy(7,70," easy speed");
}
if(l==4)
{
setcolor(BLACK);
outtextxy(7,70," easy speed");
setcolor(LIGHTRED); /* 中等难度 */
setlinestyle(0,0,1);
setfillstyle(1,10);
rectangle(10,65,110,85);
floodfill(15,75,LIGHTRED);
outtextxy(7,70," normal speed");
}
if(l==7)
{
setcolor(BLACK);
outtextxy(7,70," normal speed");
setcolor(LIGHTRED);
setlinestyle(0,0,1); /* 困难的难度 */
setfillstyle(1,10);
rectangle(10,65,110,85);
floodfill(15,75,LIGHTRED);
outtextxy(7,70," hard speed");
}
kill_line(j);
if(j==20)
break;
if(!check_block(i,j+1,style))
break;
}
draw_block(MAPXOFT1,MAPYOFT1,style1,0);
/* 对下1个方块显示位置进行覆盖 */
style=style1; /* 使的方块和显示的方块一样
*/
if(j==1) /* 关机的画面 */
{
setcolor(14);
settextstyle(0,0,2);
outtextxy(170,200,"GAME OVER");
outtextxy(170,240,"THANK YOU");
sleep(3);
exit(0);
}
}
}
}
getch();
}
int change(int *i,int *j,int key) /* 方块的具体的变化(
移动 变形 下降) */
{
if(key==UPcheck_block(*i,*j,shapes[style].next)) /*
变形 */
{
draw_block(*i,*j,style,0);
style=shapes[style].next;
draw_block(*i,*j,style,1);
}
else if(key==LEFTcheck_block(*i-1,*j,style)) /* 移动
*/
{
draw_block(*i,*j,style,0);
(*i)--;
draw_block(*i,*j,style,1);
}
else if(key==RIGHTcheck_block(*i+1,*j,style))
{
draw_block(*i,*j,style,0);
(*i)++;
draw_block(*i,*j,style,1);
}
else if(key==DOWNcheck_block(*i,*j+1,style)) /* 下降
*/
{
draw_block(*i,*j,style,0);
(*j)++;
draw_block(*i,*j,style,1);
speed=1;
}
else if(key==ESC) /* 退出 */
exit(0);
}
void draw_block(int x,int y,int style,int way) /* 画出方块
的位置 */
{
int x1=x+MAPXOFT,y1=y+MAPYOFT;
int i;
if(way==1)
{
setcolor(WHITE);
}
else
{
setcolor(BLACK);
}
for(i=0;i=6;i+=2)
{
draw_little_block(x1+shapes[style].xy[
i],y1+shapes[style].xy[i+1],way,style);
}
}
void draw_little_block(int x,int y,int z,int style) /* 画
出方块的每一个小方块的形状(方块的色彩) */
{ int m,n;
if(z==1) /* 对色彩的调整 */
{
if(0=stylestyle=3)
n=2;
if(4=stylestyle=7)
n=3;
if(8=stylestyle=11)
n=4;
if(12=stylestyle=13)
n=5;
if(14=stylestyle=15)
n=6;
if(16=stylestyle=17)
n=7;
if(style==18)
n=8;
m=1;
}
if(z==0)
{
m=0,n=0;
}
setcolor(m);
setfillstyle(1,n);
rectangle(x*16,y*16,x*16+16,y*16+16);
floodfill(x*16+2,y*16+2,m);
}
void kill_line(int y) /* 消行 */
{
int i,t=1,j,k,color=random(7)+1;
for(;y=1t=4;y--,t++) /* 对4行进行验证 */
{
for(i=1;i=10;i++)
if(!board[i-1][y-1]) /* 严整1行的数组是不是全
为1 */
break;
if(i==11)
{
setcolor(LIGHTRED); /* 对积分底色的画法
*/
setlinestyle(0,0,1);
setfillstyle(1,BLUE);
rectangle(450,50,500,70);
floodfill(455,55,LIGHTRED);
score++; /* 每消去1行 可以得1分 */
setcolor(14);
itoa(score,str,10);
outtextxy(460,55,str);
if(score!=0score%3==0)
l++; /* 每次分到一定位置是 速度进
行提高(目前是3行加1次 可以调整) */
setcolor(14); /* 每次消去是进行庆祝模式 */
settextstyle(0,0,4);
outtextxy(10,310,"COOL");
outtextxy(10,270,"^_^");
delay(100000000);
delay(100000000);
delay(100000000);
setcolor(BLACK);
settextstyle(0,0,4);
outtextxy(10,310,"COOL");
outtextxy(10,270,"^_^");
settextstyle(0,0,1);
if(score%3==0score!=0)
{
setcolor(14);
settextstyle(0,0,2);
outtextxy(10,435,"CONGRATULATION ON YOU ^_^");
sleep(2);
setcolor(BLACK);
settextstyle(0,0,2);
outtextxy(10,435,"CONGRATULATION ON YOU ^_^ ");
settextstyle(0,0,1);
}
for(k=1;k=10;k++) /* 对满了行进行消去
*/
{
setcolor(BLACK);
draw_little_block
(k+MAPXOFT,y+MAPYOFT,0,2);
}
for(j=y-1;j=1;j--) /* 消去1行后 用上面的
累下来(并且调整色彩) */
for(k=1;k=10;k++)
{
board[k-1][j]=board[k-1][j-1];
if(board[k-1][j])
{
setcolor(BLACK);
draw_little_block
(k+MAPXOFT,j+MAPYOFT,0,2);
setcolor(WHITE);
draw_little_block
(k+MAPXOFT,j+1+MAPYOFT,1,color);
}
}
delay(100000000000);
y++;
}
}
}
int check_block(int x,int y,int style) /* 验证能不能往下1
个位置累方块 */
{
int x1=x+MAPXOFT,y1=y+MAPYOFT;
int x2,y2,i;
for(i=0;i=6;i+=2)
{
x2=x1+shapes[style].xy[ i];
y2=y1+shapes[style].xy[i+1];
if(x2=10x220y226(y26||board[x2-10][y2-
6]==0))
continue;
else
break;
}
if(i==8)
return 1;
else
return 0;
getch();
}
我这里也是别人那里看来的。希望对你有用