public void Move() { //move switch (currentDirection) { case Day13Direction.Left: Position = new Point(Position.X - 1, Position.Y); break; case Day13Direction.Up: Position = new Point(Position.X, Position.Y - 1); break; case Day13Direction.Right: Position = new Point(Position.X + 1, Position.Y); break; case Day13Direction.Down: Position = new Point(Position.X, Position.Y + 1); break; } //rotate Day13TrackType currentTrack = Map[Position.X, Position.Y]; switch (currentTrack) { case Day13TrackType.None: throw new Exception("Error! Train out of track!!"); case Day13TrackType.UpDown: break; case Day13TrackType.LeftRight: break; case Day13TrackType.Left: switch (currentDirection) { case Day13Direction.Left: currentDirection = Day13Direction.Up; break; case Day13Direction.Up: currentDirection = Day13Direction.Left; break; case Day13Direction.Right: currentDirection = Day13Direction.Down; break; case Day13Direction.Down: currentDirection = Day13Direction.Right; break; } break; case Day13TrackType.Right: switch (currentDirection) { case Day13Direction.Left: currentDirection = Day13Direction.Down; break; case Day13Direction.Up: currentDirection = Day13Direction.Right; break; case Day13Direction.Right: currentDirection = Day13Direction.Up; break; case Day13Direction.Down: currentDirection = Day13Direction.Left; break; } break; case Day13TrackType.All: currentDirection = (Day13Direction)(((int)currentDirection + DIRECTION_CHANGE[currentPositionInDirectionChange] + 4) % 4); currentPositionInDirectionChange = (currentPositionInDirectionChange + 1) % DIRECTION_CHANGE.Length; break; } }
public Day13Train(Day13Direction direction, Point initialPosition) { currentDirection = direction; Position = initialPosition; }