public Position getNeighbourPosition(Position origin, Direction direction) throws PositionOutOfBoundsException
    {
        Position result = null;
        
        switch (direction)
        {
        case UP : 
            result = origin.translate(0, -1);
            break;
        case DOWN : 
            result = origin.translate(0, 1);
            break;
        case LEFT : 
            result = origin.translate(-1, 0);
            break;
        case RIGHT : 
            result = origin.translate(1, 0);
            break;
        case UP_LEFT : 
            result = origin.translate(-1, -1);
            break;
        case UP_RIGHT : 
            result = origin.translate(1, -1);
            break;
        case DOWN_LEFT : 
            result = origin.translate(-1, 1);
            break;
        case DOWN_RIGHT : 
        default:  
            result = origin.translate(1, 1);        
        }
        if (!this.isPositionInBounds(result)) throw new PositionOutOfBoundsException();
        return result;
    }