📄 block.c
字号:
#include "block.h"
BNODE *head;
FILE *zk;
struct time t,time_mark;
static char *NORMAL[]={"Easy","Extend"};
static int setview[SETWIDTH][SETLENGTH],playview[PLAYWIDTH][PLAYLENGTH];
long SCORE=0,HISCORE;
int LEVER=0,LINE=0;
int blockaddr[60];
int EXITGAME=0,QUICKLY=0,TIMEMARK=0,DIFF=0,DISTENCEX,DISTENCEY,HIGH=0;
int COUNT,STOPMARK=0,CURRENT=0;
void startscreen(),closegame(),getcolormode(),drawblock();
void printsetview(),printplayview(),clearsetview(),clearplayview(),writebnode();
void setviewblock(),createbnode(),getbnode();
void movecental(),movestep(),moveblock(),rolateblock();
void clearline(),placetime(),printvar(),printtime(),clearchar();
void freememory(),wait();
void changevar(),setvar();
int getkey(),iskey(),getbnodexy(),isstop(),gameover(),ismove();
extern void headscreen(),setupscreen();
extern int chputs();
extern int endscreen();
int main()
{
long dalaytime=0;
headscreen();
setvar();
startscreen();
printplayview();
printvar();
randomize();
clearsetview();
getbnode();
printsetview();
writebnode(WRITEMARK);
for(;!EXITGAME ;)
{
DISTENCEX=3; DISTENCEY=0;
STOPMARK=0; COUNT=DELAY;
createbnode();
clearsetview();
getbnode();
printsetview();
writebnode(WRITEMARK);
for(;!STOPMARK&&!EXITGAME;dalaytime+=2)
{
delay(1);
if( iskey() )
{
writebnode(CLEARMARK);
movecental();
writebnode(WRITEMARK);
}
if( dalaytime > (DTIME-(LEVER+1)*130)*( 1 - QUICKLY ) )
{
dalaytime=0;
writebnode(CLEARMARK);
movestep();
writebnode(WRITEMARK);
}
placetime(&time_mark);
if( isstop() )
{
(!COUNT)?STOPMARK=1:COUNT--;
if( QUICKLY ) STOPMARK=1;
}
}
clearline(); QUICKLY=0;
if( !EXITGAME )
if( gameover() ) break;
}
closegraph();
printf("\n\tThank you playing the game,Bye-Bye!\n");
return 0;
}
/* the group function is about start screen */
/* and about game over process screen */
/* test color mode */
/* and draw a bar block */
void startscreen()
{
int gd=VGA,gm=VGAHI;
initgraph(&gd,&gm,"");
setbkcolor(BLUE);
drawblock(20,30,40,380);
drawblock(20,410,320,40);
drawblock(300,30,40,380);
drawblock(350,30,280,40);
drawblock(350,80,280,40);
drawblock(350,130,280,40);
drawblock(350,180,280,40);
drawblock(350,230,280,40);
drawblock(350,280,280,40);
setcolor(BLUE);
settextjustify(LEFT_TEXT,TOP_TEXT);
settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
outtextxy(360,42,"HISCORE: ");
outtextxy(360,92,"LEVEL: ");
outtextxy(360,142,"TIME: ");
outtextxy(360,192,"SCORE: ");
outtextxy(360,242,"LINE: ");
outtextxy(360,292,"NORMAL: ");
return;
}
void drawblock(int x,int y,int length,int width)
{
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(x,y,x+length-1,y+width-1);
setcolor(WHITE);
line(x+1,y+1,x+length-1,y+1);
line(x+1,y+1,x+1,y+width-2);
setcolor(DARKGRAY);
line(x+length-1,y+width-2,x+length-1,y+1);
line(x+1,y+width-2,x+length-1,y+width-2);
return;
}
/* the group function is about write screen operate */
/* before sure block node */
/* write screen in play view */
/* clear set view and play view */
void printsetview()
{
register i,j,l,w;
l=SETVIEW_X; w=SETVIEW_Y;
for(j=0;j<SETWIDTH;j++,w+=BLOCKWIDTH)
for(i=0,l=SETVIEW_X;i<SETLENGTH;i++,l+=BLOCKWIDTH)
{
if( setview[j][i] )
{
drawblock(l,w,BLOCKWIDTH,BLOCKWIDTH);
}
else {
setfillstyle(SOLID_FILL,BLUE);
bar(l,w,l+BLOCKWIDTH,w+BLOCKWIDTH);
}
}
return;
}
void printplayview()
{
register i,j,l,w;
l=PLAYVIEW_X; w=PLAYVIEW_Y;
for(j=0;j<PLAYWIDTH;j++,w+=BLOCKWIDTH)
for(i=0,l=PLAYVIEW_X;i<PLAYLENGTH;i++,l+=BLOCKWIDTH)
{
if( playview[j][i] )
{
drawblock(l,w,BLOCKWIDTH,BLOCKWIDTH);
}
else {
setfillstyle(SOLID_FILL,BLUE);
bar(l,w,l+BLOCKWIDTH,w+BLOCKWIDTH);
}
}
return;
}
void clearsetview()
{
register i,j;
for(j=0;j<SETWIDTH;j++)
for(i=0;i<SETLENGTH;i++)
setview[j][i]=0;
return;
}
void clearplayview()
{
register i,j;
for(j=0;j<PLAYWIDTH;j++)
for(i=0;i<PLAYLENGTH;i++)
playview[j][i]=0;
return;
}
void writebnode(int mark)
{
BNODE *p;
switch(mark)
{
case WRITEMARK: for(p=head; p ;p=p->next )
{
playview[p->y][p->x]=1;
drawblock(PLAYVIEW_X+p->x*BLOCKWIDTH,
PLAYVIEW_Y+p->y*BLOCKWIDTH,
BLOCKWIDTH,BLOCKWIDTH);
}
return;
case CLEARMARK: for(p=head; p ;p=p->next )
{
playview[p->y][p->x]=0;
setfillstyle(SOLID_FILL,BLUE);
bar(PLAYVIEW_X+p->x*BLOCKWIDTH,
PLAYVIEW_Y+p->y*BLOCKWIDTH,
PLAYVIEW_X+(p->x+1)*BLOCKWIDTH-1,
PLAYVIEW_Y+(p->y+1)*BLOCKWIDTH-1);
}
return;
}
return;
}
/* the group function is about create bit map */
/* these functions are to memory */
/* the difference block is not display on screen */
/* it is use for CPU */
void setviewblock(int mark,int rolate)
{
register i,j;
switch(mark)
{
case 0: switch(rolate)
{
case 0:
case 2: setview[0][1]=1; setview[1][1]=1;
setview[2][1]=1; setview[3][1]=1;
break;
case 1:
case 3: setview[1][0]=1; setview[1][1]=1;
setview[1][2]=1; setview[1][3]=1; break;
default: break;
}
break;
case 1: switch(rolate)
{
case 0:
case 2: setview[2][0]=1; setview[1][0]=1;
setview[1][1]=1; setview[0][1]=1; break;
case 1:
case 3: setview[0][0]=1; setview[0][1]=1;
setview[1][1]=1; setview[1][2]=1; break;
default: break;
}
break;
case 2: switch(rolate)
{
case 0:
case 2: setview[0][0]=1; setview[1][0]=1;
setview[1][1]=1; setview[2][1]=1; break;
case 1:
case 3: setview[0][1]=1; setview[0][2]=1;
setview[1][1]=1; setview[1][0]=1; break;
default: break;
}
break;
case 3: switch(rolate)
{
case 0: setview[0][2]=1; setview[1][0]=1;
setview[1][1]=1; setview[1][2]=1; break;
case 1: setview[0][0]=1; setview[0][1]=1;
setview[1][1]=1; setview[2][1]=1; break;
case 2: setview[2][0]=1; setview[1][0]=1;
setview[1][1]=1; setview[1][2]=1; break;
case 3: setview[0][1]=1; setview[1][1]=1;
setview[2][1]=1; setview[2][2]=1; break;
default: break;
}
break;
case 4: switch(rolate)
{
case 0: setview[0][0]=1; setview[1][0]=1;
setview[1][1]=1; setview[1][2]=1; break;
case 1: setview[0][1]=1; setview[1][1]=1;
setview[2][1]=1; setview[2][0]=1; break;
case 2: setview[1][0]=1; setview[1][1]=1;
setview[1][2]=1; setview[2][2]=1; break;
case 3: setview[0][1]=1; setview[0][2]=1;
setview[1][1]=1; setview[2][1]=1; break;
default: break;
}
break;
case 5: switch(rolate)
{
case 0:
case 1:
case 2:
case 3: setview[0][0]=1; setview[0][1]=1;
setview[1][0]=1; setview[1][1]=1; break;
default: break;
}
break;
case 6: switch(rolate)
{
case 0: setview[0][1]=1; setview[1][1]=1;
setview[1][2]=1; setview[2][1]=1; break;
case 1: setview[0][1]=1; setview[1][0]=1;
setview[1][1]=1; setview[1][2]=1; break;
case 2: setview[0][1]=1; setview[1][1]=1;
setview[1][0]=1; setview[2][1]=1; break;
case 3: setview[1][0]=1; setview[1][1]=1;
setview[1][2]=1; setview[0][1]=1; break;
default: break;
}
break;
case 7: switch(rolate)
{
case 0:
case 1:
case 2:
case 3: setview[0][1]=1;
setview[1][0]=1; setview[1][1]=1;
setview[2][1]=1; setview[1][2]=1; break;
default: break;
}
break;
case 8: switch(rolate)
{
case 0:
case 1:
case 2:
case 3: setview[1][1]=1; break;
default: break;
}
break;
case 9: switch(rolate)
{
case 0: setview[0][1]=1; setview[1][1]=1;
setview[1][0]=1; break;
case 1: setview[2][1]=1; setview[1][1]=1;
setview[1][0]=1; break;
case 2: setview[2][1]=1; setview[1][1]=1;
setview[1][2]=1; break;
case 3: setview[0][1]=1; setview[1][1]=1;
setview[1][2]=1; break;
default: break;
}
break;
case 10: switch(rolate)
{
case 0: setview[0][0]=1; setview[0][2]=1;
setview[1][0]=1; setview[1][1]=1;
setview[1][2]=1; break;
case 1: setview[0][0]=1; setview[2][0]=1;
setview[0][1]=1; setview[1][1]=1;
setview[2][1]=1; break;
case 2: setview[2][0]=1; setview[2][2]=1;
setview[1][0]=1; setview[1][1]=1;
setview[1][2]=1; break;
case 3: setview[0][2]=1; setview[2][2]=1;
setview[0][1]=1; setview[1][1]=1;
setview[2][1]=1; break;
default: break;
}
break;
case 11: switch(rolate)
{
case 0: setview[0][0]=1; setview[0][2]=1;
setview[0][1]=1; setview[1][1]=1;
setview[2][1]=1; break;
case 1: setview[0][0]=1; setview[1][2]=1;
setview[1][0]=1; setview[1][1]=1;
setview[2][0]=1; break;
case 2: setview[2][0]=1; setview[0][1]=1;
setview[2][1]=1; setview[1][1]=1;
setview[2][2]=1; break;
case 3: setview[0][2]=1; setview[1][0]=1;
setview[1][2]=1; setview[1][1]=1;
setview[2][2]=1; break;
default: break;
}
break;
case 12: switch(rolate)
{
case 0:
case 1: setview[1][0]=1; setview[1][1]=1;
break;
case 2:
case 3: setview[0][1]=1; setview[1][1]=1;
break;
default: break;
}
break;
case 13: switch(rolate)
{
case 0: setview[0][0]=1; setview[2][1]=1;
setview[0][1]=1; setview[1][1]=1;
setview[2][2]=1; break;
case 1: setview[0][2]=1; setview[1][2]=1;
setview[1][0]=1; setview[1][1]=1;
setview[2][0]=1; break;
case 2: setview[0][0]=1; setview[0][1]=1;
setview[2][1]=1; setview[1][1]=1;
setview[2][2]=1; break;
case 3: setview[0][2]=1; setview[1][0]=1;
setview[1][2]=1; setview[1][1]=1;
setview[2][0]=1; break;
default: break;
}
break;
case 14: switch(rolate)
{
case 0: setview[2][0]=1; setview[0][2]=1;
setview[0][1]=1; setview[1][1]=1;
setview[2][1]=1; break;
case 1: setview[0][0]=1; setview[1][2]=1;
setview[1][0]=1; setview[1][1]=1;
setview[2][2]=1; break;
case 2: setview[2][0]=1; setview[0][1]=1;
setview[2][1]=1; setview[1][1]=1;
setview[0][2]=1; break;
case 3: setview[0][0]=1; setview[1][0]=1;
setview[1][2]=1; setview[1][1]=1;
setview[2][2]=1; break;
default: break;
}
break;
default: break;
}
return;
}
void createbnode()
{
register i,j;
int bnum;
BNODE *p,*p1;
freememory();
bnum=getbnodexy();
for(i=0,j=0;i<bnum;i++,j++)
{
p=(BNODE *)malloc(sizeof(BNODE));
if( !i )
{
head=p; p1=p;
p->next=NULL;
p->x=DISTENCEX+blockaddr[j++];
p->y=blockaddr[j];
}
else {
p->next=NULL;
p->x=DISTENCEX+blockaddr[j++];
p->y=blockaddr[j];
p1->next=p;
p1=p;
}
}
return;
}
void getbnode()
{
int x,y;
x=random(7+(DIFF*TYPELENGTH)); y=random(4);
setviewblock(x,y);
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -