Exemple #1
0
 /**
  * Executes instructions.
  *
  * @throws ImpossibleMoveException
  * @throws UnknownInstructionException
  */
 public function executeInstructions()
 {
     foreach ($this->instructions as $instruction) {
         if (in_array($instruction, $this->allowedActions)) {
             if (!$this->plateau->isMovePossible($this->xPosition, $this->yPosition, $this->orientation)) {
                 throw new ImpossibleMoveException('Move is not possible - new position is out of the grid.');
             }
             list($newXCoordinate, $newYCoordinate) = $this->plateau->move($this->xPosition, $this->yPosition, $this->orientation);
             $this->xPosition = $newXCoordinate;
             $this->yPosition = $newYCoordinate;
         } elseif (in_array($instruction, $this->allowedTurnDirections)) {
             $this->orientation = $this->plateau->turn($this->orientation, $instruction);
         } else {
             throw new UnknownInstructionException('Unknown instruction.');
         }
     }
 }
Exemple #2
0
 public function testTurn()
 {
     $plateau = new Plateau(5, 5);
     $this->assertEquals(Plateau::NORTH, $plateau->turn(Plateau::EAST, Plateau::LEFT));
     $this->assertEquals(Plateau::WEST, $plateau->turn(Plateau::NORTH, Plateau::LEFT));
     $this->assertEquals(Plateau::SOUTH, $plateau->turn(Plateau::WEST, Plateau::LEFT));
     $this->assertEquals(Plateau::EAST, $plateau->turn(Plateau::SOUTH, Plateau::LEFT));
     $this->assertEquals(Plateau::SOUTH, $plateau->turn(Plateau::EAST, Plateau::RIGHT));
     $this->assertEquals(Plateau::EAST, $plateau->turn(Plateau::NORTH, Plateau::RIGHT));
     $this->assertEquals(Plateau::NORTH, $plateau->turn(Plateau::WEST, Plateau::RIGHT));
     $this->assertEquals(Plateau::WEST, $plateau->turn(Plateau::SOUTH, Plateau::RIGHT));
 }