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

📄 tbox.cpp

📁 我写的一个俄罗斯方块
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                       bk[X->x+1][X->y]||
                       bk[X->x+2][X->y]||
                       bk[X->x][X->y+1])
                        return 1;
             
                      break;
               case 4:if(bk[X->x][X->y]||
                       bk[X->x+1][X->y+1]||
                       bk[X->x+1][X->y+2]||
		       bk[X->x+1][X->y])
                        return 1;
              
                      break;
              }
           break;
    case 4:switch(X->b)
              {case 1:if(bk[X->x+1][X->y]||
                       bk[X->x][X->y+1]||
                       bk[X->x+1][X->y+1]||
                       bk[X->x+2][X->y+1])
                        return 1;
                
                      break;
               case 2:if(bk[X->x+1][X->y]||
                       bk[X->x+1][X->y+1]||
                       bk[X->x+1][X->y+2]||
                       bk[X->x][X->y+1])
                        return 1;
             
                      break;
               case 3:if(bk[X->x][X->y]||
                       bk[X->x+1][X->y]||
                       bk[X->x+2][X->y]||
                       bk[X->x+1][X->y+1])
                        return 1;
                
                      break;
               case 4:if(bk[X->x][X->y]||
                       bk[X->x][X->y+1]||
                       bk[X->x][X->y+2]||
                       bk[X->x+1][X->y+1])
                        return 1;
             
                      break;
              }
           break;
    case 5:switch(X->b)
              {case 1:if(bk[X->x+1][X->y]||
                       bk[X->x+2][X->y]||
                       bk[X->x][X->y+1]||
                       bk[X->x+1][X->y+1])
                        return 1;
     
                      break;
               case 2:if(bk[X->x][X->y]||
                       bk[X->x][X->y+1]||
                       bk[X->x+1][X->y+1]||
                       bk[X->x+1][X->y+2])
                        return 1;
         
                      break;
              }
           break;
    case 6:switch(X->b)
              {case 1:if(bk[X->x][X->y]||
                       bk[X->x+1][X->y]||
                       bk[X->x+1][X->y+1]||
                       bk[X->x+2][X->y+1])
                        return 1;
            
		      break;
	       case 2:if(bk[X->x+1][X->y]||
		       bk[X->x+1][X->y+1]||
		       bk[X->x][X->y+1]||
		       bk[X->x][X->y+2])
			return 1;
	
		      break;
	      }
	   break;
    case 7:switch(X->b)
	      {
	       case 1:if(bk[X->x][X->y]||
		       bk[X->x+1][X->y]||
		       bk[X->x+2][X->y]||
		       bk[X->x+3][X->y])
			return 1;
		
		      break;
               case 2:if(bk[X->x][X->y]||
		       bk[X->x][X->y+1]||
		       bk[X->x][X->y+2]||
		       bk[X->x][X->y+3])
			return 1;
		
		      break;

	      }
	   break;
   }
 return 0;
}
void tbk(int x,int bk[16][25])
{int i,j;
 for(i=x;i>0;i--)
   for(j=0;j<15;j++)
     bk[j][i]=bk[j][i-1];
 for(i=0;i<24;i++)
   for(j=0;j<15;j++)
      {setfillstyle(9,bk[j][i]);
       bar(100+j*20,i*20,117+j*20,17+i*20);
      }
}






void main()
{randomize();
 int bk[16][25],i,j,k,u=0;int test,scp;int speed=500;
 struct time ttime;int tm1,tm2;
 for(i=0;i<24;i++)
   for(j=0;j<15;j++)
     bk[j][i]=0;
 for(i=0;i<25;i++)
   bk[15][i]=1;
 for(i=0;i<16;i++)
   bk[i][24]=1;
 T tb[2],tbt;
 tinit(tb);tinit(tb+1);
 unsigned scancode;
 union REGS regs;
 long score=0l,hscore;
 char sc[]="score",scr[20],hsc[]="highest score",hscr[20];
 FILE *fp;
 if(fp=fopen("tbox.dat","rb+"))
  {fscanf(fp,"%ld",&hscore);rewind(fp);}
 else{fp=fopen("tbox.dat","wb");hscore=0l;fprintf(fp,"%ld",hscore);rewind(fp);}
 int driver=VGA;
 int mode=VGAHI;
 initgraph(&driver,&mode,"");
 cleardevice();
 settextstyle(0, HORIZ_DIR,2);
 setfillstyle(9,9);
 bar(90,0,99,480);
 bar(400,0,409,480);
 bar(400,240,640,244);
 bar(400,360,640,364);
 sprintf(scr," %ld",score);
 sprintf(hscr," %ld",hscore);
 outtextxy(470,260,sc);
 outtextxy(470,300,scr);
 outtextxy(420,380,hsc);
 outtextxy(470,420,hscr);
 tb[u].x=7;tb[u].y=0;tbt=tb[u];
 tdisplay(tb,1);tdisplay(tb+1,1);

 gettime(&ttime);
  if(ttime.ti_sec>30)tm1=ttime.ti_hund+(ttime.ti_sec-60)*1000;
  else tm1=ttime.ti_hund+(ttime.ti_sec-60)*1000;
for(;;)
{
  gettime(&ttime);
  if(ttime.ti_sec>30)tm2=ttime.ti_hund+(ttime.ti_sec-60)*1000;
  else tm2=ttime.ti_hund+(ttime.ti_sec-60)*1000;

 for(;tm2-tm1<speed;)
   {regs.h.ah=1;
    int86(0x16,&regs,&regs);
    if((regs.x.flags&0x40)==0) break;

    gettime(&ttime);
    if(ttime.ti_sec>30)tm2=ttime.ti_hund+(ttime.ti_sec-60)*1000;
    else tm2=ttime.ti_hund+(ttime.ti_sec-60)*1000;
   }
  if(tm2-tm1<speed)
   {regs.h.ah=0;
    int86(0x16,&regs,&regs);
    scancode=regs.h.ah;
    switch(scancode)
       {case 0x01:goto END;
	case 0x19:tpouse();break;
	case 0x48:trote(&tbt);
		  if(tland(&tbt,bk)!=0)tbt=tb[u];
		  else{tdisplay(&tb[u],0);
		       tb[u]=tbt;
		       tdisplay(&tb[u],1);
		      }
		  break;
	case 0x50:tbt.y++;
		  if(tland(&tbt,bk)==0)
		     {tdisplay(&tb[u],0);
		      tb[u].y++;
		      tdisplay(&tb[u],1);

		      gettime(&ttime);
		      if(ttime.ti_sec>30)tm1=ttime.ti_hund+(ttime.ti_sec-60)*1000;
		      else tm1=ttime.ti_hund+(ttime.ti_sec-60)*1000;
		     }
		  else{tsetbk(&tb[u],bk);
		       tinit(&tb[u]);
		       if(u==0){tdisplay(&tb[1],0);u=1;tdisplay(&tb[0],1);}
		       else{tdisplay(&tb[0],0);u=0;tdisplay(&tb[1],1);}
		       tb[u].y=0;tb[u].x=7;tbt=tb[u];
			scp=0;
			for(i=0;i<24;i++)
			  {test=0;
			   for(j=0;j<15;j++)
			    if(bk[j][i])test++;
			   if(test==15){tbk(i,bk);scp++;}
			  }
		       switch(scp)
			  {case 4:score+=400;
			   case 3:score+=300;
			   case 2:score+=200;
			   case 1:score+=100;
				  setfillstyle(1,0);
				  bar(470,300,640,320);
				  sprintf(scr," %ld",score);
				  outtextxy(470,300,scr);
				  if(score>hscore)
				      {hscore=score;
				       bar(470,420,640,440);
				       sprintf(hscr," %ld",hscore);
				       outtextxy(470,420,hscr);
				      }
				  speed=speed/1.1;
				  break;
			   default:break;
			  }

		       gettime(&ttime);
		       if(ttime.ti_sec>30)tm1=ttime.ti_hund+(ttime.ti_sec-60)*1000;
		       else tm1=ttime.ti_hund+(ttime.ti_sec-60)*1000;

		       if(tland(&tbt,bk)!=0)
			    {setcolor(12);

			      outtextxy(200,240,"GAME OVER!!!");
			      getchar();
			      goto END;
			    }
		      }
		  break;
	case 0x4B:tbt.x--;
		  if(tland(&tbt,bk)==0)
		     {tdisplay(&tb[u],0);
		      tb[u].x--;
		      tdisplay(&tb[u],1);
		     }
		  else tbt.x++;
		  break;
	case 0x4D:tbt.x++;
		  if(tland(&tbt,bk)==0)
		     {tdisplay(&tb[u],0);
		      tb[u].x++;
		      tdisplay(&tb[u],1);
		     }
		  else tbt.x--;
		  break;
	case 31:speed=speed*2;break;
	case 33:speed=speed/2;break;
	default:break;
       }

   }
  else
   {              tbt.y++;
		  if(tland(&tbt,bk)==0)
		     {tdisplay(&tb[u],0);
		      tb[u].y++;
		      tdisplay(&tb[u],1);

		      gettime(&ttime);
		      if(ttime.ti_sec>30)tm1=ttime.ti_hund+(ttime.ti_sec-60)*1000;
		      else tm1=ttime.ti_hund+(ttime.ti_sec-60)*1000;
		     }
		  else{tsetbk(&tb[u],bk);
		       tinit(&tb[u]);
		       if(u==0){tdisplay(&tb[1],0);u=1;tdisplay(&tb[0],1);}
		       else{tdisplay(&tb[0],0);u=0;tdisplay(&tb[1],1);}
		       tb[u].y=0;tb[u].x=7;tbt=tb[u];
			scp=0;
			for(i=0;i<24;i++)
			  {test=0;
			   for(j=0;j<15;j++)
			    if(bk[j][i])test++;
			   if(test==15){tbk(i,bk);scp++;}
			  }
		       switch(scp)
			  {case 4:score+=400;
			   case 3:score+=300;
			   case 2:score+=200;
			   case 1:score+=100;
				  setfillstyle(1,0);
				  bar(470,300,640,320);
				  sprintf(scr,"%ld",score);
				  outtextxy(470,300,scr);
				  if(score>hscore)
				      {hscore=score;
				       bar(470,420,640,440);
				       sprintf(hscr,"%ld",hscore);
				       outtextxy(470,420,hscr);
				      }
				  speed=speed/1.1;
				  break;
			   default:break;
			  }

		       gettime(&ttime);
		       if(ttime.ti_sec>30)tm1=ttime.ti_hund+(ttime.ti_sec-60)*1000;
		       else tm1=ttime.ti_hund+(ttime.ti_sec-60)*1000;

		       if(tland(&tbt,bk)!=0)
			    {
			      setcolor(12);
			      outtextxy(200,240,"GAME OVER!!!");
			      getchar();
			      goto END;
			    }
		      }
   }
}

END:
 fprintf(fp,"%ld",hscore);
 fclose(fp);
 closegraph();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -