The Farmer Was Replaced: руководство по программированию для начинающих

/ ИгрыГайды

Содержание:


СОВЕТЫ ДЛЯ НАЧИНАЮЩИХ   

В этой статье я дам базовую информацию и советы, а более подробно разберу каждую тему в следующих главах.

1. ПЕРЕМЕННЫЕ (ПОСЛЕ ОТКРЫТИЯ) — ВАШИ ДРУЗЬЯ!   

Если вы знакомы с переменными в алгебре, то в этой игре используется почти то же самое. Я говорю «почти», потому что игра позволяет переменным равняться словам, названиям функций и другим значениям, включая True, False и None.

Если же алгебра вам не нравится — не беда! Можно представить эту часть геймплея как создание собственного словаря, где вы определяете значения слов и понятий.

По сути, с помощью переменных вы присваиваете объектам собственные сокращения, слова или фразы. Последние нужно разделять символом подчёркивания «_» вместо пробела, например: this_is_an_example.

2. ФУНКЦИИ (ПОСЛЕ ОТКРЫТИЯ) ОЧЕНЬ, ОЧЕНЬ, ОЧЕНЬ ЭКОНОМЯТ ВАШЕ ВРЕМЯ!   

Если вы хотите быстро продвинуться в игре, то термин «функции» должен быть вам не только знаком, но и активно использоваться.

Функции могут содержать множество действий, команд, локальных переменных и других элементов. После их определения вы можете выполнить ВСЕ эти действия, просто вызвав имя функции. Например, встроенная функция harvest() делает именно то, что следует из её названия — собирает любой созревший ресурс, над которым в данный момент находится дрон. Так, если дрон находится над травяным «квадратом», вызов harvest() позволит собрать сено и добавить его к вашим ресурсам.

Сначала это может показаться сложным, но после экспериментов и обучения работа с функциями станет очень эффективной.

Я использую функции для создания «глобальных» сокращений, которые можно применять по всему файлу с кодом.

Например, я создал функцию под названием reap_and_water() или её сокращённую версию raw() для тех, кто не любит длинные названия.

Этот код очень прост в написании, но он экономит массу времени, особенно когда вы изучаете новые культуры и адаптируетесь к их потребностям.

Функция reap_and_water() может выглядеть примерно так:

ПРИЧИНА:
Однократного полива недостаточно для полного насыщения почвы на клетке. Требуется несколько «порций» воды, чтобы достичь максимальной влажности. Чем больше полива, тем плодороднее будет земля. У этого подхода нет недостатков, кроме расхода воды.

Следующие действия не сбрасывают и не уменьшают уровень влажности:

  • Вспашка не изменяет уровень воды.
  • Посадка после полива не влияет на уровень воды.

Поэтому я поливаю после сбора урожая, а также перед посадкой, чтобы убедиться, что уровень влажности на каждой клетке оптимален.

Все перечисленные выше действия требуют много времени, символов и усилий для ввода. Однако после создания функции достаточно просто написать reap_and_water(), и весь набор действий выполнится автоматически. Это избавляет от необходимости каждый раз вводить один и тот же код при сборе урожая и обработке клетки.

3. НАПОМНИЛ ЛИ Я, ЧТО ПЕРЕМЕННЫЕ — ВАШИ ДРУЗЬЯ?   

Серьёзно, переменные — это довольно сложный инструмент.

Например, вы можете определить переменную внутри функции, и она будет вычисляться иначе, чем та же переменная за её пределами (если только глобальная переменная не используется в самой функции — тогда всё становится сложнее).

Рассмотрим пример:

Если ваш дрон находится на позиции 2 по координате x, то x будет равен 2. Таким образом, переменная функции интерпретируется как x = 2, а не x = get_pos_x().

Пока не будем углубляться в детали, но ситуация может усложниться, когда вы создаёте функции, многократно изменяющие значение переменной. Простой пример — x = x + 1, где переменная постоянно меняется.

На этом мои советы для начинающих завершаются. Надеюсь, вы получаете от игры такое же удовольствие, как и я! Меня поразило, насколько легко освоить псевдо-Python язык игры и придумывать креативные способы повышения эффективности работы дрона-фермера!

ПЕРЕМЕННЫЕ МОГУТ БЫТЬ ОЧЕНЬ РАЗНЫМИ   

Переменные — это, по сути, то же самое, что и переменные в алгебре: они представляют собой нечто, что может равняться чему-то другому и способно изменяться.

Они чрезвычайно полезны не только для экономии времени при написании кода, но и для выполнения математических операций, включая те, результат которых может мгновенно меняться в зависимости от значений переменных.

Вот простой пример:

Допустим, дрон находится на позиции 4 по координате x, тогда x = 4. Однако почти сразу значение x начинает уменьшаться с каждой итерацией цикла из-за уравнения x = x - 1.

Такой код позволит переместить дрон на координату x0.

Следующие коды стали моими любимыми благодаря их универсальности в различных сценариях:

Хотя часто требуется ручной ввод координат, этот подход позволяет коду автоматически адаптироваться к любому размеру игрового мира.

Ещё один полезный способ использования переменных — создание сокращений для функций, возвращающих простые числовые значения или состояния True, False, None. Например, я предпочитаю давать функциям длинные описательные имена для удобства отладки, а затем создаю переменные-сокращения для их результатов.

Вот упрощённый пример:

Это лишь краткий обзор возможностей переменных. Я с нетерпением жду продолжения экспериментов и изучения новых методов работы с ними в этой игре.

ФУНКЦИИ И ИМПОРТ ФАЙЛОВ   

Эту тему невозможно полноценно раскрыть без упоминания одного из улучшений, расширяющих функциональность функций в игре.

Функции можно рассматривать как определения действий. Это легко понять, поскольку каждая функция создаётся ключевым словом def, что означает «определить».

Например, следующий код демонстрирует простую функцию:

Важно знать, что вы можете вызывать одну функцию внутри другой. Однако это возможно только если текущий файл кода имеет доступ ко всем используемым функциям и переменным.

Рассмотрим пример ниже, после чего перейдём к теме файлов и тому, почему улучшение import чрезвычайно полезно для экономии места и устранения несовместимостей в коде.

ФАЙЛЫ И ИХ ИСПОЛЬЗОВАНИЕ (ВКЛЮЧАЯ ИМПОРТ)   

Файлы (и возможность их импорта) — это важное улучшение, которое стоит приобрести. Вот почему:

Файлы — это окна, в которых вы пишете код. Это очевидно. Но с импортом всё не так просто...

Импорт позволяет переходить из одного файла в другой (аналогично переходу между функциями, как упоминалось ранее).

Например, если у меня есть файл с функцией reap(), я не смогу использовать её в другом файле, пока не скопирую её туда или не импортирую.

Вот примеры импорта файлов (по их именам) в другой файл:

Вторая строка позволяет импортировать конкретную функцию в новый файл. Теперь новый файл может вызывать функцию reap(), указав сначала имя файла, затем точку и имя функции: example.reap().

Последняя строка позволяет импортировать весь файл целиком, но это может быть плохим выбором, если вы используете похожие имена функций или переменных в разных файлах. Например, если я импортирую глобальную переменную x из файла example и у меня уже есть глобальная переменная x в текущем файле, то возникнет конфликт (значение переменной будет заменено на новое, что может нарушить работу одного или обоих файлов). То же самое относится и к функциям, таким как reap(), если, например, у вас есть файл pumpkin с собственной функцией reap().

Иногда может возникнуть ситуация, когда нужно изменить действия функции для конкретного файла, не меняя её названия. Просто помните об этом, если столкнётесь с подобной задачей.

Лично я предпочитаю давать похожим, но различающимся функциям соответствующие названия. Например, функцию сбора тыкв можно назвать reap_p() вместо просто reap(), или использовать переменную pum_x вместо x. Это лишь примеры возможных решений.

ПРИМЕРЫ КОДА   

В этой главе я приведу несколько примеров кода, которые создал во время игры. Учтите, что я разрабатывал их:

  1. Без какого-либо предварительного опыта программирования
  2. Без изучения решений опытных программистов

Ниже представлен мой файл для подсолнухов, который эффективно собирает только самые высокие растения во время каждого прохода по полю — это соответствует основной механике данной культуры.

Этот файл с зависимыми функциями и переменными способен:

  • Засаживать поле подсолнухами
  • Измерять каждый экземпляр
  • Определять клетку с наилучшим показателем
  • Собирать подсолнух с этой клетки

После сбора процесс повторяется: посадка на пустых клетках, сканирование и сбор лучшего подсолнуха. Цикл продолжается до принудительной остановки.

СЛЕДУЮЩИЙ ПРИМЕР   

Следующий код предназначен для тыкв. Особенность этой культуры в том, что урожайность значительно повышается, если дать тыкве вырасти до максимального размера (текущего размера мира).

Во время изучения тыкв я заметил, что для каждой генерируется случайный код, и числа непредсказуемы. Поэтому моё решение заключалось в следующем:

Сканируйте каждую тыкву. Убедитесь, что тыквы высаживаются. Если все поле имеет одинаковый показатель измерения, это означает, что выросла одна большая тыква. Собирайте её...

Вот код!

Огромное спасибо, что дочитали до конца! Я обязательно буду обновлять эту статью по мере изучения новых культур и нахождения решений. Жду ваших советов, комментариев, замечаний (кроме вопросов о других файлах — это сделано намеренно) и желаю удачи!

Источник: dBlueFalcon | Steam

Подписаться на обновления Гайды
Зарегистрируйтесь на сайте, чтобы отключить рекламу

ℹ️ Совет от ИИ

Непонятный гайд? В статье есть ошибки или не хватает информации? Попробуйте спросить нашего ИИ-помощника в комментариях и он постарается помочь!

⚠️ Важно:

• AI Rutab читает все ваши комментарии и готов вам помочь.
• Просто задайте вопрос.
• ИИ может давать неточные ответы!
• ИИ не скажет «Я не знаю», но вместо этого может дать ошибочный ответ.
• Всегда проверяйте информацию и не полагайтесь на него как на единственный источник.
• К ИИ-помощнику можно обратиться по имени Rutab или Рутаб.
• Ваши комментарии важны и помогают нам оперативно исправлять гайды с ошибками 👍

Топ дня 🌶️


0 комментариев

Оставить комментарий


Все комментарии - Игры