statechange.c

来自「计算机的一个程序作业」· C语言 代码 · 共 148 行

C
148
字号
//状态转换函数
#define q0 0
#define q1 1
#define q2 2
#define q3 3 
extern int STATE;
extern int LOCATION;
extern int HEADING;
extern int TIME;
extern int CALL;
extern int floorcall[9];
extern int upcall[8];
extern int downcall[8];
extern int destination[100];
extern int CALLSOURSE;
extern int P;
extern int des[100][2];
int dtime=0,waittime=0;
void statechange(void)
{
     int a;
     switch (STATE)
     {
        case '0':STATE='1';
                 HEADING=0;
                 break;
        case '1':if(CALL==0&&destination[0]==0&&des[0][0]==0)
                   {
                      STATE='1';
                      HEADING=0;
                      if(LOCATION==1)
                      {  
                         
                          STATE='1';
                          HEADING=0;
                          }
                      else
                         {
                               waittime++;
                            if(waittime==50)
                              { 
                                 waittime=0;
                                 STATE='2';
                                 if(P==1)
                                   destination[0]=1;
                                 else if(P==2)
                                       {
                                        des[0][0]=1;
                                        des[0][1]=2;
                                       }
                                 HEADING=2;
                              }
                         }
                   }
                  else{
                       waittime=0;
                       if(LOCATION==destination[0]||LOCATION==des[0][0])
                            STATE='3';
                       else
                         {
                            STATE='2';
                            if(P==1)
                                if(LOCATION>destination[0])
                                  HEADING=2;
                                else
                                  HEADING=1;
                             else if(P==2)
                               if(LOCATION>des[0][0])
                                  HEADING=2;
                               else
                                  HEADING=1;
                         } 
                      }
                  break;
        case '2':
                   
                      waittime++;
                      
                      HEADING=HEADING;
                      STATE='2';
                 if(waittime==50)
                  {
                   waittime=0;
                   if(HEADING==1)
                     LOCATION++;
                   else 
                     LOCATION--;
                 if(P==1&&LOCATION==destination[0])
                   {
                     STATE='3';
                    
                      for(a=0;destination[a]!=0;a++)
                        destination[a]=destination[a+1];
                     
                           
                    }
                   else if(P==2&&LOCATION==des[0][0])
                   {
                     STATE='3';
                     for(a=0;des[a][0]!=0;a++)
                      {
                          des[a][0]=des[a+1][0];
                          des[a][1]=des[a][1];
                      }
                              
                     }
                 else
                    STATE='2';}
                 break;
        case '3':
                   waittime++;
                   HEADING=HEADING;
                   STATE='3';
                   if(waittime==50)
                    {
                      waittime=0;
                      if(destination[0]==LOCATION||des[0][0]==LOCATION)
                      {
                      STATE='3';
                      if(P==1)
                        for(a=0;destination[a]!=0;a++)
                         destination[a]=destination[a+1];
                      else if(P==2)
                            for(a=0;des[a][0]!=0;a++)
                              {
                               des[a][0]=des[a+1][0];
                               des[a][1]=des[a][1];
                              }
                      }
                      else if(destination[0]!=0&&des[0][0]!=0) 
                        {  
                         STATE='2';
                         if(destination[0]>LOCATION||des[0][0]>LOCATION)
                           HEADING=1;
                         else
                           HEADING=2;
                        }
                      else
                         STATE='1';}
                 break;
     }
      sleep(100);
      dtime++;
      if(dtime%10==9) 
        TIME++;
}
     

⌨️ 快捷键说明

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