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

📄 d.c

📁 硬件试验的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
      else if(block[type][x-1][y+1]==1)
   { block[type][x+1][y]=block[type][x-1][y-1]=block[type][x-1][y]=1;
     block[type][x][y-1]=block[type][x][y+1]=block[type][x-1][y+1]=0;
     color[type][x+1][y]=color[type][x-1][y-1]=color[type][x-1][y]=color[type][x][y];
     color[type][x][y-1]=color[type][x][y+1]=color[type][x-1][y+1]=BLACK;
   }
      else if(block[type][x-1][y-1]==1)
   { block[type][x][y-1]=block[type][x][y+1]=block[type][x+1][y-1]=1;
     block[type][x+1][y]=block[type][x-1][y-1]=block[type][x-1][y]=0;
     color[type][x][y-1]=color[type][x][y+1]=color[type][x+1][y-1]=color[type][x][y];
     color[type][x+1][y]=color[type][x-1][y-1]=color[type][x-1][y]=BLACK;
   }
      break;
 case 4 :    if(block[type][x+1][y+1]==1)
   { block[type][x+1][y]=block[type][x-1][y+1]=block[type][x-1][y]=1;
     block[type][x][y-1]=block[type][x][y+1]=block[type][x+1][y+1]=0;
     color[type][x+1][y]=color[type][x-1][y+1]=color[type][x-1][y]=color[type][x][y];
     color[type][x][y-1]=color[type][x][y+1]=color[type][x+1][y+1]=BLACK;
   }
      else if(block[type][x-1][y+1]==1)
   { block[type][x][y-1]=block[type][x][y+1]=block[type][x-1][y-1]=1;
     block[type][x+1][y]=block[type][x-1][y+1]=block[type][x-1][y]=0;
     color[type][x][y-1]=color[type][x][y+1]=color[type][x-1][y-1]=color[type][x][y];
     color[type][x+1][y]=color[type][x-1][y+1]=color[type][x-1][y]=BLACK;
   }
      else if(block[type][x-1][y-1]==1)
   { block[type][x+1][y]=block[type][x+1][y-1]=block[type][x-1][y]=1;
     block[type][x][y-1]=block[type][x][y+1]=block[type][x-1][y-1]=0;
     color[type][x+1][y]=color[type][x+1][y-1]=color[type][x-1][y]=color[type][x][y];
     color[type][x][y-1]=color[type][x][y+1]=color[type][x-1][y-1]=BLACK;
   }
      else if(block[type][x+1][y-1]==1)
   { block[type][x][y-1]=block[type][x][y+1]=block[type][x+1][y+1]=1;
     block[type][x+1][y]=block[type][x+1][y-1]=block[type][x-1][y]=0;
     color[type][x][y-1]=color[type][x][y+1]=color[type][x+1][y+1]=color[type][x][y];
     color[type][x+1][y]=color[type][x+1][y-1]=color[type][x-1][y]=BLACK;
   }
      break;
 case 5 :    break;
 case 6 :    if(y==0||y==WIDTH-1) return;
      if(block[type][x][y-1]!=1)
         { block[type][x][y-1]=1;
    block[type][x+1][y]=0;
    color[type][x][y-1]=color[type][x+1][y];
    color[type][x+1][y]=BLACK;
         }
      else if(block[type][x-1][y]!=1)
         { block[type][x-1][y]=1;
    block[type][x][y-1]=0;
    color[type][x-1][y]=color[type][x][y-1];
    color[type][x][y-1]=BLACK;
         }
      else if(block[type][x][y+1]!=1)
         { block[type][x][y+1]=1;
    block[type][x-1][y]=0;
    color[type][x][y+1]=color[type][x-1][y];
    color[type][x-1][y]=BLACK;
         }
      else if(block[type][x+1][y]!=1)
         { block[type][x+1][y]=1;
    block[type][x][y+1]=0;
    color[type][x+1][y]=color[type][x][y+1];
    color[type][x][y+1]=BLACK;
         }
      break;
     }
}


void end( void)
{
exit(0);
}

void dokey(int key,int type)
{  int *x,*y,*n1;
   x=&now_x[type];
   y=&now_y[type];
   n1=&n[type];
   paint(2,type);
   switch(key)
      {  case ESC  : exit(0);break;
  case LEFT : if(judge(LEFT,type))  { move(LEFT,type);(*y)--; }
       break;
  case RIGHT: if(judge(RIGHT,type))  { move(RIGHT,type);(*y)++;}
       break;
  case UP   : if(judge(*n1,type))  move(*n1,type);
       break;
  case DOWN : if(judge(DOWN,type))  move(DOWN,type);
       break;
      }
   paint(0,type);
}


int downblock(int type)
{  int i,j,state=1;     /* state=1 can move down, =2 can't move down */
   int p;               /* p record the position of block */
   char temp[9];        /* store score and level */
   int nline[2]={0,0};
   static int total_line[2]={0,0},level_line[2]={0,0};
   static long score[2]={0,0};
   static int level[2]={1,1};
   static int level2[2]={0,0};  /* used for level >9 */
   for(i=LENGTH-1;i>=0;i--)    /* judge whether can move down */
  for(j=0;j<WIDTH;j++)
       if(block[type][i][j]==1&&(i==LENGTH-1||block[type][i+1][j]==2))
     state=0;
   if(state==1)     /*  able to move down */
       { paint(2,type);
  for(i=LENGTH-1;i>=0;i--)
      for(j=WIDTH-1;j>=0;j--)
   if(block[type][i][j]==1)
       {  block[type][i+1][j]=1;
   block[type][i][j]=0;
   color[type][i+1][j]=color[type][i][j];
   color[type][i][j]=BLACK;
       }
  now_x[type]++;
  paint(0,type);
       }
   else         /*  unable to move down */
 { for(i=0;i<LENGTH;i++)
     { int count=0;
       for(j=0;j<WIDTH;j++)
   { if(block[type][i][j]==1)
        { block[type][i][j]=2;p=i; }
     if(block[type][i][j]!=0) count++;
   }
       if(count==10)         /* clear a line */
   { nline[type]++;
     level_line[type]++;
     total_line[type]++;
     for(j=0;j<WIDTH;j++)
         { block[type][i][j]=BLACK;
    color[type][i][j]=0;
         }
    }
      }
   paint(1,type);
   delay(500);
   score[type]+=5*(LENGTH-p)*level[type];
   if(nline[type]!=0)
     { int k,count;
       for(i=LENGTH-1;i>=0;i--)       /* down all block */
   { count=0;
     for(j=0;j<WIDTH;j++)
         if(block[type][i][j]==0) count++;
     if(count==10)
   for(k=i-1;k>=0;k--)
     { count=0;
       for(j=0;j<WIDTH;j++)
          if(block[type][k][j]!=0) count++;
       if(count!=0)
    { for(j=0;j<WIDTH;j++)
        { block[type][i][j]=block[type][k][j];
          block[type][k][j]=0;
          color[type][i][j]=color[type][k][j];
          color[type][k][j]=BLACK;
        }
       break;
    }
     }
   }
       score[type]+=100*pow(2,nline[type]-1);
       nline[type]=0;
       sprintf(temp,"%d",total_line[type]);
       setviewport(40+300*type,270,60+300*type,280,0);
       clearviewport();
       settextjustify(RIGHT_TEXT,BOTTOM_TEXT);
       outtextxy(20,10,temp);
     }
   if(level_line[type]>=30)
     {  if(level[type]<9)
    level[type]++;
        else level2[type]++;
        level_line[type]=0;
        sprintf(temp,"%d",level[type]+level2[type]);
        setviewport(40+300*type,150,60+300*type,160,0);
        clearviewport();
        settextjustify(RIGHT_TEXT,BOTTOM_TEXT);
        outtextxy(20,10,temp);
     }
   ltoa(score[type],temp,10);
   setviewport(20+300*type,210,60+300*type,220,0);
   clearviewport();
   settextjustify(RIGHT_TEXT,BOTTOM_TEXT);
   outtextxy(40,10,temp);
   paint(1,type);
   n[type]=*order[type]++;
   if(!newblock(n[type],type))
  { if(type==USER) end();
    else  auto_state=DEATH;
  }
 }
   return level[type];
}

void ai(int n)
{  int px=now_x[AUTO],py=now_y[AUTO]; /* used for ai final position */
   int priority=0; /* the priority of position */
   int cir=0; /* record up times */
   int i,j,p,q,k,t;
   switch (n)
    {  case 0 : for(j=1;j<=7;j++)
      for(i=0;i<18;i++)
    { if(block[AUTO][i][j-1]||block[AUTO][i][j]||block[AUTO][i][j+1]||block[AUTO][i][j+2])
    break;
      if(block[AUTO][i+1][j]||block[AUTO][i+1][j-1]||block[AUTO][i+1][j+1]||block[AUTO][i+1][j+2])
    { block[AUTO][i][j]=block[AUTO][i][j-1]=block[AUTO][i][j+1]=block[AUTO][i][j+2]=3;
     if(block[AUTO][i+1][j-1]&&block[AUTO][i+1][j]&&block[AUTO][i+1][j+1]&&block[AUTO][i+1][j+2]||cal_nline()==1)
      cal_pri(i,j,&priority,&px,&py,&cir,0);
      clear();
      break;
    }
    }
  for(j=0;j<10;j++)
      for(i=1;i<16;i++)
   { if(block[AUTO][i+2][j]||block[AUTO][i+1][j]||block[AUTO][i][j]||block[AUTO][i-1][j])
    break;
                          if(block[AUTO][i+3][j])
        { block[AUTO][i+1][j]=block[AUTO][i][j]=block[AUTO][i-1][j]=block[AUTO][i+2][j]=3;
          cal_pri(i,j,&priority,&px,&py,&cir,1);
          clear();
          break;
        }
   }
  write_path(px,py,cir);
  break;
 case 1: for(j=0;j<=8;j++)
      for(i=1;i<17;i++)
   { if(block[AUTO][i+1][j+1]||block[AUTO][i][j+1]||block[AUTO][i][j]||block[AUTO][i-1][j])
    break;
     if(block[AUTO][i+1][j]!=0)
    { block[AUTO][i-1][j]=block[AUTO][i][j]=block[AUTO][i][j+1]=block[AUTO][i+1][j+1]=3;
      if(block[AUTO][i+2][j+1]||cal_nline()==2)
          cal_pri(i,j,&priority,&px,&py,&cir,0);
      clear();
      break;
    }
   }
  for(j=1;j<=8;j++)
      for(i=1;i<18;i++)
   { if(block[AUTO][i][j-1]||block[AUTO][i-1][j+1]||block[AUTO][i][j]||block[AUTO][i-1][j])
    break;
     if(block[AUTO][i+1][j]!=0)
    { block[AUTO][i-1][j]=block[AUTO][i-1][j+1]=block[AUTO][i][j-1]=block[AUTO][i][j]=3;
      if(block[AUTO][i+1][j-1]&&block[AUTO][i][j+1]||block[AUTO][i][j+1]&&cal_nline()==1)
         cal_pri(i,j,&priority,&px,&py,&cir,1);
      clear();
      break;
    }
   }
  write_path(px,py,cir);
  break;
 case 2: for(j=1;j<=9;j++)
      for(i=1;i<17;i++)
   { if(block[AUTO][i+1][j-1]||block[AUTO][i][j-1]||block[AUTO][i][j]||block[AUTO][i-1][j])
    break;
     if(block[AUTO][i+1][j]!=0)
    { block[AUTO][i-1][j]=block[AUTO][i][j]=block[AUTO][i][j-1]=block[AUTO][i+1][j-1]=3;
      if(block[AUTO][i+2][j-1]||cal_nline()==2)
          cal_pri(i,j,&priority,&px,&py,&cir,0);
      clear();
      break;
    }
   }
  for(j=1;j<=8;j++)
      for(i=1;i<18;i++)
   { if(block[AUTO][i][j+1]||block[AUTO][i-1][j-1]||block[AUTO][i][j]||block[AUTO][i-1][j])
    break;
     if(block[AUTO][i+1][j]!=0)
    { block[AUTO][i-1][j-1]=block[AUTO][i-1][j]=block[AUTO][i][j]=block[AUTO][i][j+1]=3;
      if(block[AUTO][i][j-1]&&block[AUTO][i+1][j+1]||block[AUTO][i][j-1]&&cal_nline()==1)
           cal_pri(i,j,&priority,&px,&py,&cir,1);
      clear();
      break;
    }
   }
                write_path(px,py,cir);
  break;
 case 3: for(j=1;j<=8;j++)
      for(i=0;i<17;i++)
   { if(block[AUTO][i+1][j-1]||block[AUTO][i][j+1]||block[AUTO][i][j-1]||block[AUTO][i][j])
    break;
     if(block[AUTO][i+1][j]||block[AUTO][i+1][j+1])
    { block[AUTO][i][j-1]=block[AUTO][i][j]=block[AUTO][i][j+1]=block[AUTO][i+1][j-1]=3;
      if(block[AUTO][i+2][j-1]&&block[AUTO][i+1][j+1]&&block[AUTO][i+1][j]||cal_nline()==2||cal_nline()==1&&block[AUTO][i+2][j-1])
      cal_pri(i,j,&priority,&px,&py,&cir,0);
      clear();
      break;
    }
   }
  for(j=0;j<=8;j++)
      for(i=1;i<17;i++)
   { if(block[AUTO][i+1][j]||block[AUTO][i+1][j+1]||block[AUTO][i][j]||block[AUTO][i-1][j])
    break;
     if(block[AUTO][i+2][j]!=0)
    { block[AUTO][i-1][j]=block[AUTO][i][j]=block[AUTO][i+1][j]=block[AUTO][i+1][j+1]=3;
      if(block[AUTO][i+2][j+1]||cal_nline()==1)
      cal_pri(i,j,&priority,&px,&py,&cir,1);
      clear();
      break;
    }
   }
  for(j=1;j<=8;j++)
      for(i=1;i<18;i++)
   { if(block[AUTO][i][j-1]||block[AUTO][i][j+1]||block[AUTO][i][j]||block[AUTO][i-1][j+1])
    break;
     if(block[AUTO][i+1][j+1]!=0)
    { block[AUTO][i][j-1]=block[AUTO][i][j]=block[AUTO][i][j+1]=block[AUTO][i-1][j+1]=3;
      if(block[AUTO][i+1][j-1]&&block[AUTO][i+1][j]||cal_nline()==1)
          cal_pri(i,j,&priority,&px,&py,&cir,2);
      clear();
      break;
    }
   }
  for(j=1;j<=9;j++)
      for(i=1;i<17;i++)
   { if(block[AUTO][i-1][j-1]||block[AUTO][i-1][j]||block[AUTO][i][j]||block[AUTO][i+1][j])
    break;
     if(block[AUTO][i+2][j]||block[AUTO][i][j-1])
    { block[AUTO][i-1][j-1]=block[AUTO][i-1][j]=block[AUTO][i][j]=block[AUTO][i+1][j]=3;
      if(block[AUTO][i][j-1]&&block[AUTO][i+1][j-1]&&block[AUTO][i+2][j]||cal_nline()==3||cal_nline()==2&&block[AUTO][i+2][j])
          cal_pri(i,j,&priority,&px,&py,&cir,3);
      clear();
      break;
    }
   }
                write_path(px,py,cir);
  break;
 case 4: for(j=1;j<=8;j++)
      for(i=0;i<17;i++)
   { if(block[AUTO][i+1][j+1]||block[AUTO][i][j-1]||block[AUTO][i][j]||block[AUTO][i][j+1])
    break;
     if(block[AUTO][i+1][j]||block[AUTO][i+1][j-1])
    { block[AUTO][i][j-1]=block[AUTO][i][j]=block[AUTO][i][j+1]=block[AUTO][i+1][j+1]=3;
      if(block[AUTO][i+2][j+1]&&block[AUTO][i+1][j]&&block[AUTO][i+1][j-1]||cal_nline()==2)
          cal_pri(i,j,&priority,&px,&py,&cir,0);
      clear();
      break;
    }
   }
  for(j=0;j<=8;j++)
      for(i=1;i<17;i++)
   { if(block[AUTO][i+1][j]||block[AUTO][i-1][j+1]||block[AUTO][i][j]||block[AUTO][i-1][j])
    break;
     if(block[AUTO][i+2][j]||block[AUTO][i][j+1])
    { block[AUTO][i-1][j]=block[AUTO][i][j]=block[AUTO][i+1][j]=block[AUTO][i-1][j+1]=3;
      if(block[AUTO][i+1][j+1]&&block[AUTO][i][j+1]&&block[AUTO][i+2][j]||cal_nline()==3||cal_nline()==2&&block[AUTO][i+2][j])
         cal_pri(i,j,&priority,&px,&py,&cir,1);
      clear();
      break;
    }
   }
  for(j=1;j<=8;j++)
      for(i=1;i<18;i++)
   { if(block[AUTO][i][j-1]||block[AUTO][i][j+1]||block[AUTO][i][j]||block[AUTO][i-1][j-1])
    break;
     if(block[AUTO][i+1][j]||block[AUTO][i+1][j-1]||block[AUTO][i+1][j+1])
    { block[AUTO][i][j-1]=block[AUTO][i][j]=block[AUTO][i][j+1]=block[AUTO][i-1][j-1]=3;
      if(block[AUTO][i+1][j-1]&&block[AUTO][i+1][j+1]&&block[AUTO][i+1][j]||cal_nline()==1&&block[AUTO][i+1][j-1])
          cal_pri(i,j,&priority,&px,&py,&cir,2);
      clear();
      break;
    }
   }
  for(j=1;j<=9;j++)
      for(i=1;i<17;i++)
   { if(block[AUTO][i+1][j-1]||block[AUTO][i+1][j]||block[AUTO][i][j]||block[AUTO][i-1][j])
    break;
     if(block[AUTO][i+2][j]!=0)
    { block[AUTO][i+1][j-1]=block[AUTO][i-1][j]=block[AUTO][i][j]=block[AUTO][i+1][j]=3;
      if(block[AUTO][i+2][j-1]||cal_nline()==1)
          cal_pri(i,j,&priority,&px,&py,&cir,3);
      clear();
      break;
    }
   }
                write_path(px,py,cir);
  break;
 case 5: for(j=0;j<=8;j++)
      for(i=0;i<17;i++)
   { if(block[AUTO][i][j]||block[AUTO][i+1][j]||block[AUTO][i][j+1]||block[AUTO][i+1][j+1])
    break;
     if(block[AUTO][i+2][j]||block[AUTO][i+2][j+1])
    { block[AUTO][i][j]=block[AUTO][i+1][j]=block[AUTO][i][j+1]=block[AUTO][i+1][j+1]=3;
      if(block[AUTO][i+2][j+1]&&block[AUTO][i+2][j]||cal_nline()==2)
          cal_pri(i,j,&priority,&px,&py,&cir,0);
      clear();
      break;
    }
   }

⌨️ 快捷键说明

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