邪恶八进制信息安全团队技术讨论组's Archiver

louwangzhiyu 2007-9-8 18:17

[讨论]俄罗斯方块中的问题

议题作者:louwangzhiyu
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])

checkfull函数中有一个错误,不过找不到,您帮忙找找?
[code]#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#include<stdio.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00  /*键盘控制*/
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define top 50
#define bottom 450
#define left 50    /*在屏幕中的位置*/
#define right 275
#define delaytime 65534  /*迟延时间*/
#define row 16
#define line 9      /*16行,9列*/
#define step 50      /*多次用到这个数,没有什么含义*/
#define COLOR 6      /*颜色*/
int four(int m,int n);
int oneoneoneone(int m,int n);
int twotwo(int m,int n);
int twotwol(int m,int n);
int onetwoonelz(int m,int n);
int onetwoonerz(int m,int n);
int twotwor(int m,int n);     /*十九个不同形状的方块*/
int onetwoonelt(int m,int n);
int onethreem(int m,int n);
int onetwoonert(int m,int n);
int threeoneh(int m,int n);
int oneonetwol(int m,int n);
int threeoner(int m,int n);
int twooneoner(int m,int n);
int onethreer(int m,int n);
int oneonetwor(int m,int n);
int threeonel(int m,int n);
int twooneonel(int m,int n);
int onethreel(int m,int n);
int i,j,n;
void checkfull(int n);    /*检查某一行是否已满*/
int recorder[16][9]={0};   /*记录每个小格的状态*/
int key;          /*按键*/
int highnum[9]={0};     /*每一列有的小格个数*/
int check;        
void Init(void);        /*初使化*/
void Close(void);       /*关闭*/
void PlayIt(void);       /*过程*/
void main(void)
{
  Init();
PlayIt();         /*主程序*/
  Close();
}
void Init(void)
{
  int gd=DETECT,gm;
  registerbgidriver(EGAVGA_driver);
  initgraph(&gd,&gm,"e:\\tc");    /*初使化为图形模式*/
  cleardevice();
}
void PlayIt(void)
{
  setcolor(11);
  setbkcolor(0);
  setlinestyle(0,0,3);
  rectangle(left,top,right,bottom);  /*画几个框,游戏的界面*/
  setfillstyle(SOLID_FILL,COLOR);
  srand((unsigned)time(0));
while(1)
    {
     n=rand()%19+1;        /*在没有按ESC和方块没有满的情况下
  switch(n)              随机地出现方块*/
     {
      case 1:
         four(0,0);break;
      case 2:
         oneoneoneone(0,0);break;
      case 3:
         twotwo(0,0);break;
      case 4:
         twotwol(0,0);break;
      case 5:
         onetwoonelz(0,0);break;
      case 6:
         twotwor(0,0);break;
      case 7:
         onetwoonerz(0,0);break;
      case 8:
         onetwoonelt(0,0);break;
      case 9:
         onethreem(0,0);break;
      case 10:
         onetwoonert(0,0);break;
      case 11:
         threeoneh(0,0);break;
      case 12:
         oneonetwol(0,0);break;
      case 13:
         threeoner(0,0);break;
      case 14:
         twooneoner(0,0);break;
      case 15:
         onethreer(0,0);break;
      case 16:
         oneonetwor(0,0);break;
      case 17:
         threeonel(0,0);break;
      case 18:
         twooneonel(0,0);break;
      case 19:
         onethreel(0,0);break;
     }
    if(kbhit()==ESC)
     {
      break;
     }
    }
}
void Close(void)
{  
  closegraph();
}
int four(int m,int n)
{                       /*四个小方格的方块,一直下落直到和该列的个数和为
while(1)                   17时停止.如果遇到按键,变化.停止后,所在各列小格数
  {                     加一,如果是17,游戏结束.记录四个小格的状态.以下18
  while(!kbhit())              个和这个类似.*/
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(125+m*25,50+n*25,225+m*25,75+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(125+m*25,50+n*25,225+m*25,75+n*25);
    n=n+1;
    if((n+highnum[m+4]>=16)||(n+highnum[m+5]>=16)||(n+highnum[m+6]>=16)||(n+highnum[m+3]>=16))
     {
     break;
     }
    if(highnum[m+4]>=16)
     {
     break;
     }
    }
  if((n+highnum[m+4]>=16)||(n+highnum[m+5]>=16)||(n+highnum[m+6]>=16)||(n+highnum[m+3]>=16))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(125+m*25,25+n*25,225+m*25,50+n*25);
   if(highnum[m+3]<17-n)
    highnum[m+3]=17-n;
   if(highnum[m+4]<17-n)
    highnum[m+4]=17-n;
   if(highnum[m+5]<17-n)
    highnum[m+5]=17-n;
   if(highnum[m+6]<17-n)
   highnum[m+6]=17-n;
   recorder[m+4][n]=1;
   recorder[m+3][n]=1;
   recorder[m+5][n]=1;
   recorder[m+6][n]=1;
   checkfull(n);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    oneoneoneone(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<2)&&(recorder[m+8][n]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int oneoneoneone(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(150+m*25,50+n*25,175+m*25,150+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(150+m*25,50+n*25,175+m*25,150+n*25);
    n=n+1;
    if(n+highnum[m+4]>=13)
     {
     break;
     }
    if(highnum[m+4]>=16)
     {
     break;
     }
    }
  if(n+highnum[m+4]>=13)
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(150+m*25,25+n*25,175+m*25,125+n*25);
   if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
   recorder[m+4][n]=1;
   recorder[m+4][n+1]=1;
   recorder[m+4][n+2]=1;
   recorder[m+4][n+3]=1;
    checkfull(n+3);
    checkfull(n+2);
    checkfull(n+1);
    checkfull(n);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    four(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int twotwo(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(150+m*25,50+n*25,200+m*25,100+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(150+m*25,50+n*25,200+m*25,100+n*25);
    n=n+1;
    if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=15))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=15))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(150+m*25,25+n*25,200+m*25,75+n*25);
   if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
   if(highnum[m+5]<17-n)
   highnum[m+5]=17-n;
   recorder[m+4][n]=1;
   recorder[m+5][n]=1;
   recorder[m+4][n+1]=1;
   recorder[m+5][n+1]=1;
   checkfull(n);
   checkfull(n+1);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<3)&&(recorder[m+7][n]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int twotwol(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(150+m*25,50+n*25,200+m*25,75+n*25);
    bar(125+m*25,75+n*25,175+m*25,100+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(150+m*25,50+n*25,200+m*25,75+n*25);
    bar(125+m*25,75+n*25,175+m*25,100+n*25);
    n=n+1;
    if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+5]>=16))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+5]>=16))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(150+m*25,25+n*25,200+m*25,50+n*25);
   bar(125+m*25,50+n*25,175+m*25,75+n*25);
   if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
   if(highnum[m+3]<16-n)
   highnum[m+3]=16-n;
   if(highnum[m+5]<17-n)
   highnum[m+5]=17-n;
   recorder[m+4][n]=1;
   recorder[m+5][n]=1;
   recorder[m+3][n+1]=1;
   recorder[m+4][n+1]=1;
   checkfull(n);
   checkfull(n+1);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    onetwoonelz(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+7][n]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<3)&&(recorder[m+3][n+1]==0)&&(recorder[m+6][n+1]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int onetwoonelz(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(150+m*25,50+n*25,175+m*25,100+n*25);
    bar(175+m*25,75+n*25,200+m*25,125+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(150+m*25,50+n*25,175+m*25,100+n*25);
    bar(175+m*25,75+n*25,200+m*25,125+n*25);
    n=n+1;
    if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=14))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=14))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(150+m*25,25+n*25,175+m*25,75+n*25);
   bar(175+m*25,50+n*25,200+m*25,100+n*25);
   if(highnum[m+5]<16-n)
   highnum[m+5]=16-n;
   if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
   recorder[m+4][n]=1;
   recorder[m+4][n+1]=1;
   recorder[m+5][n+1]=1;
   recorder[m+5][n+2]=1;
   checkfull(n);
   checkfull(n+1);
   checkfull(n+2);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    twotwol(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+5][n+2]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<3)&&(recorder[m+6][n]==0)&&(recorder[m+7][n+1]==0)&&(recorder[m+7][n+2]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int twotwor(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(125+m*25,50+n*25,175+m*25,75+n*25);
    bar(150+m*25,75+n*25,200+m*25,100+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(125+m*25,50+n*25,175+m*25,75+n*25);
    bar(150+m*25,75+n*25,200+m*25,100+n*25);
    n=n+1;
    if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=15)||(n+highnum[m+3]>=16))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=15)||(n+highnum[m+3]>=16))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(125+m*25,25+n*25,175+m*25,50+n*25);
   bar(150+m*25,50+n*25,200+m*25,75+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+3]<17-n)
   highnum[m+3]=17-n;
  if(highnum[m+5]<16-n)
   highnum[m+5]=16-n;
   recorder[m+4][n]=1;
   recorder[m+3][n]=1;
   recorder[m+4][n+1]=1;
   recorder[m+5][n+1]=1;
   checkfull(n);
   checkfull(n+1);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    onetwoonerz(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0)&&(recorder[m+4][n+1]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<3)&&(recorder[m+6][n]==0)&&(recorder[m+7][n+1]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int onetwoonerz(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(150+m*25,50+n*25,175+m*25,100+n*25);
    bar(125+m*25,75+n*25,150+m*25,125+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(150+m*25,50+n*25,175+m*25,100+n*25);
    bar(125+m*25,75+n*25,150+m*25,125+n*25);
    n=n+1;
    if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=14))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=14))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(150+m*25,25+n*25,175+m*25,75+n*25);
   bar(125+m*25,50+n*25,150+m*25,100+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+3]<16-n)
   highnum[m+3]=16-n;
   recorder[m+4][n]=1;
   recorder[m+3][n+1]=1;
   recorder[m+4][n+1]=1;
   recorder[m+3][n+2]=1;
   checkfull(n);
   checkfull(n+1);
   checkfull(n+2);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    twotwor(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+3][n+1]==0)&&(recorder[m+3][n+2]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+5][n+2]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int onetwoonelt(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(150+m*25,50+n*25,175+m*25,125+n*25);
    bar(175+m*25,75+n*25,200+m*25,100+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(150+m*25,50+n*25,175+m*25,125+n*25);
    bar(175+m*25,75+n*25,200+m*25,100+n*25);
    n=n+1;
    if(n+highnum[m+4]>=13)
     {
     break;
     }
    }
  if(n+highnum[m+4]>=13)
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(150+m*25,25+n*25,175+m*25,100+n*25);
   bar(175+m*25,50+n*25,200+m*25,75+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+5]<16-n)
   highnum[m+5]=16-n;
   recorder[m+4][n]=1;
   recorder[m+4][n+1]=1;
   recorder[m+5][n+1]=1;
   recorder[m+4][n+2]=1;
   checkfull(n);
   checkfull(n+1);
   checkfull(n+2);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
   {
   onethreem(m,n);
   break;
   }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+4][n+2]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<3)&&(recorder[m+6][n]==0)&&(recorder[m+7][n+1]==0)&&(recorder[m+6][n+2]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int onethreem(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(125+m*25,75+n*25,200+m*25,100+n*25);
    bar(150+m*25,50+n*25,175+m*25,75+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(125+m*25,75+n*25,200+m*25,100+n*25);
    bar(150+m*25,50+n*25,175+m*25,75+n*25);
    n=n+1;
    if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+5]>=15))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+5]>=15))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(125+m*25,50+n*25,200+m*25,75+n*25);
   bar(150+m*25,25+n*25,175+m*25,50+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+4]<16-n)
   highnum[m+3]=16-n;
  if(highnum[m+5]<16-n)
   highnum[m+5]=16-n;
   recorder[m+4][n]=1;
   recorder[m+3][n+1]=1;
   recorder[m+4][n+1]=1;
   recorder[m+5][n+1]=1;
   checkfull(n);
   checkfull(n+1);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    onetwoonert(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+3][n+1]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<3)&&(recorder[m+6][n]==0)&&(recorder[m+7][n+1]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int onetwoonert(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(150+m*25,50+n*25,175+m*25,125+n*25);
    bar(125+m*25,75+n*25,150+m*25,100+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(150+m*25,50+n*25,175+m*25,125+n*25);
    bar(125+m*25,75+n*25,150+m*25,100+n*25);
    n=n+1;
    if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=15))
     {
     break;
     }
    }
   if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=15))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(150+m*25,25+n*25,175+m*25,100+n*25);
   bar(125+m*25,50+n*25,150+m*25,75+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+3]<16-n)
   highnum[m+3]=16-n;
   recorder[m+4][n]=1;
   recorder[m+3][n+1]=1;
   recorder[m+4][n+1]=1;
   recorder[m+4][n+2]=1;
   checkfull(n);
   checkfull(n+1);
   checkfull(n+2);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
   {
   threeoneh(m,n);
   break;
   }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+3][n+1]==0)&&(recorder[m+4][n+2]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+6][n+2]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int threeoneh(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(125+m*25,50+n*25,200+m*25,75+n*25);
    bar(150+m*25,75+n*25,175+m*25,100+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(125+m*25,50+n*25,200+m*25,75+n*25);
    bar(150+m*25,75+n*25,175+m*25,100+n*25);
    n=n+1;
    if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=16)||(n+highnum[m+5]>=16))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=16)||(n+highnum[m+5]>=16))
   {
   setfillstyle(SOLID_FILL,COLOR);
    bar(125+m*25,25+n*25,200+m*25,50+n*25);
    bar(150+m*25,50+n*25,175+m*25,75+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+3]<17-n)
   highnum[m+3]=17-n;
  if(highnum[m+5]<17-n)
   highnum[m+5]=17-n;
   recorder[m+4][n]=1;
   recorder[m+3][n]=1;
   recorder[m+4][n+1]=1;
   recorder[m+5][n]=1;
   checkfull(n);
   checkfull(n+1);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    onetwoonelt(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0)&&(recorder[m+4][n+1]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<3)&&(recorder[m+7][n]==0)&&(recorder[m+6][n+1]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int oneonetwol(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(150+m*25,50+n*25,175+m*25,125+n*25);
    bar(175+m*25,100+n*25,200+m*25,125+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(150+m*25,50+n*25,175+m*25,125+n*25);
    bar(175+m*25,100+n*25,200+m*25,125+n*25);
    n=n+1;
    if((n+highnum[m+4]>=14)||(n+highnum[m+5]>=14))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=14)||(n+highnum[m+5]>=14))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(150+m*25,25+n*25,175+m*25,100+n*25);
    bar(175+m*25,75+n*25,200+m*25,100+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+5]<15-n)
   highnum[m+5]=15-n;
   recorder[m+4][n]=1;
   recorder[m+4][n+1]=1;
   recorder[m+4][n+2]=1;
   recorder[m+5][n+2]=1;
   checkfull(n);
   checkfull(n+1);
   checkfull(n+2);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
   {
   threeoner(m,n);
   break;
   }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+4][n+2]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<3)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+7][n+2]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int threeoner(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(125+m*25,50+n*25,200+m*25,75+n*25);
    bar(125+m*25,75+n*25,150+m*25,100+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(125+m*25,50+n*25,200+m*25,75+n*25);
    bar(125+m*25,75+n*25,150+m*25,100+n*25);
    n=n+1;
    if((n+highnum[m+4]>=16)||(n+highnum[m+3]>=16)||(n+highnum[m+5]>=15))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=16)||(n+highnum[m+3]>=16)||(n+highnum[m+5]>=15))
   {
   setfillstyle(SOLID_FILL,COLOR);
    bar(125+m*25,25+n*25,200+m*25,50+n*25);
    bar(125+m*25,50+n*25,150+m*25,75+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+3]<17-n)
   highnum[m+3]=17-n;
  if(highnum[m+5]<17-n)
   highnum[m+5]=17-n;
   recorder[m+4][n]=1;
   recorder[m+3][n]=1;
   recorder[m+5][n]=1;
   recorder[m+3][n+1]=1;
   checkfull(n);
   checkfull(n+1);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    twooneoner(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0)&&(recorder[m+3][n+1]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<3)&&(recorder[m+7][n]==0)&&(recorder[m+5][n+1]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int twooneoner(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(150+m*25,50+n*25,175+m*25,125+n*25);
    bar(125+m*25,50+n*25,150+m*25,75+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(150+m*25,50+n*25,175+m*25,125+n*25);
    bar(125+m*25,50+n*25,150+m*25,75+n*25);
    n=n+1;
    if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=16))
     {
     break;
     }
    }
   if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=16))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(150+m*25,25+n*25,175+m*25,100+n*25);
   bar(125+m*25,25+n*25,150+m*25,50+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+3]<17-n)
   highnum[m+3]=17-n;
   recorder[m+4][n]=1;
   recorder[m+3][n]=1;
   recorder[m+4][n+1]=1;
   recorder[m+5][n+2]=1;
   checkfull(n);
   checkfull(n+1);
   checkfull(n+2);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
   {
   onethreer(m,n);
   break;
   }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+4][n+2]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+6][n+2]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int onethreer(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(100+m*25,75+n*25,175+m*25,100+n*25);
    bar(150+m*25,50+n*25,175+m*25,75+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(100+m*25,75+n*25,175+m*25,100+n*25);
    bar(150+m*25,50+n*25,175+m*25,75+n*25);
    n=n+1;
    if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+2]>=15))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+2]>=15))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(100+m*25,50+n*25,175+m*25,75+n*25);
   bar(150+m*25,25+n*25,175+m*25,50+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+3]<16-n)
   highnum[m+3]=16-n;
  if(highnum[m+2]<16-n)
   highnum[m+2]=16-n;
   recorder[m+4][n]=1;
   recorder[m+3][n+1]=1;
   recorder[m+4][n+1]=1;
   recorder[m+2][n+1]=1;
   checkfull(n);
   checkfull(n+1);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    oneonetwol(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-2)&&(recorder[m+4][n]==0)&&(recorder[m+2][n+1]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int oneonetwor(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(150+m*25,50+n*25,175+m*25,125+n*25);
    bar(125+m*25,100+n*25,150+m*25,125+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(150+m*25,50+n*25,175+m*25,125+n*25);
    bar(125+m*25,100+n*25,150+m*25,125+n*25);
    n=n+1;
    if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=14))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=14))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(150+m*25,25+n*25,175+m*25,100+n*25);
    bar(125+m*25,75+n*25,150+m*25,100+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+3]<15-n)
   highnum[m+3]=15-n;
   recorder[m+4][n]=1;
   recorder[m+3][n+2]=1;
   recorder[m+4][n+1]=1;
   recorder[m+4][n+2]=1;
   checkfull(n);
   checkfull(n+1);
   checkfull(n+2);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
   {
   threeonel(m,n);
   break;
   }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+3][n+2]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+6][n+2]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int threeonel(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(125+m*25,50+n*25,200+m*25,75+n*25);
    bar(175+m*25,75+n*25,200+m*25,100+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(125+m*25,50+n*25,200+m*25,75+n*25);
    bar(175+m*25,75+n*25,200+m*25,100+n*25);
    n=n+1;
    if((n+highnum[m+4]>=16)||(n+highnum[m+5]>=16)||(n+highnum[m+3]>=15))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=16)||(n+highnum[m+5]>=16)||(n+highnum[m+3]>=15))
   {
   setfillstyle(SOLID_FILL,COLOR);
    bar(125+m*25,25+n*25,200+m*25,50+n*25);
    bar(175+m*25,50+n*25,200+m*25,75+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+3]<17-n)
   highnum[m+3]=17-n;
  if(highnum[m+5]<17-n)
   highnum[m+5]=17-n;
   recorder[m+4][n]=1;
   recorder[m+3][n]=1;
   recorder[m+5][n]=1;
   recorder[m+5][n+1]=1;
   checkfull(n);
   checkfull(n+1);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    twooneonel(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<3)&&(recorder[m+7][n]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int twooneonel(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(125+m*25,50+n*25,150+m*25,125+n*25);
    bar(150+m*25,50+n*25,175+m*25,75+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(125+m*25,50+n*25,150+m*25,125+n*25);
    bar(150+m*25,50+n*25,175+m*25,75+n*25);
    n=n+1;
    if((n+highnum[m+4]>=14)||(n+highnum[m+5]>=16))
     {
     break;
     }
    }
   if((n+highnum[m+4]>=14)||(n+highnum[m+5]>=16))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(125+m*25,25+n*25,150+m*25,100+n*25);
   bar(150+m*25,25+n*25,175+m*25,50+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+5]<17-n)
   highnum[m+5]=17-n;
   recorder[m+4][n]=1;
   recorder[m+5][n]=1;
   recorder[m+4][n+1]=1;
   recorder[m+4][n+2]=1;
   checkfull(n);
   checkfull(n+1);
   checkfull(n+2);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
   {
   onethreel(m,n);
   break;
   }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+4][n+2]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<4)&&(recorder[m+7][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+6][n+2]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
int onethreel(int m,int n)
{
while(1)
  {
  while(!kbhit())
    {
    setfillstyle(SOLID_FILL,COLOR);
    bar(100+m*25,75+n*25,175+m*25,100+n*25);
    bar(150+m*25,50+n*25,175+m*25,75+n*25);
    delay(delaytime);
    setfillstyle(SOLID_FILL,0);
    rectangle(left,top,right,bottom);
    bar(100+m*25,75+n*25,175+m*25,100+n*25);
    bar(150+m*25,50+n*25,175+m*25,75+n*25);
    n=n+1;
    if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+2]>=15))
     {
     break;
     }
    }
  if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+2]>=15))
   {
   setfillstyle(SOLID_FILL,COLOR);
   bar(100+m*25,50+n*25,175+m*25,75+n*25);
   bar(150+m*25,25+n*25,175+m*25,50+n*25);
  if(highnum[m+4]<17-n)
   highnum[m+4]=17-n;
  if(highnum[m+5]<16-n)
   highnum[m+5]=16-n;
  if(highnum[m+6]<16-n)
   highnum[m+6]=16-n;
   recorder[m+4][n]=1;
   recorder[m+4][n+1]=1;
   recorder[m+5][n+1]=1;
   recorder[m+6][n+1]=1;
   checkfull(n);
   checkfull(n+1);
   m=0;
   n=0;
   break;
   }
  key=bioskey(0);
  if(key==ESC)
    break;
  else if(key==UP)
    {
    oneonetwor(m,n);
    break;
    }
  else if(key==DOWN)
    n=n+1;
  else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0))
    m=m-1;
  else if((key==RIGHT)&&(m<2)&&(recorder[m+6][n]==0)&&(recorder[m+8][n+1]==0))
    m=m+1;
   else
    ;
    key=0;
  }
}
void checkfull(int n)      /*检查该行是否已满,如果,则消去该行,以上各行向下变一行*/
{
int i,j=0,k;
k=n;
for(i=0;i<9;i++)
  {
   if(recorder[i][n]==1)
    {
    j=j+1;
    }
  }
if(j==9)
  {
  for(i=0;i<9;i++)
    {
    setfillstyle(SOLID_FILL,0);
    bar(50+i*25,25+k*25,50+i*25+25,50+k*25);
    highnum[i]=highnum[i]-1;
    }
  for(k=n;k>0;k--)
    for(j=0;j<9;j++)
     {
      setfillstyle(SOLID_FILL,0);
      bar(50+j*25,25+k*25,50+j*25+25,50+k*25);
      if(recorder[j][k-1]==1)
       {
       recorder[j][k]=1;
       setfillstyle(SOLID_FILL,COLOR);
       bar(50+j*25,25+k*25,50+j*25+25,50+k*25);
       }
      else
      recorder[j][k]=0;
     }
  }
}[/code]

页: [1]
© 1999-2008 EvilOctal Security Team