Skip to content

Latest commit

 

History

History
737 lines (526 loc) · 40.1 KB

README.uk.md

File metadata and controls

737 lines (526 loc) · 40.1 KB

Downloads GitHub Repo stars GitHub forks GitHub Sponsors

ko-fi

[ English | 中文 | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | Русский | Türkçe | Українська ]

Pyxel – це ігровий двигун для Python в стилі ретро.

Завдяки своїм простим специфікаціям, натхненними ретро-ігровими консолями (таким як можливість відображення лише 16-ти кольорів та відтворення лише 4-ох звуків одночасно), ви можете сміливо насолоджуватися створенням ігор у стилі піксель-арт.

Мотивацією для розвитку Pyxel є відгуки користувачів. Будь ласка, дайте Pyxel зірку на GitHub!

Специфікації та API Pyxel натхненні PICO-8 та TIC-80.

Pyxel має відкритий вихідний код і є безкоштовним у використанні. Почнемо створювати ретро-ігри за допомогою Pyxel!

Специфікації

  • Підтримка запуску на Windows, Mac, Linux, та Web
  • Для опису логіки використовується мова програмування Python
  • 16-ти кольорова палітра
  • 3 сховища зображень розміром 256x256 пікселів
  • 8 карт тайлів розміром 256x256 пікселів
  • 4 канали з 64 визначеними звуками
  • 8 музичних композицій, які можуть комбінувати довільні звуки
  • Підтримка введення з клавіатури, миші та ґеймпада
  • Редактор зображень та звуків

Кольорова палітра

Як інсталювати Pyxel

Windows

Після інсталяції Python3 (версії 3.8 або вище), виконайте наступну команду:

pip install -U pyxel

Якщо ви встановлюєте Python за допомогою офіційного інсталятора, будь ласка, встановіть прапорець Add Python 3.x to PATH, щоб увімкнути команду pyxel.

Mac

Після інсталяції Homebrew, виконайте наступні команди:

brew install pipx
pipx ensurepath
pipx install pyxel

Щоб оновити версію після інсталяції Pyxel, виконайте команду pipx upgrade pyxel.

Linux

Після інсталяції пакету SDL2 (libsdl2-dev для Ubuntu), Python3 (версії 3.8 або вище), та python3-pip, виконайте наступну команду:

sudo pip3 install -U pyxel

Якщо вищевказане не допомогло, спробуйте самостійну збірку відповідно до інструкцій в Makefile.

Web

Веб-версія Pyxel не вимагає інсталяції Python або Pyxel і працює на ПК, а також на смартфонах і планшетах із підтримуваними веб-браузерами.

Для отримання конкретних вказівок, будь ласка, зверніться до цієї сторінки.

Спробуйте приклади Pyxel

Після інсталяції Pyxel, приклади Pyxel будуть скопійовані до поточного каталогу за допомогою наступної команди:

pyxel copy_examples

Перелік прикладів, які будуть скопійовані:

01_hello_pyxel.py Найпростіша програма Демо Code
02_jump_game.py Гра в стрибки з файлом ресурсів Pyxel Демо Code
03_draw_api.py Демонстрація API для малювання Demo Code
04_sound_api.py Демонстрація API для роботи зі звуками Demo Code
05_color_palette.py Палітра кольорів Demo Code
06_click_game.py Гра клацання мишкою Demo Code
07_snake.py Гра «Змійка» з фоновою музикою Demo Code
08_triangle_api.py Демонстрація API по малюванню трикутників Demo Code
09_shooter.py Гра в жарні «Shoot 'em up» з переходом між екранами Demo Code
10_platformer.py Гра-платформер із бічною прокруткою та картою Demo Code
11_offscreen.py Позакадровий рендеринг за допомогою класу Image Demo Code
12_perlin_noise.py Анімація шуму Перліна Demo Code
13_bitmap_font.py Малювання растрового шрифту Demo Code
14_synthesizer.py Синтезатор, який використовує функції розширення аудіо Demo Code
15_tiled_map_file.py Завантаження та малювання файлу карти тайлів (.tmx) Demo Code
16_transform.py Обертання та масштабування зображення Demo Code
99_flip_animation.py Анімація з функцією flip (не для web-платформ) Demo Code
30SecondsOfDaylight.pyxapp Гра-переможець 1-го Pyxel Jam від Adam Demo Code
megaball.pyxapp Аркадна гра з фізикою м'яча від Adam Demo Code
8bit-bgm-gen.pyxapp Генератор фонової музики від frenchbread Demo Code

Приклади можуть бути запущені за допомогою наступних команд:

cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30SecondsOfDaylight.pyxapp

Як використовувати Pyxel

Створення програми Pyxel

Після імпортування модуля Pyxel у ваш скрипт Python спочатку вкажіть розмір вікна за допомогою функції init, а потім запустіть програму Pyxel за допомогою функції run.

import pyxel

pyxel.init(160, 120)

def update():
    if pyxel.btnp(pyxel.KEY_Q):
        pyxel.quit()

def draw():
    pyxel.cls(0)
    pyxel.rect(10, 10, 20, 20, 11)

pyxel.run(update, draw)

Параметрами функції run є функція update для оновлення кожного кадру та функція draw для малювання екрана, коли це необхідно.

У реальній програмі рекомендується обернути код Pyxel у клас, як це показано нижче:

import pyxel

class App:
    def __init__(self):
        pyxel.init(160, 120)
        self.x = 0
        pyxel.run(self.update, self.draw)

    def update(self):
        self.x = (self.x + 1) % pyxel.width

    def draw(self):
        pyxel.cls(0)
        pyxel.rect(self.x, 0, 8, 8, 9)

App()

Під час створення простої графіки без анімації можна використовувати функцію show, щоб зробити код більш лаконічним.

import pyxel

pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()

Запуск програми Pyxel

Створений скрипт Python можна виконати за допомогою команди python:

python PYTHON_SCRIPT_FILE

Його також можна запустити за допомогою команди pyxel run:

pyxel run PYTHON_SCRIPT_FILE

Крім того, команда pyxel watch дозволяє відстежувати зміни у вказаному каталозі, автоматично перезапускаючи програму при виявленні змін:

pyxel watch WATCH_DIR PYTHON_SCRIPT_FILE

Моніторинг каталогів можна зупинити за допомогою комбінації клавіш Ctrl(Command)+C.

Спеціальні клавіші керування

Під час роботи програми Pyxel ви можете користуватись наступними спеціальними клавішами керування:

  • Esc
    Закрити програму
  • Alt(Option)+1
    Зберегти знімок екрана на робочий стіл
  • Alt(Option)+2
    Скинути час початку відеозапису екрану
  • Alt(Option)+3
    Зберегти відеозапис екрану на робочий стіл (до 10 секунд)
  • Alt(Option)+9
    Перемкнути режим екрану (чіткий/плавний/ретро)
  • Alt(Option)+0
    Перемкнути монітор продуктивності (кадрів в секунду, час на update, час на draw)
  • Alt(Option)+Enter
    Перемкнути повноекранний режим
  • Shift+Alt(Option)+1/2/3
    Зберегти відповідне сховище зображень на робочий стіл
  • Shift+Alt(Option)+0
    Зберегти поточну палітру кольорів на робочий стіл

Як створювати ресурси

Вбудований редактор Pyxel може створювати зображення та звуки, які використовуються в програмі Pyxel.

Він запускається за допомогою наступної команди:

pyxel edit PYXEL_RESOURCE_FILE

Якщо вказаний файл ресурсів Pyxel (.pyxres) існує, файл завантажується, а якщо він не існує, створюється новий файл із зазначеною назвою. Якщо файл ресурсу пропущено, його назва буде my_resource.pyxres.

Після запуску редактора Pyxel перемикання між файлами відбувається шляхом перетягування іншого файлу ресурсу.

Створений файл ресурсу можна завантажити за допомогою функції load.

Вбудований редактор Pyxel має наступні режими редагування.

Редактор зображень

Режим редагування сховищ зображень.

Перетягніть файл зображення (PNG/GIF/JPEG) у редактор зображень, щоб завантажити зображення в поточне обране сховище зображень.

Редактор карт тайлів

Режим редагування карт тайлів, в якому зображення зі сховища зображень упорядковуються у вигляді тайлів.

Перетягніть файл TMX (файл карти тайлів) у редактор карти тайлів, щоб завантажити його шар у порядку малювання, який відповідає поточному вибраному номеру карти тайлів.

Редактор звуків

Режим редагування звуків.

Редактор музики

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

Інші методи створення ресурсів

Зображення Pyxel і карти тайлів також можна створювати за допомогою наступних методів:

  • Створюйте зображення зі списку рядків за допомогою функції Image.set або функції Tilemap.set.
  • Завантажуйте файл зображення (PNG/GIF/JPEG) у палітру Pyxel за допомогою функції Image.load.

Звуки Pyxel також можна створювати наступним способом:

  • Створюйте звук із рядків за допомогою функції Sound.set або Music.set.

Будь ласка, зверніться до довідника API (нижче), щоб дізнатися про використання цих функцій.

Як розповсюджувати програми

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

Створіть файл програми Pyxel (.pyxapp) за допомогою команди pyxel package:

pyxel package APP_DIR STARTUP_SCRIPT_FILE

Якщо програма має включати ресурси або додаткові модулі, розмістіть їх у каталозі програми.

Створений файл програми можна запустити за допомогою команди pyxel play:

pyxel play PYXEL_APP_FILE

Файл програми Pyxel також можна перетворити на виконуваний файл EXE або файл HTML за допомогою команд pyxel app2exe або pyxel app2html.

Довідник API

Система

  • width, height
    Ширина та висота екрану.

  • frame_count
    Кількість відмальованих кадрів.

  • init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
    Ініціалізувати програму Pyxel з введеними розмірами екрану (width, height). Як параметри можна вказати: заголовок вікна за допомогою title, частоту кадрів за допомогою fps, ключ для виходу з програми за допомогою quit_key, масштаб відображення за допомогою display_scale, масштаб захоплення екрану за допомогою capture_scale, максимальний час відеозапису екрану за допомогою capture_sec.
    напр. pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, capture_sec=0)

  • run(update, draw)
    Запустити програму Pyxel, викликати функцію update для оновлення кадрів і функцію draw для малювання.

  • show()
    Показати екран і чекати, доки не буде натиснуто клавішу Esc.

  • flip()
    Оновлення екрана на один кадр. Програма завершує роботу після натискання клавіші Esc. Ця функція не працює у web-версії.

  • quit()
    Вийти із програми Pyxel.

Ресурс

  • load(filename, [excl_images], [excl_tilemaps], [excl_sounds], [excl_musics])
    Завантажує файл ресурсів (.pyxres). Якщо параметр має значення True, ресурс не буде завантажено. Якщо файл палітри (.pyxpal) з такою ж назвою існує в тому самому місці, що й файл ресурсів, колір відображення палітри також буде змінено. Файл палітри — це шістнадцятковий запис кольорів відображення (наприклад, 1100FF), розділених символами нового рядка. Файл палітри також можна використовувати для зміни кольорів, які відображаються в редакторі Pyxel.

Введення

  • mouse_x, mouse_y
    Поточна позиція курсора миші.

  • mouse_wheel
    Поточне значення колеса миші.

  • btn(key)
    Повертає True, якщо клавіша key натиснута, інакше повертає False. (Список визначень клавіш)

  • btnp(key, [hold], [repeat])
    Повертає True, якщо в цьому кадрі натиснуто клавішу key, інакше повертає False. Якщо вказано hold і repeat, значення True буде повернено в інтервалі кадрів repeat, якщо клавіша key утримується натиснутою більше ніж hold кадрів.

  • btnr(key)
    Повертає True, якщо клавішу key відпущено в цьому кадрі, інакше повертає False.

  • mouse(visible)
    Якщо visible має значення True, відображається курсор миші. Якщо False, приховується. Навіть якщо курсор миші не відображається, його положення оновлюється.

Графіка

  • colors
    Список кольорів відображення палітри. Колір відображення визначається 24-бітним числовим значенням. Використовуйте colors.from_list і colors.to_list, щоб напряму призначати та отримувати списки Python.
    напр. old_colors = pyxel.colors.to_list(); pyxel.colors.from_list([0x111111, 0x222222, 0x333333]); pyxel.colors[15] = 0x112233

  • images
    Список сховищ зображень (0-2). (Див. клас Image)
    напр. pyxel.images[0].load(0, 0, "title.png")

  • tilemaps
    Список карт тайлів (0-7). (Див. клас Tilemap)

  • clip(x, y, w, h)
    Встановіть область малювання екрану від координат (x, y) до ширини w і висоти h. Скиньте область малювання на весь екран за допомогою clip().

  • camera(x, y)
    Змінити координати верхнього лівого кута екрана на (x, y). Скиньте координати верхнього лівого кута на (0, 0) за допомогою camera().

  • pal(col1, col2)
    Замінити колір col1 на col2 під час малювання. pal() для повернення до початкової палітри.

  • dither(alpha)
    Застосувати дизерінг (псевдопрозорість) під час малювання. Встановіть alpha в діапазоні 0.0-1.0, де 0.0 — прозорий, а 1.0 — непрозорий.

  • cls(col)
    Заповнити/очистити екран із кольоровим col.

  • pget(x, y)
    Отримати колір пікселя в координатах (x, y).

  • pset(x, y, col)
    Намалювати піксель кольору col в координатах (x, y).

  • line(x1, y1, x2, y2, col)
    Намалювати лінію кольору col від координат (x1, y1) до (x2, y2).

  • rect(x, y, w, h, col)
    Намалювати прямокутник з шириною w, висотою h та кольором col від координат (x, y).

  • rectb(x, y, w, h, col)
    Намалювати контур прямокутника з шириною w, висотою h та кольором col від координат (x, y).

  • circ(x, y, r, col)
    Намалювати коло з радіусом r та кольором col в координатах (x, y).

  • circb(x, y, r, col)
    Намалювати контур кола з радіусом r та кольором col в координатах (x, y).

  • elli(x, y, w, h, col)
    Намалювати еліпс з шириною w, висотою h та кольором col від координат (x, y).

  • ellib(x, y, w, h, col)
    Намалювати контур еліпса з шириною w, висотою h та кольором col від координат (x, y).

  • tri(x1, y1, x2, y2, x3, y3, col)
    Намалювати трикутник із вершинами в координатах (x1, y1), (x2, y2), (x3, y3) та кольором col.

  • trib(x1, y1, x2, y2, x3, y3, col)
    Намалювати контур трикутника із вершинами в координатах (x1, y1), (x2, y2), (x3, y3) та кольором col.

  • fill(x, y, col)
    Заповнити область, з’єднану тим самим кольором, що й (x, y), кольором col.

  • blt(x, y, img, u, v, w, h, [colkey], [rotate], [scale])
    Скопіювати область розмірами (w, h) з (u, v) сховища зображень img(0-2) до координат (x, y). Якщо параметри w та/або h мають від'ємне значення, область буде змінено горизонтально та/або вертикально. Якщо вказано colkey, область буде розглядатися як прозорий колір. Якщо вказано rotate(в градусах), scale(1.0=100%) або обидва параметри, буде застосовано відповідне перетворення.

  • bltm(x, y, tm, u, v, w, h, [colkey], [rotate], [scale])
    Скопіювати область розмірами (w, h) з (u, v) карти тайлів tm(0-7) до координат (x, y). Якщо параметри w та/або h мають від'ємне значення, область буде змінено горизонтально та/або вертикально. Якщо вказано colkey, область буде розглядатися як прозорий колір. Якщо вказано rotate(в градусах), scale(1.0=100%) або обидва параметри, буде застосовано відповідне перетворення. Розмір тайлу становить 8x8 пікселів, і він зберігається в карті тайлів як кортеж (tile_x, tile_y).

  • text(x, y, s, col)
    Намалювати рядок s кольором col в координатах (x, y).

Аудіо

  • sounds
    Список звуків (0-63). (Див. клас Image)
    напр. pyxel.sounds[0].speed = 60

  • musics
    Перелік музичних композицій (0-7). (Див. клас Music)

  • play(ch, snd, [tick], [loop], [resume])
    Відтворити звук snd (0-63) на каналі ch (0-3). Якщо параметр snd це список, звуки відтворюватимуться по порядку. Початкову позицію відтворення можна вказати за допомогою tick (1 tick = 1/120 секунди). Якщо параметр loop має значення True, виконується циклічне відтворення. Щоб відновити попередній звук після завершення відтворення, встановіть для параметра resume значення True.

  • playm(msc, [tick], [loop])
    Відтворити музику msc (0-7). Початкову позицію відтворення можна вказати за допомогою tick (1 tick = 1/120 секунди). Якщо параметр loop має значення True, виконується циклічне відтворення.

  • stop([ch])
    Зупинити відтворення вказаного каналу ch (0-3). stop() без параметрів, щоб зупинити відтворення всіх каналів.

  • play_pos(ch)
    Отримати позицію відтворення звуку каналу ch(0-3) у вигляді кортежу (sound no, note no). Повертає None, коли відтворення зупинено.

Математика

  • ceil(x)
    Повертає найменше ціле число, яке більше або рівне x.

  • floor(x)
    Повертає найбільше ціле число, яке менше або рівне x.

  • sgn(x)
    Повертає 1, якщо x є додатнім числом; 0, коли воно дорівнює нулю; -1, коли воно є від’ємним числом.

  • sqrt(x)
    Повертає квадратний корінь з числа x.

  • sin(deg)
    Повертає синус з deg градусів.

  • cos(deg)
    Повертає косинус з deg градусів.

  • atan2(y, x)
    Повертає арктангенс з y/x у градусах.

  • rseed(seed)
    Встановити початковий параметр генератора випадкових чисел.

  • rndi(a, b)
    Повертає випадкове ціле число, яке більше або дорівнює a і менше або дорівнює b.

  • rndf(a, b)
    Повертає випадковий десятковий дріб, яке більше або дорівнює a і менше або дорівнює b.

  • nseed(seed)
    Встановити початковий параметр шуму Перліна.

  • noise(x, [y], [z])
    Повертає значення шуму Перліна для вказаних координат.

Клас Image

  • width, height
    Ширина та висота зображення.

  • set(x, y, data)
    Встановити зображення в координати (x, y) за допомогою списку рядків.
    напр. pyxel.images[0].set(10, 10, ["0123", "4567", "89ab", "cdef"])

  • load(x, y, filename)
    Завантажити файл зображення (PNG/GIF/JPEG) в координати (x, y).

  • pget(x, y)
    Отримати колір пікселя з координат (x, y).

  • pset(x, y, col)
    Намалювати піксель кольору col в координати (x, y).

Клас Tilemap

  • width, height
    Ширина та висота карти тайлів.

  • imgsrc
    Сховище зображень (0-2), на який посилається карта тайлів.

  • set(x, y, data)
    Встановити карту тайлів в координати (x, y) за допомогою списку рядків.
    напр. pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"])

  • load(x, y, filename, layer)
    Завантажити шар у порядку малювання layer(0-) із файлу TMX (файл карти тайлів) в координатах (x, y).

  • pget(x, y)
    Отримати тайл з координат (x, y). Тайл — це кортеж (tile_x, tile_y).

  • pset(x, y, tile)
    Намалювати tile в координатах (x, y). Тайл — це кортеж (tile_x, tile_y).

Клас Sound

  • notes
    Список нот (0-127). Чим більше число, тим вище висота тону, і при 33 він стає 'A2'(440Hz). Решта становить -1.

  • tones
    Список тонів (0:Трикутник / 1:Квадрат / 2:Пульс / 3:Шум)

  • volumes
    Список гучностей (0-7)

  • effects
    Список ефектів (0:Немає / 1:Слайд / 2:Вібрато / 3:Згасання / 4:Напівзгасання / 5:Згасання на чверть)

  • speed
    Швидкість відтворення. 1 є найшвидшим, і чим більше число, тим повільніше швидкість відтворення. На 120 тривалість однієї ноти стає 1 секундою.

  • set(notes, tones, volumes, effects, speed)
    Встановити ноти, тони, гучність і ефекти за допомогою рядка. Якщо тони, гучність та довжина ефектів коротші за ноти, вони повторюються з початку.

  • set_notes(notes)
    Встановити ноти за допомогою рядка, складеного з 'CDEFGAB'+'#-'+'01234' або 'R'. Регістр та пробіли ігноруються.
    напр. pyxel.sounds[0].set_notes("G2B-2D3R RF3F3F3")

  • set_tones(tones)
    Встановити тони за допомогою рядка, складеного з 'TSPN'. Регістр та пробіли ігноруються.
    напр. pyxel.sounds[0].set_tones("TTSS PPPN")

  • set_volumes(volumes)
    Встановити гучності за допомогою рядка, складеного з '01234567'. Регістр та пробіли ігноруються.
    напр. pyxel.sounds[0].set_volumes("7777 7531")

  • set_effects(effects)
    Встановити ефекти за допомогою рядка, складеного з 'NSVFHQ'. Регістр та пробіли ігноруються.
    напр. pyxel.sounds[0].set_effects("NFNF NVVS")

Клас Music

  • seqs
    Двовимірний список звуків (0-63) з кількістю каналів.

  • set(seq0, seq1, seq2, ...)
    Встановити списки звуку (0-63) каналів. Якщо вказано порожній список, цей канал не буде використовуватися для відтворення.
    напр. pyxel.musics[0].set([0, 1], [], [3])

Розширені API

Pyxel має "розширені API", які не згадуються в цьому довіднику, оскільки вони «можуть заплутати користувачів» або «вимагають спеціальних знань для використання».

Якщо ви в своїх навичках, спробуйте створити дивовижні роботи, використовуючи це як підказку!

Як внести свій вклад в розвиток проєкту?

Повідомляйте про проблеми та можливі покращення

Використовуйте систему відстеження проблем, щоб надсилати звіти про помилки та запити щодо функцій/розширень. Перш ніж надсилати нову проблему, переконайтеся, що немає аналогічної відкритої проблеми.

Ручне тестування

Щиро дякую всім, хто вручну тестує код і повідомляє про помилки чи пропозиції щодо покращення в системі відстеження проблем!

Подавання pull-запитів

Патчі/виправлення приймаються у формі pull-запитів на злиття. Переконайтеся, що проблема, яка стосується pull-запиту на злиття, відкрита в системі відстеження проблем.

Надісланий pull-запит вважатиметься опублікованим під ліцензією MIT License.

Інша інформація

Ліцензія

Pyxel знаходиться під ліцензією MIT License. Pyxel можна використовувати у власному програмному забезпеченні за умови, що всі копії програмного забезпечення або його значні частини містять копію умов ліцензії MIT License, а також повідомлення про авторські права.

Шукаємо спонсорів!

Pyxel шукає спонсорів на GitHub Sponsors. Розгляньте можливість спонсорування Pyxel для подальшого обслуговування та додавання функцій. Спонсорам доступна можливість консультації щодо Pyxel. Будь ласка, перегляньте деталі тут.