⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 block.c

📁 这是老早前学生时代用TurboC++3.0写的dos程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -