• Проверка редких кейсов в логике игр?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Эта проверка - элементарна. Поле и так все в памяти хранится. Просто посмотреть, что за тип биома там и есть ли там уже провод - это один if. Это наносекунды процессорного времени
    Ответ написан
    Комментировать
  • Проверка редких кейсов в логике игр?

    Daemon23RUS
    @Daemon23RUS
    Не скажу за игровой процесс Terraria, но ваше предположение можно условно назвать монолитной компоновкой, и тогда - да каждый раз проверка. Но это жутко непрактично на большом контенте, в особенности при его расширении и дополнении (можно что то сломать и долго искать причину) Поэтому второй вариант - условно модульный, проверка на уровне сегмента территории, что там можно ставить, чего нельзя. Сам код проверки единый, а вот данные подгружаются в соответствии с локацией.
    Ответ написан
    Комментировать
  • Проверка редких кейсов в логике игр?

    Vindicar
    @Vindicar
    RTFM!
    ИМХО достаточно прописать у класса блока метод/обработчик события, который вызывается перед попыткой поставить блок по координатам и сообщает, можно ли его поставить. По дефолту метод может либо проверять базовые вещи типа "есть ли уже блок в этом месте", либо (если эта проверка вынесена за рамки метода и выполняется отдельно) тупо возвращать true.

    Это паттерн Полиморфизм, он встречается в наборе G.R.A.S.P. и ещё много где. Если на пальцах - если нужны разные реализации какой-то операции над разными типами объектов, нужно вместо большого дерева if-else-if-else-if-else сделать перегружаемый метод. Тогда можно будет возложить выбор правильной реализации метода на компилятор - к какому классу объект принадлежит, такой вариант метода и вызовется.
    Ответ написан
    Комментировать
  • Проверка редких кейсов в логике игр?

    hint000
    @hint000
    у админа три руки
    Вот поэтому...
    для геймдева нужно знать дискретную математику

    Можно создать битовую маску / битовую карту, в которой по одному измерению будут блоки, по другому измерению локации. Единичный бит будет означать доступность действия, нулевой бит - недоступность.
    Тогда "сто тыщ миллионов" условий будут проверяться одной строкой кода. Такой подход слегка напоминает ПЛИС / FPGA. Кстати, если скомбинировать это с ответом Daemon23RUS, можно не таскаться с огромной битовой картой, а подгружать маленькую в конкретной локации. И, более того, битовую карту можно динамически менять в зависимости от дополнительных факторов, например, разлочивание какой-то возможности будет выглядеть как замена одного нолика на единичку в битовой карте.
    Ответ написан
    Комментировать
  • Проверка редких кейсов в логике игр?

    @CBET_TbMbI
    > Во всей игре есть лишь одно место, где нельзя ставить провода - храм джунглей.

    А чем это отличается от любой другой логики, описываемой словом "только"?
    - яйцо дракона можно получить только с дракона
    - мифическую руду можно получить только копая в мифической пещере
    - костёр можно развести везде кроме водоёмов
    Ответ написан
    Комментировать
  • Как понять где +, а где -?

    @lonelymyp
    Хочу вылезти из минуса по карме.
    Раз уж выяснилось что разъём был на цветных проводах...
    Померить полярность на штекере от блока питания, чёрные провода паять так чтоб они попали на минус штекера, красные соответственно на плюс.
    Ответ написан
    Комментировать
  • Как понять где +, а где -?

    Там разве не однозначно как он был установлен?
    Ну и если есть доступ к чему паять - отследите куда проводники на плате идут, найдите ближайший конденсатор. Или прозвоните тестером - минус это наверняка корпус.

    Но наверно правильнее будет обратиться в сервис, кто постоянно разбирает паяет такие железки.
    Ответ написан
    Комментировать
  • Как понять где +, а где -?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Обычно плюс внутри. а минус снаружи, но бывают исключения. Посмотрите на блоке питания. обычно указано, но можно и проверить мультиметром.
    На плате можно определять полярность по электролитическим конденсаторам, но обычно видно как стоял разъём, редко его можно припаять двумя способами. Если можно, то ваших фотографий не достаточно.
    В любом случае, если вам не очевидно как определить полярность, то лучше не лезьте и отнесите в сервис. Бе опыта можно накосячить очень многими способами и помимо перепутывания полярности. А токи там приличные, и ноут спалите, и пожар можете устроить.
    Ответ написан
    Комментировать
  • Как заставить def работать?

    Vindicar
    @Vindicar
    RTFM!
    Поучи язык. Просто поучи, без ботов.
    def объявляет функцию, но не вызывает её.
    Ты её объявляешь внутри record_volume(), но ничего с ней не делаешь.
    Ответ написан
    Комментировать
  • Почему программа вылетает?

    @dima20155
    you don't choose c++. It chooses you
    Если сервер и клиент не находятся в одной сети, то клиент не сможет подключиться к хосту и упадет по тайм-ауту.

    Выход - запускать хост на выделенном сервере с открытым нужным портом и белым ip

    Создать общую локальную сеть (физически или через программы типо хамачи)

    Купить у провайдера белый IP или доменное имя (знаю, что Скайнет позволял) и иметь открытым наружу нужный порт (небезопасно, надо иметь в виду)
    Ответ написан
    Комментировать
  • Почему функция возвращает None?

    @GofMan33333
    Функция longest_substring никогда не возвращает результат в том случае, когда substring_len уменьшается. Вам нужно добавить финальный return в конце функции, чтобы вернуть результат в этом случае. Например:

    def longest_substring(string, substring_len):
        for i in range(len(a) - substring_len + 1):
            substring = list(a[i:i + substring_len])
            if sorted(substring) == sorted(set(substring)):
                return substring
    
        return longest_substring(string, substring_len - 1)
    Ответ написан
    Комментировать
  • Почему функция возвращает None?

    Maksim_64
    @Maksim_64
    Data Analyst
    а где return добавьте и функция начнет вам возвращать то что вы ожидаете.
    return longest_substring(string, substring_len - 1)
    Ответ написан
    Комментировать
  • Почему функция возвращает None?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Если условие не выполняется, то функция ничего не возвращает и в переменной ans оказывается None.
    Ответ написан
    4 комментария
  • Почему if else не работает?

    flapflapjack
    @flapflapjack
    на треть я прав
    Попробуйте так
    --if gender == MALE or FEMALE:
    ++if gender == MALE or gender==FEMALE:


    У вас идет проверка на истинность сравнения gender с MALE, либо если FEMALE - истина. А так как FEMALE != false, выражение всегда истинно.
    Ответ написан
    Комментировать
  • Как составить число n из элементов списка?

    Vindicar
    @Vindicar
    RTFM!
    Я бы решал задачу рекурсивно.
    Найди в списке все числа x, меньшие или равные n, определи их позиции в списке, отсортируй по убыванию числа.
    Если в списке есть x, равное n, ответ найден.
    Иначе перебирай числа по порядку, от больших к меньшим, и для каждого числа x пробуй убрать его из списка, а потом рекурсивно решить задачу для суммы n-x.
    Т.е. что-то типа:
    def compose_sum(numbers: list[int], total: int) -> list[int] | None:
        # ищем индексы потенциальных слагаемых
        indices = [i for i in range(len(numbers)) if numbers[i] <= total] 
        # сортируем по убыванию слагаемых, потом по порядку в списке
        indices.sort(key = lambda i: (numbers[i], i), reverse=True)
        # если нулевой элемент совпадает - мы нашли точную сумму. Прерываем рекурсию.
        if numbers[indices[0]] == total: 
            return [indices[0]]
        for index in indices: # иначе перебираем слагаемые
            numcopy = numbers.copy()
            # копия списка без рассматриваемого слагаемого
            current = numpcopy.pop(index)
            next_indices = compose_sum(numcopy, total - current)
            if next_indices:  # нашли решение, корректируем индексы (так как мы удалили один элемент)
                for i in range(len(next_indices)):
                    if next_indices[i] >= index:
                        next_indices[i] += 1
                return [index] + next_indices # отдаём наше решение "наверх"
            # next_indices пуст/None - решения не нашли, пробуем другой index
        return None # не нашли решения ни для одного index
    Ответ написан
    Комментировать
  • Куда поставить break?

    @Andronron
    Попробуйте "go to" но помните большая сила -большая ответственность
    Ответ написан
    Комментировать
  • Как разместить телеграм бота на heroku?

    ptrvch
    @ptrvch
    вебдев-энтузиаст. Django, AngularJS
    Создайте в корневом каталоге файл Procfile, в нем введите следующее:
    worker: python bot.py
    Потом в командной строке в рабочем каталоге включите worker:
    heroku ps:scale worker=1

    в остальном деплой мало отличается от привычного деплоя веб-приложения на heroku, который описан в справке.
    Ответ написан
    Комментировать
  • Как разместить телеграм бота на heroku?

    @defolter
    Вот есть неплохая инструкция: Развертывание Python бота для ВКонтакте на Heroku
    Для телеграма принцип такой же.
    Ответ написан
    1 комментарий
  • Как сделать инлайн кнопку для команд?

    @UberPool
    Python/JS coder
    Вам нужны обычные Reply кнопки а не Inline.....
    Ответ написан
    1 комментарий