EXL's Developer Blog
Translate site on my language:

Каталог статей
Меню сайта

Категории раздела

Поиск

Друзья сайта
  • MotoFan.Ru
  • Dingoo A320.Русский Ресурс
  • Motorola Gaming site
  • Android Games Development
  • ROKR E2 Developments

  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Приветствую Вас, Гость · RSS 17.08.2017, 19:37

    Главная » Статьи » Cтатьи

    Python 2.5 + pyGame 0.9.1

    Вики: Python - высокоуровневый язык программирования общего назначения с акцентом на производительность разработчика и читаемость кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.
    Python поддерживает несколько парадигм программирования, в том числе структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Питоне организовывается в функции и классы, которые могут объединяться в модули (которые в свою очередь могут быть объединены в пакеты).

    Pygame - это кроссплатформенная библиотека языка Python, предназначенная для написания компьютерных игр и мультимедиа приложений. Pygame базируется на библиотеке SDL.
    Изначально Pygame был написан Питом Шиннерсом (Pete Shinners). Начиная примерно с 2004/2005 года поддерживается и развивается сообществом свободного программного обеспечения.

    От себя: Python - достаточно лёгкий и удобный язык для понимания и изучения. То что, написано на питоне воспринимается достаточно легко.
    Теперь у любителей этого языка появилась возможность запускать и портировать pyGame игры с сайта pygame.org
    Огромное спасибо rock88 за подсказку с компиляцией.

    Установка:
    1. Качаем архив games.7z, распаковываем в корень карты памяти.
    2. Устанавливаем нужные пакеты, запускаем.

    Примечания:
    - Архив games.7z содержит кроме питона и pyGame так же и SDL (и др. необходимые) библиотеки, собранные для ZN5. Если вы устанавливаете питон + pyGame на другую модель телефона (Z6/E8/EM30/VE66/V8 etc.) То сохраните свою папку games/lib и не заменяйте её той, что с архива.
    - В архиве много файлов, кидать лучше через картридер, в противном случае кидаться будет долго.
    - Если у вас что-то не получается, не стесняйтесь спросить в этой теме.

    Для разработчиков:
    Рассмотрим пример портирования на игре PyForce.
    PyForce - это скроллшутер написанный на питоне для телефонов Nokia под Symbian OS.
    1. Скачиваем исходный код игры со страницы (Source), распаковываем. Видим папки и файлы:
    - lib - исходный код игры, либа
    - res - ресурсы, датафайлы
    - run.pyw - файл для запуска игры.
    2. Создаём файл run.sh и кидаем его в папку с игрой, структура скрипта run.sh:

    Code
    #!/bin/sh
    mypath=${0%/*}
    export HOME=$mypath
    LIBDIR1=/ezxlocal/download/mystuff/games/lib
    LIBDIR2=/mmc/mmca1/games/lib
    LIBDIR3=$mypath/lib
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBDIR1:$LIBDIR2:$LIBDIR3
    export SDL_QT_INVERT_ROTATION=1
    PYTHONHOME=/mmc/mmca1/games/python
    export PYTHONHOME
    PYTHONPATH=${PYTHONHOME}/lib/python2.5/site-packages:$PYTHONPATH
    PYTHONPATH=${PYTHONHOME}/lib/python2.5:$PYTHONPATH
    PYTHONPATH=${PYTHONHOME}:$PYTHONPATH
    export PYTHONPATH
    LD_LIBRARY_PATH=${PYTHONHOME}/extras:${LD_LIBRARY_PATH}
    export LD_LIBRARY_PATH
    cd $mypath

    exec $PYTHONHOME/bin/python.elf $mypath/run.pyw

    3. Кидаем папку на телефон, например в каталог mgxbox. Подключаемся по телнету, пробуем запустить игру. В телнет кидает такой лог:

    Code
    /mmc/mmca1/mgxbox/pyForce/run.sh
    hide splash: -1
    map framebuffer at 0x40de8000 (size 262144)
    QT Show: 3345 setAltitude and requestFocus, winId:1821, fget:1, alt:0, fixed:1, order:1

    psyco NOT installed, program may run slower
    Traceback (most recent call last):
      File "/mmc/mmca1/mgxbox/test/run.pyw", line 35, in <module>
      game = PyForce()
      File "lib/pyforce.py", line 31, in __init__
      self.screen = pygame.display.set_mode(RESOLUTION)
    pygame.error: Couldn't create screen bitmap
    ~SDL_QWin(): done
    QT Show: 3345 requestFocus: lost, winId:1821


    Где видны следующие ошибки:
    1). psyco NOT installed, program may run slower - Компилятор psyco не установлен, программа может выполняться медленно. (Игнорируем эту ошибку, psyco компилятор под x86 архитектуру)
    2). self.screen = pygame.display.set_mode(RESOLUTION)
    pygame.error: Couldn't create screen bitmap - Именно с этой ошибкой нам и нужно бороться.
    Это ошибка создания экрана, связанная с разрешением экрана.
    Разрешение устанавливается 31-ой строкой self.screen = pygame.display.set_mode(RESOLUTION) в файле lib/pyforce.py. Ищем слово RESOLUTION по всем исходникам игры. Для этого можно использовать удобный текстовой редактор Notepad++. Находим в файле lib/const.py RESOLUTION = (360, 480) и правим на
    RESOLUTION = (320, 240) для landscape режима и RESOLUTION = (240, 320) для портретного.
    Во многих играх разрешение может устанавливаться как pygame.display.set_mode((640, 480))
    В любом случае чтобы поменять разрешение ищем строку pygame.display.set_mode
    Для некоторых игр придётся ещё править размеры картинок (Если игра под 640*480 - уменьшать в 2 раза, если 800*600 - в 2,5 раза.)
    Для данной игры это не требуется.
    После того, как исправили разрешение, пробуем запустить игру ещё раз.
    4. Игра теперь отлично запускается, но нужно настроить управление. Т.к отсутствует кнопка огонь.
    Ищем в исходниках по слову K_, находим следующее:
    Code
    lib\battlefield.py
    134 - if key[K_UP]: # Движение корабля вверх
    136 - if key[K_DOWN]: # Движение корабля вниз
    138 - if key[K_LEFT]: # Движение корабля влево
    140 - if key[K_RIGHT]: # Движение корабля вправо
    142 - if key[K_SPACE]: # Огонь
    lib\pyforce.py
    52 - if event.key == K_ESCAPE: # Выход

    У нас нет клавиши, SPACE, поэтому заменяем if key[K_SPACE]: на if key[K_RETURN]: для центра джойстика. Или на if (key[K_RETURN]) or (key[K_PLUS]): для центра джойстика и клавиши Громкость "+".
    Список клавиш и их соответствие:

    Code

      K_0 0
      K_1 1
      K_2 2
      K_3 3
      K_4 4
      K_5 5
      K_6 6
      K_7 7
      K_8 8
      K_9 9
      K_ASTERISK *  
      K_HASH #
      K_BACKSPACE (<-)
      K_TAB Send
      K_RETURN Center joy
      K_PAUSE Camera
      K_ESCAPE Red key (HangUp)
      K_F9 Left Soft
      K_F11 Right Soft
      K_PLUS Volume "+"
      K_MINUS Volume "-"
      K_UP up arrow
      K_DOWN down arrow
      K_RIGHT right arrow
      K_LEFT left arrow

    5. Сохраняем все сделанные нами изменения, кидаем на флешку и запускаем. Если всё отлично работает - делаем MGX пакет.
    6. Пример скрипта, который нужно использовать для запуска:

    Code
    #!/bin/sh
    mypath=${0%/*}
    export HOME=$mypath
    LIBDIR1=/ezxlocal/download/mystuff/games/lib
    LIBDIR2=/mmc/mmca1/games/lib
    LIBDIR3=$mypath/lib
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBDIR1:$LIBDIR2:$LIBDIR3
    export SDL_QT_INVERT_ROTATION=1
    PYTHONHOME=/mmc/mmca1/games/python
    export PYTHONHOME
    PYTHONPATH=${PYTHONHOME}/lib/python2.5/site-packages:$PYTHONPATH
    PYTHONPATH=${PYTHONHOME}/lib/python2.5:$PYTHONPATH
    PYTHONPATH=${PYTHONHOME}:$PYTHONPATH
    export PYTHONPATH
    LD_LIBRARY_PATH=${PYTHONHOME}/extras:${LD_LIBRARY_PATH}
    export LD_LIBRARY_PATH
    cd $mypath

    exec $PYTHONHOME/bin/python.elf $mypath/my_prog.py

    где my_prog.py - ваша запускаемая программа на питоне.
    Для pyGame следует использовать python.elf, т.к в нём прописаны нужные иниты SDL библиотеки.
    Для скриптов используйте просто python.
     Пакет pyForce можно скачать на сайте. Приветствуются любые вопросы по теме! 

    Скачать:

    Окружение от 16.01.2011

    Категория: Cтатьи | Добавил: EXL (16.01.2011)
    Просмотров: 792 | Рейтинг: 5.0/2
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Copyright EXL © 2017
    Сделать бесплатный сайт с uCoz