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 + -
显示快捷键?