/** * 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.'); } } }
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)); }