Pycraft, трехмерная видеоигра с открытым исходным кодом, созданная на Python!

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

Для тех, кому интересно, это дополнение к регулярным обновлениям на моей странице в Твиттере (@PycraftDev в Твиттере: www.twitter.com/PycraftDev), которые теперь также публикуются в моем профиле Dev здесь: https://dev.to/pycraftdev. Эта статья написана Томом Джеббо, ведущим разработчиком и графическим дизайнером, и я надеюсь, что вам понравится как использовать проект, так и читать эту статью!

Содержание

  • Новый установщик Pycraft
  • - Установщик
  • - Программа обновления
  • - Деинсталлятор
  • - Заключить
  • Новости о Pycraft
  • Заключительные слова
  • Ссылки и кредиты

Новый установщик Pycraft

Последнее крупное обновление Pycraft, v0.9.4, было сосредоточено на поиске лучшего способа установки Pycraft и всех его зависимостей, отчасти из-за того, насколько большим и сложным становился проект для настройки и установки. В то же время мы также решили улучшить способ изменения вашей установки, позволяя обновлять или удалять Pycraft с вашего устройства позднее.

Мы сделали это, чтобы сделать проект более удобным для пользователя, хотя у этого все еще есть свои недостатки — главный из них заключается в том, что установщик работает только для Pycraft, когда он не скомпилирован. Это было связано с тем, что скомпилированные версии Pycraft намного проще в использовании, их нужно только загрузить и запустить, поскольку все модули, необходимые для проекта, уже есть. По этой причине вы не можете получить доступ к установщику (хотя он все еще присутствует, вы не можете выбрать опцию) в скомпилированных версиях Pycraft.

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

root = InstallerImportData.mod_TkinterUtils__.TkinterInstaller.CreateDisplay(InstallerImportData, root)

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

Я знаю, что это не идеально, есть абсолютно более эффективный способ очистить элементы в окне w tkinter, но я доволен тем, как получилось с установщиком, учитывая мой неудачный опыт работы с Tkinter, мы не хотели тратить слишком много. долгое время в проекте, так как это может легко продлить работу на несколько месяцев, но он работает точно так, как задумано, и в будущем будут внесены изменения. Разработка установщика была непростой, и многие функции несколько раз переделывались, обычно потому, что нас не устраивала конечная цель, или потому что это было медленно или неэффективно. То, как мы разработали каждый из разделов, где мы манипулировали файлами, полностью изменилось, поскольку я был недоволен тем, сколько глобальных переменных было задействовано, в установщике Pycraft более половины глобальных переменных, чем было изначально, и установщик гораздо более универсален, чем результат.

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

Теперь мы более подробно рассмотрим каждый раздел утилиты установки, определяя варианты дизайна, проблемы и механизм, стоящий за этим!

Установщик

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

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

Мы решили разработать наш пользовательский интерфейс вокруг установщика для Python, с изображением баннера слева и сбоку, заголовком и подзаголовком, а также описанием того, что происходит на данном этапе. Мы сохраняем кнопки «назад» и «вперед» в одном и том же месте на протяжении всей программы установки, хотя не каждая кнопка присутствует на каждом этапе. На стартовом экране любого пользовательского интерфейса вам предоставляется возможность закрыть программу установки, что также можно сделать, нажав «X». Мы также разработали этот процесс таким образом, что если вы вернетесь на этап назад, ваши настройки для предыдущего окна будут сохранены, поэтому вам не придется повторно вводить данные. Все кнопки и большинство элементов меню связаны со стилем системы, поэтому, как вы можете видеть на изображении ниже, снятом в Windows 11, показана тема дизайна Windows 11.

Изначально у нас было 4 отдельных меню для установщика, но позже мы решили, что для экономии кода, места и сложности мы объединим первый пользовательский интерфейс и второй пользовательский интерфейс, чтобы теперь вы могли выбрать установку БЕТА-версии Pycraft прямо в начало процесса.

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

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

Когда мы нажимаем «Продолжить», нам предлагается выбрать место для установки Pycraft, хотя это не имеет значения, некоторым ранним версиям, поддерживаемым установщиком, может не понравиться установка в некоторых местах, кроме того, мы не можем установить в какие-либо папки, к которым пользователь не может получить доступ без административного разрешения, но это не то, что мы можем обойти, после того, как вы выбрали подходящее место для установки Pycraft, нажатие «Продолжить» инициирует процесс установки.

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

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

Затем с помощью модулей threading, subprocess и sys мы запускаем ту же команду, что и пользователь в CLI для загрузки Pycraft, это загрузит Pycraft в папку загрузки по умолчанию в «сайт-пакетах», затем мы переместим Pycraft в местоположение, указанное пользователем. Поскольку этот процесс может занять некоторое время, особенно при низкоскоростном интернет-соединении или медленном хранилище, мы добавляем на экран элемент, указывающий, что меню не зависло.

Команда, которую мы запускаем, по сути такова:

subprocess.check_call([sys.executable, “-m”,”pip”,”install”,”python-pycraft”], False)

Но более тесно интегрированы в структуру проекта и с большим количеством опций и мер предосторожности на случай, если что-то пойдет не так. Эта строка Python обычно не встречается, но позволяет вам загрузить пакет или запустить команду через Python, мы запускаем команда:

-m pip install python-pycraft

В местоположении текущей версии Python.

После завершения обновления пользовательский интерфейс покажет что-то вроде этого:

Нажав кнопку «Продолжить», вы попадете в финальное меню, которое позволит вам закрыть программу установки, а также создать ярлыки на рабочем столе или в меню «Пуск». Мы рекомендуем по крайней мере один из них, так как иначе найти Pycraft может быть сложно. Мы также снова предоставляем быструю ссылку на профиль GitHub, если вы хотите прочитать последние примечания к выпуску или дополнительную информацию о проекте.

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

Обновление

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

В этом разделе используется большая часть функций остальной части установщика, хотя в нем есть определенная область, где он проверяет наличие устаревшей установки Pycraft, запуская команду для проверки устаревших пакетов (используя ту же технику, что и установщик выше) :

$python3.10 -m pip list –-outdated

Пользователь не сможет обновить Pycraft, если обновление не будет доступно, и мы выпускаем только самые стабильные — полные версии Pycraft для PyPi. вместо этого будет установлен в готовом состоянии. Вы можете увидеть процесс проверки наличия обновлений для Pycraft в меню ниже, это совместимо со всеми версиями Pycraft, которые также поддерживают установщик. Мы проверяем, устарел ли Pycraft, используя приведенную выше команду, однако мы не знаем, какая последняя версия Pycraft, потому что мы не можем получить доступ к этой информации в CLI, области, в которой будет эта функция:

$python 3.10 -m pip search python-pycraft

В настоящее время недоступен из-за высокого спроса;

RuntimeError: XMLRPC API PyPi в настоящее время отключен из-за неуправляемой нагрузки и в ближайшем будущем будет объявлен устаревшим. См. «https://status.python.org/ для получения дополнительной информации».

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

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

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

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

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

Удаление

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

Мы начинаем с меню, которое предоставляет нам 3 варианта:

  • «Удалить Pycraft и дополнительные файлы, но сохранить данные сохранения» — это предпочтительный вариант, так как это означает, что вы можете переустановить Pycraft позже, и все ваши конфигурации по-прежнему доступны (хотя сейчас вам нужно вручную заменить папку, в которой сохранены данные). сохраняется; «Файлы данных» в место новой установки), и это также метод, который мы используем для обновления Pycraft, поскольку мы сначала запускаем этот параметр, чтобы удалить старые файлы, а затем установить новые на их место. Эта опция удалит все файлы для Pycraft, а также все необходимые модули (и, поскольку модули Pycraft могут иметь необходимые модули, мы не указываем, какие файлы удалять, а только папку, в которой они находятся, в противном случае это будет много дополнительной сложности и не сделает его гибким для изменений в будущем), хотя это оставляет сохраненные данные. Мы рекомендуем этот вариант всем, кто планирует обновить свою версию.
  • «Удалить Pycraft, но оставить дополнительные файлы» — это предназначено в основном для разработчиков, оно сохраняет все загруженные вами модули для Python и удаляет только Pycraft, но не сохраняет сохраненные данные. Мы ищем способы изменить это меню, чтобы сохранение дополнительных файлов было полем, которое вы можете поставить, а не опцией для большей настраиваемости.
  • «Удалить все» — этот вариант предназначен для людей, которые просто хотят полностью удалить Pycraft из своей системы. Если у вас возникли проблемы с проектом, это лучший способ исправить это, очистив все и переустановив файлы. Существует дополнительный раздел «Исправление», над которым в настоящее время ведется работа, это также поможет вам исправить проблемы с вашей установкой, пытаясь диагностировать и исправить проблемы, и в конечном итоге будет то же самое, переустановка Pycraft с нуля, если вы позволите это .

Вы можете увидеть пользовательский интерфейс ниже; мы решили сохранить дизайн одинаковым на протяжении всего проекта:

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

Программа удаления предназначена для намеренного ограничения функциональности, например, мы не пытаемся перейти в меню «Пуск» и удалить там какие-либо ярлыки, в случае, если пользователь выбирает этот вариант при установке, мы сделали это намеренно, так как не хотели начните удалять файлы в других областях вашего ПК, так как это может быть опасно и привести к сбою в других областях.

Заключить

В ранних версиях Pycraft был установщик, это не первый установщик, который Pycraft видел, и даже не второй! Но он, безусловно, самый надежный.

Для первого дизайна Pycraft и установщик там одно и то же, установщик был интегрирован в Pycraft, который на тот момент представлял собой один файл — примерно такого же размера и современный Home Screen, что действительно впечатляет! — И у этого были серьезные проблемы, начиная с того факта, что он был встроен в Pycraft, что означало, что вам нужно было сначала установить все дополнительные модули, прежде чем проект запустится, а затем, как только вы добились того, что он был полностью основан на Pygame, поэтому не использовал ту же тему. как и большинство установщиков, что сбивает с толку.

Во второй версии мы перешли на Tkinter с Pygame, и результаты были значительно лучше, хотя установщик был медленным и изначально не переносимым, это должно было быть окончательным дизайном, но запутанным макетом, не говоря уже о том, насколько сильно изменились оба Pycraft (это не так). длиннее один (монолитный) файл на одну вещь) означало, что нужен новый дизайн, и это то, к чему мы пришли сегодня!

Новости о Pycraft

В Pycraft происходят значительные изменения… Игровой движок полностью переработан с нуля, мы полностью меняем способ взаимодействия контроллера и клавиатуры с проектом, а также добавляем в Pycraft важные внутриигровые функции, такие как отображение теней. , время (например, закаты и рассветы), погода (дождь, грозы, солнце, облака и т. д.), а также добавление новых дизайнов для карты, а также новых текстур. Это обновление будет огромным и является единственным направлением Pycraft v0.9, мы стремимся завершить все это до того, как мы достигнем Pycraft v0.10, в соответствии с графиком обновлений, который я запланировал и которым поделился в предыдущих статьях.

Мы уже добавили отображение теней и основы времени, а также весь установщик и добились значительного прогресса в других местах, следующая статья среднего уровня за май будет лучше документировать эти изменения и более подробно рассказывать об этих изменениях. Тем временем я также работал над улучшением и добавлением новых функций для разработчиков, например, в последних сборках Pycraft v0.9.5 вы можете нажать «k», чтобы пропустить 1 минуту дня вперед. Я также добавил счетчик, который показывает количество времени, проведенного в игре (полезно для отслеживания времени при внедрении времени в игру). Вскоре вы как разработчик сможете нажимать «Q» во всех меню Pycraft и получать доступ к меню, в котором перечислены все переменные, используемые в проекте, и их текущие значения, что значительно упрощает их мониторинг! В Pycraft появилось множество новых изменений и функций, и предстоит проделать много работы и исправить ошибки!

Заключительные слова

Спасибо, что прочитали эту статью, я надеюсь, что вам понравилась эта статья, и я надеюсь, что вы поняли все, что касается Pycraft. Если вы хотите поделиться этой статьей, мы будем очень благодарны!

Разработка Pycraft занимает у меня много времени, и большая часть работы связана с Pycraft в целом и написанием этих статей для вас, поэтому, если у вас есть какие-либо вопросы, предложения или помощь; не стесняйтесь обращаться к нам по адресу https://github.com/PycraftDeveloper/Pycraft или связавшись с ведущим разработчиком здесь: https://twitter.com/PycraftDev или разместив сообщение на сервере разногласий, который вы можно найти здесь: https://discord.gg/h4jpcjJh (инвайт на сервер).

Ссылки и кредиты

Моя страница в Твиттере: https://twitter.com/PycraftDev

Моя страница на GitHub: https://github.com/PycraftDeveloper

Моя страница Dev.to: https://dev.to/pycraftdev

Pycraft можно найти здесь: https://github.com/PycraftDeveloper/Pycraft

Pycraft также можно найти здесь: https://pypi.org/project/Python-Pycraft/

Документацию по Pycraft можно найти здесь: https://python-pycraft.readthedocs.io/en/latest/

С благодарностью:

Обратите внимание, что ссылки в разделе «С благодарностью» не модерируются мной, они являются безопасными ссылками на момент написания, однако я не контролирую их содержимое!