// Si on se trouve au dixième étage et qu'on appuie sur le bouton "DOWN" // On demande qu'un elevateur viennent où on est (exemple 10ème etage), UP ou DOWN est juste pour optimiser public Elevator RequestElevator(int calledfloor, string direction) { // On affiche que l'ascenceur a été demandé à l'étage en question Console.WriteLine( "Elevator requested at the floor " + calledfloor + " with " + direction + " option." ); // On recherche l'elevateur qui doit répondre à la demande Elevator elevator = this.findElevator(calledfloor, direction); Console.WriteLine("Elevator selected at floor " + elevator.floor); // On rajoute l'étage appelé à la liste des étages en attente et on trie les étages en attente pour optimiser le trajet elevator.floorAwaiting(calledfloor); // L'elevator se déplace elevator.elevatorMoves(calledfloor); return(elevator); }
public Elevator findElevator(int calledfloor, string direction) { // Tant que aucune elevator n'a été trouvé, recommencer Elevator elevatorChoosed = null; while (elevatorChoosed == null) { // Pour chaque ascenceur for (int i = 0; i < this.elevators.Count; i++) { // Si l'étage de l'ascenceur est le même que celui où on l'appel et qu'il est en "available" if ( this.elevators[i].floor == calledfloor && this.elevators[i].status == "available" ) { // La direction de cette ascenceur est celle du bouton appuyé this.elevators[i].direction = direction; // Cette ascenceur va répondre à la requête elevatorChoosed = this.elevators[i]; } // Sinon si l'élevateur est en status "available" else if (this.elevators[i].status == "available") { // On recherche l'élevateur le plus proche Elevator nearestElevator = this.nearestElevator(calledfloor); // On passe l'elevateur le plus proche en status "unavailable" nearestElevator.status = "unavailable"; // Si l'étage de l'elevateur le plus proche est plus grand que celui appelé if (nearestElevator.floor > calledfloor) { // Sa déstination devient down nearestElevator.direction = "down"; } // Si l'étage de l'elevateur le plus proche est plus petit que celui appelé else if (nearestElevator.floor < calledfloor) { // Sa déstination devient up nearestElevator.direction = "up"; } // Sinon on prend la direction demandé else { nearestElevator.direction = direction; } elevatorChoosed = nearestElevator; } // Si l'elevateur est en status "unavailable" et que la direction est la même que celle demandé else if ( this.elevators[i].status == "unavailable" && this.elevators[i].direction == direction ) { // Si la direction est up et que son étage est plus petit que l'étage appelé if ( this.elevators[i].direction == "up" && this.elevators[i].floor < calledfloor ) { // On choisit cet elevatorChoosed = this.elevators[i]; } // Sinon si sa direction est down et que l'étage de l'elevateur est plus grand que l'étage appelé else if ( this.elevators[i].direction == "down" && this.elevators[i].floor > calledfloor ) { // On choisit cet ascenceur elevatorChoosed = this.elevators[i]; } } } } return(elevatorChoosed); }