Advertisement
puggan

RoboRallyRules.ts

Mar 31st, 2025
525
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function roboRally()
  2. {
  3.     setUp();
  4.     while(!winner()) {
  5.         dealCards();
  6.         placeCards();
  7.         actOnPowerDown();
  8.         for(let register = 1; register <= 5; register++) {
  9.             revealCard(register);
  10.             moveRobots(register);
  11.             expressConveyorBelts();
  12.             conveyorBelts();
  13.             pushersPush();
  14.             gearsRotate();
  15.             fireLasers();
  16.             verifyCheckpoints();
  17.         }
  18.         endOfTurnCleanUp();
  19.     }
  20. }
  21.  
  22. function actOnPowerDown() {
  23.     players.forEach((player) => {
  24.         if (player.robot.powerDown) {
  25.             player.robot.damage = 0;
  26.         }
  27.         if (player.decideRequestPowerDown()) {
  28.             player.requestedPowerDown = true;
  29.         }
  30.     });
  31. }
  32.  
  33. function moveRobots(register: int) {
  34.     players.map(
  35.         (player) => {
  36.             if (player.robot.dead) {
  37.                 return;
  38.             }
  39.             const card = player.getRegisterCard(register)
  40.             if (player.robot.riskOfCollision(card.action)) {
  41.                 player.waitForPriority(card.priority);
  42.             }
  43.             player.robot.move(card.action);
  44.         }
  45.     );
  46. }
  47.  
  48. function conveyorBeltMoment(spot: Spot) {
  49.     if (spot.nextSpot.robot) {
  50.         return;
  51.     }
  52.     spot.robot.moveTo(spot.nextSpot);
  53.     if (!spot.nextSpot.isBelt()) {
  54.         return;
  55.     }
  56.     if (spot.nextSpot.turnCW) {
  57.         spot.robot.turnCW();
  58.     }
  59.     if (spot.nextSpot.turnCCW) {
  60.         spot.robot.turnCCW();
  61.     }
  62. }
  63.  
  64. function expressConveyorBelts() {
  65.     board
  66.         .filter((spot) => spot.type === 'expressBelt' && spot.robot)
  67.         .map(conveyorBeltMoment);
  68. }
  69.  
  70. function conveyorBelts() {
  71.     board
  72.         .filter((spot) => (spot.type === 'expressBelt' || spot.type === 'belt') && spot.robot)
  73.         .map(conveyorBeltMoment);
  74. }
  75.  
  76. function pushersPush() {
  77.     board
  78.         .filter((spot) => spot.type === 'pusher' && spot.robot)
  79.         .map((spot) => spot.robot.moveTo(spot.nextSpot));
  80. }
  81. function gearsRotate() {
  82.     board
  83.         .filter((spot) => spot.type === 'gear' && spot.robot)
  84.         .map((spot) => spot.turnCW ? spot.robot.turnCW() : spot.robot.turnCCW());
  85. }
  86. function dealCards() {
  87.     for(const player of players) {
  88.         player.getCards(9 - player.robot.damage)
  89.     }
  90. }
  91.  
  92. function fireLasers() {
  93.     const lasers = [
  94.         ...board.filter((spot) => spot.type === 'laser').map((spot) => spot.laser),
  95.         ...players.map((player) => player.robot.mainLaser)
  96.     ]
  97.     players.forEach((player) => {
  98.         player.powerUps.filter((powerUp) => powerUp.type = 'laser').forEach((powerUp) => {
  99.             lasers.push(powerUp.laser);
  100.         })
  101.     })
  102.     lasers.forEach((laser) => laser.fire())
  103. }
  104.  
  105. function verifyCheckpoints() {
  106.     players.forEach((player) => {
  107.         if (player.robot.dead) {
  108.             return;
  109.         }
  110.         const robotSpot = player.robot.spot;
  111.         if (!robotSpot || robotSpot.type === 'pit') {
  112.             player.robot.dead = true;
  113.             return;
  114.         }
  115.         if (robotSpot.type !== 'repair' && robotSpot.type !== 'flag') {
  116.             return;
  117.         }
  118.         if (player.robot.damage > 0) {
  119.             player.robot.damage--;
  120.         }
  121.         player.robot.setSpawn(robotSpot);
  122.         if (robotSpot.type === 'flag' && robotSpot.flagNr === player.targetFlag) {
  123.             player.targetFlag++;
  124.         }
  125.     })
  126. }
  127.  
  128.  
  129. function placeCards() {
  130.     for(const player of players) {
  131.         for(let registerIndex = 1; registerIndex <= 5; registerIndex++) {
  132.             if (!player.registerIsLocked(registerIndex)) {
  133.                 player.putCard(registerIndex, player.cardDecision());
  134.             }
  135.         }
  136.     }
  137. }
  138.  
  139. function winner() {
  140.     const winners = players.filter((player) => player.targetFlag > game.lastFlag);
  141.     if (winners.length < 1) {
  142.         return null;
  143.     }
  144.     return winners[0];
  145. }
  146.  
  147. function endOfTurnCleanUp() {
  148.     players.forEach((player) => {
  149.         const robotSpot = player.robot.spot;
  150.         if (robotSpot.type === 'repair' && robotSpot.dualWrench) {
  151.             player.gainPowerUp();
  152.         }
  153.  
  154.         for(let register = 1; register <= 5; register++) {
  155.             if (!player.cardIsLocked(register)) {
  156.                 player.discardCard(register);
  157.             }
  158.         }
  159.  
  160.         if (player.requestedPowerDown) {
  161.             player.robot.powerDown = true;
  162.         } else if (player.robot.powerDown && player.decidePowerDownDone()) {
  163.             player.robot.powerDown = false;
  164.         }
  165.  
  166.         if (player.robot.dead) {
  167.             player.robot.dead = false;
  168.             player.robot.moveTo(player.robot.spawnSpot, player.decideDirection());
  169.             player.robot.damage = 2;
  170.             player.robot.powerDown = !player.decidePowerDownDone();
  171.         }
  172.     });
  173. }
  174.  
Tags: RoboRally
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement