- /dev/head
- Pygame на Android
- Python-сообщество
- Уведомления
- #1 Фев. 25, 2020 22:00:34
- Перенос игры на смартфон
- #2 Фев. 25, 2020 22:06:05
- Перенос игры на смартфон
- #3 Фев. 26, 2020 06:55:00
- Перенос игры на смартфон
- #4 Фев. 26, 2020 09:37:42
- Перенос игры на смартфон
- #5 Фев. 26, 2020 12:21:42
- Перенос игры на смартфон
- #6 Фев. 26, 2020 12:48:24
- Перенос игры на смартфон
- #7 Фев. 26, 2020 15:12:00
- Перенос игры на смартфон
- #8 Фев. 26, 2020 17:02:27
- Перенос игры на смартфон
- Пишем «Змейку» под Android на Python и Kivy
- Авторизуйтесь
- Пишем «Змейку» под Android на Python и Kivy
- Знакомимся с Kivy
- Устанавливаем Kivy
- Зависимости
- Buildozer
- Оно работает?
- Классы
- Свойства
- Фрукт
- Методы
- Основной цикл
- Создаем экраны
- Внешняя оболочка
- Классы
- Добавляем настройки
/dev/head
Pygame на Android
Pygame Subset for Android отличная штука которая позволяет с минимальным количеством изменением кода портировать на Android,то что было написано для PC на библиотеке pygame. Помню что я как-то написал бинарные часы и сейчас меня приспичило их портировать, чтобы протестировать работоспособность.
1. Подключаем устройство по USB для режима отладки (Можно использовать виртуальную, но они достаточно сильно глючат)
После подключения к компьютеру, включите режим отладки на телефоне(планшете) Настройки —> Для разработчиков —>Отладка по USB
3. Тестирование на недостающие компоненты
4. Установка AndroidSDK
5. Создаём каталог
6. Создаём в папке файл main.py с исходным кодом:
Вы можите убедиться, что изминения с оригиналом минимальны. Сравнить.
7.Конфигурирование проекта (нужно ответить на вопросы)
8. Сборка пакета и установка пакета на устройство
Возможная ошибка error: insufficient permissions for device Устройство не определено, чтобы оно корректно определилось, нужно сделать некоторые действия:
T: Bus=02 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#= 15 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=18d1 ProdID=0003 Rev=02.30
S: Manufacturer=USB Developer
S: Product=Android
S: SerialNumber=20080411
C: #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
В вашем случае может быть немного не такие параметры, из всего списка нам нужен Vendor=18d1
Источник
Python-сообщество
Уведомления
#1 Фев. 25, 2020 22:00:34
Перенос игры на смартфон
Привет!
Хочу свою игру с использованием pygame перенести на смартфон.
Первый раз это делаю, поэтому не представляю с чего начать?
Программа для ПК готова. (Питон 3.7. Pygame)
Подскажите алгоритм действий.
Как получить файлы, которые можно загрузить на смартфон и запустить?
Спасибо
Отредактировано panama555 (Фев. 25, 2020 22:01:15)
#2 Фев. 25, 2020 22:06:05
Перенос игры на смартфон
#3 Фев. 26, 2020 06:55:00
Перенос игры на смартфон
panama555
Хочу свою игру с использованием pygame перенести на смартфон.
В такой постановке никак. Потому что Смартфон это может быть android,iOS,winphone,simbian,… и еще десяток других систем.
Если конкретно Андроид, то тоже никак :). https://habr.com/ru/post/119831/ На андроиде работает подмножество pygame. Т.е. при разработке игры надо было сразу писать так чтобы она шла на win/lin/android.
Если учесть то что для нормальной игры способы управления на смартфоне отличаются от таковых на десктопе то по сути объем работы будет как при написании вашей первой готовой версии под десктоп.
#4 Фев. 26, 2020 09:37:42
Перенос игры на смартфон
doza_and
В такой постановке никак. Потому что Смартфон это может быть android,iOS,winphone,simbian,… и еще десяток других систем.
doza_and
Т.е. при разработке игры надо было сразу писать так чтобы она шла на win/lin/android.
doza_and
Если учесть то что для нормальной игры способы управления на смартфоне отличаются от таковых на десктопе то по сути объем работы будет как при написании вашей первой готовой версии под десктоп.
Насчёт этого у меня сомнения. Мне нужно будет только заменить перехват одних событий на другие.
Я не думаю, что это сложно. Остальной алгоритм уже отлажен. Даже если каждую функцию я буду переносить и проверять отдельно, то это не так уж сложно и долго.
Может быть ещё кто кинет ссылки на обучалки по теме переноса с ПК на Андроид?
#5 Фев. 26, 2020 12:21:42
Перенос игры на смартфон
удваиваю вопрос (немного офтоп) хотя думаю ни кто не ответит
1. pygame лицензируется как lgpl — что это значит для дистребьюции?
хорошо , программа пишется с использованием компонентов под лицензией bsd или mit и с этой стороны нет проблем
возникает впрос —
2. как распростронять программу к примеру через appstore, googleplay, fdroid? (отдельный вопрос стоит ли вобще связываться с мобильной разработкой имея в активе только “почти год изучение python” и вобще на сколько python здесь уместен)
3. если встанет вопрос о монетизации то как это делать? (даже банальный донат там куча вопросов)
4. если программа продается или она многопользовательская то как реализавать защиту приложения?
5. налоги?
зы прекрасно понимаю возражения «что да ни кому эта ваша программа нужна« итд итп но все же как сделать чисто что бы не наступить на грабли
возращаясь к теме посмотрите в сторону kivy (сейчас мучаю этот фрамеворк не чего особенного обычное todo-приложение) ну или как выше писали pygame заточенные под нужную вам платформу (есть вроде еще Godot(ну почти python) и Panda3D(вроде может в андроид)) в конце концов у вас уже есть рабочий прототип (: можно наверное переписать под нужный фрамеворк-платформу
ps ТС ну конечно если вы пишете игрушки для зацини шо магху и на поучиться и дальше вашего телефона-компьютера это не пойдет то все эти 5 вопросов вам не важны
1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например) , нажмите и вставьте ссылку на его url
…
есчщо
Отредактировано AD0DE412 (Фев. 26, 2020 12:40:15)
#6 Фев. 26, 2020 12:48:24
Перенос игры на смартфон
Давайте трезво смотреть на вещи — никто в мире не пишет мобильные игры на питоне, да и вообще игры (скрипты для разных движков не в счёт).
#7 Фев. 26, 2020 15:12:00
Перенос игры на смартфон
не не не … ну что вы. а это например. целых 10+ установок … покайтесь (:
1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например) , нажмите и вставьте ссылку на его url
…
есчщо
Отредактировано AD0DE412 (Фев. 26, 2020 15:19:13)
#8 Фев. 26, 2020 17:02:27
Перенос игры на смартфон
AD0DE412
1. pygame лицензируется как lgpl — что это значит для дистребьюции?
AD0DE412
2. как распростронять программу к примеру через appstore, googleplay, fdroid?
Эт надо заходить на каждый сайт и читать, там обычно есть “ХАВТУ для погромистов” типа такого:
1 Создать аккаунт разработчика, обычно платно, но плата единоразовая от $25 у гугла до $100 у епла.(пишу по памяти, цены были актуальны 3 года назад, сейчас возможны изменения, детальнее смотрите на соответсвующих сайтах)
2. Оформить privacy policy.
3. Подготовить маркетинговые материалы (иконка, скриншоты, баннер, текст, проморолик).
4. Обеспечить сборку наличием сертификата цифровой подписи.
5. Настроить оплату за пользование приложения.
6. Отправить сборку в appstore/googleplay/fdroid и тд…
AD0DE412
(отдельный вопрос стоит ли вобще связываться с мобильной разработкой имея в активе только “почти год изучение python” и вобще на сколько python здесь уместен
не стоит, неуместен. Когда говорят о “мобильной разработке” то в оcвновном имеют ввиду Java(Script), HTML5, CSS, Swift, C(++\#).
Пайтон это скорее из разряда извращений потому как особого выбора нет, это или kivy, или BeeWare.(честно говоря, не в курсе насколько последний актуален, читал пару статей о нем пару лет назад, МБ он уже загнулся давно…)
С pygame там все сложно, непонятно как это все упаковать в один .apk, а вариант “установите пайгейм_для_андроид, установите нашу игру, запустите из консоли….” слишком сложный для ленивых пользователей смартфонов. Хотя вроде можно использовать kivy/python-for-android чтобы запихнуть пайгейм игру в .apk. Но будте готовы что даже простой “Hello word!”(helooword.apk) будет весить несколько мегабайт, так как оно работает по принципу py2exe\pyinstaller, тоесть пихает в апк-шку пайтон, пайгейм и все необходимые либы. OpenGL-я в пайгейм_для_ведроид, насколько я понимаю, нет, то есть максимум это спрайтовые игры. Хотя опять же я не в курсе последних новостей из мира pygame4android, может уже и есть.
Вроде еще Panda3d выкатила свой порт под ведроид, но тут вообще все на уровне слухов и танцев с бубном на велосипеде.
AD0DE412
3. если встанет вопрос о монетизации то как это делать? (даже банальный донат там куча вопросов)
ну тут вариантов не много: использовать стандартный механизм, у гугла это in-app purchase, https://play.google.com/about/monetization-ads/ чтото такое должно быть и у яблока. Конечно можно исхитриться, и запилить свой механизм в обход гугеля/епла но есть неилюзорный шанс нарваться на бан.
AD0DE412
4. если программа продается или она многопользовательская то как реализавать защиту приложения?
налоги вы платите согласно законам страны в которой вы проживаете. Если мы говорим про Россию, то по завершении финансового года вам достаточно подать декларацию о доходах, где указать поступления от продажи своих приложений в Google Play и заплатить с них 13% НДФЛ. Это если совсем вкратце, и только если вы “продаете” свою программу (берете деньги или за право пользоваться, или продаете внутриигровой контент). А например показ объявлений Google AdSense в приложении может рассматриваться как оказание рекламных услуг, тут уже нужно регистрировать, как минимум, ИП и выводить доход от Google AdSense на банковский счет ИП со всеми вытекающими налоговыми обязанностями.
FishHook
никто в мире не пишет мобильные игры на питоне, да и вообще игры (скрипты для разных движков не в счёт).
мобильные да, а вообще пишут, таже eve online написана на python (stackless Python если точнее) чуть более чем полностью, начиная от сервера и заканчивая клиентом. Это конечно не WOW или WOT но 300К активных игроков(то есть оплачивающих подписчиков) это тоже не coles canis
так что тут скорее вопрос желания.
Отредактировано PEHDOM (Фев. 26, 2020 17:22:43)
Источник
Пишем «Змейку» под Android на Python и Kivy
Авторизуйтесь
Пишем «Змейку» под Android на Python и Kivy
В этой статье мы напишем классическую «Змейку» на Python с помощью инструмента для создания GUI Kivy.
Знакомимся с Kivy
Kivy — это популярный инструмент для создания пользовательских интерфейсов, который отлично подходит для разработки приложений и несложных игр. Одним из основных достоинств Kivy является портируемость — возможность безболезненного переноса ваших проектов с одной платформы на другую. Наша «Змейка» будет работать на платформе Android.
Kivy эффективно использует Cython — язык программирования, сочетающий в себе оптимизированность C++ и синтаксис Python — что положительно сказывается на производительности. Также Kivy активно использует GPU для графических процессов, освобождая CPU для других вычислений.
Рекомендуемые ресурсы для начала работы с Kivy:
Устанавливаем Kivy
Зависимости
Прим. перев. Код проверен на Ubuntu 16.04, Cython 0.25, Pygame 1.9.4.dev0, Buildozer 0.33, Kyvi 1.10.
PricewaterhouseCoopers , Удалённо , По итогам собеседования
Для правильной работы Kivy нам требуется три основных пакета: Cython, pygame и python-dev. Если вы используете Ubuntu, вам также может понадобиться библиотека gstreamer, которая используется для поддержки некоторых видеовозможностей фреймворка.
Устанавливаем зависимости pygame:
Добавляем репозиторий Kivy:
Buildozer
Этот пакет нам понадобится для упрощения процесса установки нашего Android-приложения:
Нам также понадобится Java JDK. И если вы используете 64-битную систему, вам понадобятся 32-битные версии зависимостей.
Устанавливаем Java JDK:
Устанавливаем 32-битные зависимости:
Оно работает?
Прежде чем начать писать нашу «Змейку», давайте проверим, правильно ли у нас все установилось. Иначе в дальнейшем может обнаружиться, что проект не компилируется из-за какого-нибудь недостающего пакета.
Для проверки напишем старый добрый «Hello, world!».
Приступим к созданию проекта. Нужно перейти в рабочую папку и выполнить команду:
Теперь откроем файл с расширением .spec в любом текстовом редакторе и изменим следующие строки:
- имя нашего приложения title = Hello World ;
- название пакета package.name = helloworldapp ;
- домен пакета (нужен для android/ios сборки) package.domain = org.helloworldapp ;
- закомментируйте эти строки, если они ещё не закомментированы:
- строка version = 1.0.0 должна быть раскомментированной.
Создайте файл main.py и добавьте в него следующий код:
Теперь все готово к сборке. Вернемся к терминалу.
Примечание В случае возникновения каких-либо ошибок установите значение log_level = 2 в файле buildozer.spec. Это даст более развернутое описание ошибки. Теперь мы точно готовы приступить к написанию «Змейки».
Прим. перев. Обратите внимание, что в проекте используется один файл и в статье разбираются лишь куски кода из этого файла. Весь исходный код вы можете просмотреть, перейдя по ссылке на страницу проекта в gitHub.
В этой части урока мы напишем игровой движок нашей «Змейки». И под созданием игрового движка подразумевается:
1. Написание классов, которые станут скелетом нашего приложения.
2. Предоставление им правильных методов и свойств, чтобы мы могли управлять ими по своему усмотрению.
3. Соединение всего в основном цикле приложения.
Классы
Теперь давайте разберем нашу игру на составные элементы: змея и игровое поле. Змея состоит из двух основных элементов: головы и хвоста. И надо не забыть, что змее нужно что-то есть.
Таким образом нам потребуется организовать следующую иерархию виджетов:
Мы объявим наши классы в файлах main.py и snake.kv , чтобы отделить дизайн от логики:
Свойства
Теперь, когда мы реализовали классы, можно задуматься о содержимом.
Playground — это корневой виджет. Мы разделим его на сетку. Эта матрица поможет позиционировать и перемещать объекты по полю. Представление каждого дочернего виджета будет занимать одну клетку. Также нужно реализовать возможность сохранения счета и изменения частоты появления фруктов.
И последнее, но не менее важное: нужно реализовать управление вводом, но сделаем мы это в следующем разделе.
Объект змеи не должен содержать ничего, кроме двух ее деталей: головы и хвоста.
Для головы мы должны знать текущее положение и направление движения для правильного графического представления: если змея движется направо — рисуем треугольник повернутый вправо, если змея движется влево — рисуем треугольник повернутый влево.
Позиция и направление будут соответствовать определенным инструкциям рисования. Для рисования треугольника нам нужно шесть точек (две координаты на одну вершину). Эти координаты будут не ячейками сетки, а определенными пикселями на холсте
Наконец, нам надо хранить информацию об объекте, нарисованном на холсте, чтобы удалить его позже (например, для перезапуска игры). Мы добавим логическую переменную, указывающую, должен ли объект быть нарисован на холсте:
Теперь хвост. Он состоит из блоков (изначально трех), занимающих одну ячейку. Когда «Змейка» будет двигаться, мы будем убирать самый последний блок хвоста и добавлять новый на предыдущую позицию головы:
Фрукт
Поведение фрукта похоже на поведение змеиной головы. Нам понадобится отслеживать его позицию, состояние и интервал появления:
В классе SnakeApp будет происходить запуск нашего приложения:
Кое-что еще: нужно задать размеры виджетов. Каждый элемент будет занимать одну ячейку поля. Значит:
- высота виджета = высота поля / количество строк сетки;
- ширина виджета = ширина поля / количество колонок сетки.
Также нам нужно добавить виджет отображающий текущий счет.
Теперь snake.kv выглядит так:
Методы
Начнем с класса змеи. Мы хотим устанавливать ее в начальное положение и получать информацию о том, где она находится и как взаимодействует с объектами поля:
Мы назвали ряд методов. Теперь давайте их реализуем. Начнем с remove() и add_block() :
Теперь работаем с головой. Она будет иметь две функции: move() и remove() :
А что там с фруктами? Мы должны уметь помещать их в заданные координаты и удалять, когда нам это понадобится:
Почти готово, не сдавайтесь! Теперь нужно организовать весь игровой процесс, который будет происходить в классе Playground . Рассмотрим логику игры: она начинается с того, что змея помещается в случайные координаты. Игра обновляется при каждом перемещении змеи. Во время обновлений мы проверяем направление змеи и ее положение. Если змея сталкивается сама с собой или выходит за пределы поля — мы засчитываем поражение и игра начинается сначала.
Как будет осуществляться управление? Когда игрок касается экрана, мы сохраняем координаты касания. Когда палец будет перемещаться, мы будем сравнивать новое положение с исходным. Если позиция будет изменена на 10 % от размера экрана, мы будем определять это как инструкцию и обрабатывать ее:
Основной цикл
Здесь происходят процессы, устанавливающие положение фрукта, управляющие движением змеи и определяющие проигрыш:
Нужно добавить обработчик для события сброса игры:
Теперь мы можем протестировать игру.
Одна важная деталь. Чтобы приложение запустилось с правильным разрешением экрана, нужно сделать так:
И вуаля! Теперь вы можете запустить приложение. Остается только упаковать его с помощью buildozer и загрузить на устройство.
Создаем экраны
В приложении будет два экрана: приветствия и игровой. Также будет всплывающее меню настроек. Сначала мы сделаем макеты наших виджетов в .kv-файле, а потом напишем соответствующие классы Python.
Внешняя оболочка
PlaygroundScreen содержит только игровое поле:
Основной экран будет состоять из трех встроенных виджетов: название приложения, кнопки запуска игры и кнопки вызывающая меню настроек:
Всплывающее окно будет занимать ¾ экрана приветствия. Оно будет содержать виджеты, необходимые для установки параметров, и кнопку «Сохранить».
Классы
На экране приветствия требуется только метод show_popup() , который будет вызываться при нажатии кнопки настроек на главном экране. Нам не нужно определять что-либо еще для кнопки включения игры, потому что она будет использовать способность своего родителя обращаться к диспетчеру экрана:
Теперь нужно сделать так, чтоб экран приветствия показывался при запуске игры, а игра начиналась только тогда, когда будет показано игровое поле:
Также нам нужно подготовить класс окна настроек, иначе привязка будет работать не правильно:
Теперь добавим ScreenManager в приложение и зарегистрируем два экрана:
Теперь нужно сказать кнопкам, что делать, когда на них нажимают:
После проигрыша нужно возвращаться обратно на экран приветствия:
Добавляем настройки
У нас будет всего два параметра:
- Включение/отключение границ. Если границы включены, при выхождении змеи за пределы экрана засчитывается проигрыш. Если границы выключены, змея будет появляться на другой стороне, если выходит за пределы.
- Скорость змеи.
Добавляем необходимые виджеты во всплывающее окно:
Теперь подготовим классы, чтобы они могли изменяться вместе с настройками. Если границы включены, будем рисовать очертание игрового поля. Также добавим возможность изменения частоты обновления:
Изменим всплывающее окно так, чтобы оно могло передавать значения:
Готово. Теперь можно упаковать проект и играть:
Источник