Code for Elevator Saga
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

elevator.js 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. {
  2. init: function(elevators, floors) {
  3. console.clear();
  4. console.log("----" + "\n");
  5. console.log("Starting...");
  6. console.log("----" + "\n");
  7. let floorCount = floors.length;
  8. let bottomFloor = 0;
  9. let topFloor = floorCount - 1;
  10. let elevatorCount = elevators.length;
  11. let upRequestFloorSet = new Set();
  12. let downRequestFloorSet = new Set();
  13. // Register floor button presses
  14. floors.forEach(function (floor) {
  15. floor.on("up_button_pressed", function() {
  16. console.log("Up request: " + floor.level);
  17. upRequestFloorSet.add(floor.floorNum);
  18. });
  19. floor.on("down_button_pressed", function() {
  20. console.log("Down request: " + floor.level);
  21. downRequestFloorSet.add(floor.floorNum);
  22. });
  23. });
  24. // Individual elevators
  25. let elevator = elevators[0];
  26. let elevatorIndex = elevators.indexOf(elevator);
  27. let destinationSet = new Set();
  28. let defaultRange = [
  29. (elevatorIndex + 0) * Math.floor(floorCount / (elevatorCount + 1)),
  30. (elevatorIndex + 1) * Math.floor(floorCount / (elevatorCount + 1)),
  31. (elevatorIndex + 2) * Math.floor(floorCount / (elevatorCount + 1))
  32. ]
  33. // Elevator starts on floor 0; must be going up
  34. elevator.goingUpIndicator(true);
  35. elevator.goingDownIndicator(false);
  36. // Go to designated starting floor
  37. console.log("Sending elevator[" + elevatorIndex + "] to floor[" + defaultRange[0] + "]")
  38. elevator.goToFloor((elevatorIndex + 0) * Math.floor(floorCount / (elevatorCount + 1)));
  39. elevator.on("idle", function() {
  40. console.log("Idle...");
  41. elevator.goingUpIndicator(false);
  42. elevator.goingDownIndicator(false);
  43. });
  44. elevator.on("floor_button_pressed", function(floorNum) {
  45. console.log("Floor pressed: " + floorNum);
  46. destinationSet.add(floorNum);
  47. elevator.goToFloor(floorNum);
  48. });
  49. elevator.on("passing_floor", function(floorNum, direction) {
  50. if(upRequestFloorSet.has(floorNum) || downRequestFloorSet.has(floorNum) || destinationSet.has(floorNum)) {
  51. elevator.goToFloor(floorNum);
  52. }
  53. });
  54. elevator.on("stopped_at_floor", function(floorNum) {
  55. console.log("Stopped at: " + floorNum);
  56. upRequestFloorSet.delete(floorNum);
  57. downRequestFloorSet.delete(floorNum);
  58. destinationSet.delete(floorNum);
  59. });
  60. },
  61. update: function(dt, elevators, floors) {}
  62. }