//电梯调度函数 public void ElevChoose(int tar, StatusEnum dir) { //比较各电梯与目标楼层间的距离 int dis1 = System.Math.Abs(tar - elev1.curFloor); int dis2 = System.Math.Abs(tar - elev2.curFloor); int dis3 = System.Math.Abs(tar - elev3.curFloor); int dis4 = System.Math.Abs(tar - elev4.curFloor); int dis5 = System.Math.Abs(tar - elev5.curFloor); List <int> distance = new List <int>(); distance.Add(dis1); distance.Add(dis2); distance.Add(dis3); distance.Add(dis4); distance.Add(dis5); //如果最近的电梯处于停止状态或运行方向与按键方向一致,则优先调用最近的电梯 if (dis1 == distance.Min() && (elev1.curStatus == StatusEnum.Stop || (dir == elev1.curStatus))) { elev1.AddTarFloor(tar); } else if (dis2 == distance.Min() && (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus))) { elev2.AddTarFloor(tar); } else if (dis3 == distance.Min() && (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus))) { elev3.AddTarFloor(tar); } else if (dis4 == distance.Min() && (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus))) { elev4.AddTarFloor(tar); } else if (dis5 == distance.Min() && (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus))) { elev5.AddTarFloor(tar); } //如果最近的电梯不可用,则优先调用可用的电梯中序号最小的 else if (elev1.curStatus == StatusEnum.Stop || (dir == elev1.curStatus)) { elev1.AddTarFloor(tar); } else if (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus)) { elev2.AddTarFloor(tar); } else if (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus)) { elev3.AddTarFloor(tar); } else if (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus)) { elev4.AddTarFloor(tar); } else if (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus)) { elev5.AddTarFloor(tar); } }