====== Pyxel ====== Biblioteca de [[informatica:programacion:python|Python]] para desarrollar juegos retro. Inspirado en consolas retro, aplica varias restricciones como una paleta de 16 colores y 4 canales de audio. * [[https://github.com/kitao/pyxel|Repositorio de código]] ===== Características ===== * Multiplataforma (Windows, Mac, Linux y web) * Programable con Python (aunque está hecho en Rust) * Paleta de 16 colores * 3 bancos de imágenes de 256x256 * 8 tilemaps de 256x256 * 4 canales con 64 sonidos diferentes * 8 pistas de música combinando cualquier sonido * Compatible con teclado, ratón y mando * Herramientas para la edición de imágenes y sonidos * Bancos, canales y colores extensibles por el usuario ===== Instalación ===== En Linux, sería de la siguiente manera: sudo pip3 install -U pyxel Necesario el paquete SDL2 (''libsdl2-dev'' en Ubuntu), Python3 (version 3.8 o superior), y ''python3-pip'' En Arch Linux, está disponible mediante el paquete ''python-pyxel'', en AUR. ===== Hola, mundo ===== Ejemplo más sencillo que muestra un texto por pantalla: import pyxel class App: def __init__(self): pyxel.init(160,120,title="Hello, world") pyxel.run(self.update, self.draw) def update(self): # Se ejecutará 60 veces por segundo (FPS) if pyxel.btnp(pyxel.KEY_Q): pyxel.quit() def draw(self): pyxel.cls(0) pyxel.text(55, 41, "Hello, world!", 5) App() Si guardamos el fichero como ''main.py'', lo podríamos ejecutar con: pyxel run main.py ==== pyxel.init ==== Esta función inicializa el motor de Pyxel y genera la ventana. pyxel.init(160,120,title="Hello, world") La anterior instrucción crea una ventana de 160 x 120 pixeles con el título //Hello, world//. Firma de la función: init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec]) * ''width'': anchura de la pantalla. * ''height'': altura de la pantalla. * ''title'': título de la ventana. * ''fps'': frames por segundo. * ''quit_key'': tecla para cerrar la aplicación. * ''display_scale'': * ''capture_scale'' * ''capture_sec'': duración máxima (segundos) de la captura de vídeo. ==== pyxel.run ==== Esta función inicia la aplicación Pyxel. Necesita recibir por parámetro 2 funciones: * ''update'': actualiza los valores del juego (controles, física, etc) en cada //frame//. * ''draw'': dibuja elementos en pantalla pyxel.run(self.update, self.draw) Por defecto, la función ''update'' se ejecuta 30 veces por segundo. ===== API ===== Todas las funciones disponibles de la API de Pyxel se pueden consultar en: * [[https://github.com/kitao/pyxel?tab=readme-ov-file#api-reference|API Reference]] ===== Ejecutar una aplicación ===== Al tratarse de scripts en Python, los juegos hechos con Pyxel se pueden lanzar de la siguiente manera: python mijuego.py También puede ejecutarse con el comando ''pyxel run'': pyxel run mijuego.py Si queremos que Pyxel esté pendiente de los cambios en un directorio y relance el programa cuando esto suceda: pyxel watch ==== Controles durante la ejecución de la aplicación ==== ^ Tecla ^ Descripción ^ | Esc | Cierra la aplicación | | Alt + 1 | Guarda una captura de pantalla en el escritorio | | Alt + 2 | Reinicia el tiempo de inicio de grabación de una captura de vídeo | | Alt + 3 | Guarda una captura de vídeo en el escritorio (de 10 segundos) | | Alt + 8 | Alterna el escalado de pantalla | | Alt + 9 | Cambia entre modos de pantalla (Crisp/Smooth/Retro) | | Alt + 0 | Alterna el monitor de rendimiento (fps/update time/draw time) | | Alt + Enter | Alterna pantalla completa | | Shift + Alt + 1 | Guarda el banco de imágenes 0 al escritorio | | Shift + Alt + 2 | Guarda el banco de imágenes 1 al escritorio | | Shift + Alt + 3 | Guarda el banco de imágenes 2 al escritorio | | Shift + Alt + 0 | Guarda la paleta de colores actual en el escritorio | ===== Distribuir una aplicación ===== ==== Paquete Pyxel (pyxapp) ==== Pyxel dispone de un formato propio de distribución multiplataforma. Se crea de la siguiente manera: pyxel package Tanto los ficheros con el código como los recursos estarán contenidos en un único fichero. El paquete creado se puede ejecutar con: pyxel play ==== Ejecutable Windows ==== pyxel app2exe Utiliza [[https://pyinstaller.org/en/stable/|PyInstaller]] para crear el ejecutable ==== Fichero HTML ==== pyxel app2html El fichero ''.html'' resultante podremos abrirlo con cualquier navegador y el juego se ejecutará en él. Pyxel utiliza [[https://pyodide.org/en/stable/|Pyodide]] para que código Python se pueda ejecutar en un navegador ===== Pyxel Editor: editor de recursos ===== Pyxel incluye un editor visual desde el que podremos crear recursos: * Imágenes (sprites) * Tilemap (mapas) * Efectos de sonido * Música Para abrir este editor: pyxel edit Si no indicamos ningún nombre de fichero, se creará uno con el nombre ''my_resource.pyxres''. ==== Editor de imágenes ==== El editor tiene 3 bancos de imágenes (0, 1, 2) con lo que podremos guardar hasta 3 imágenes de 256x256. También se puede arrastrar una imagen (PNG, GIF o JPEG) y se mostrará en un banco de imágenes del editor. ==== Editor de mapas ==== El editor de //tilemaps// nos permite hacer mosaicos que luego se utilizarán para crear mapas en el juego. Podemos hacer mapas a partir de los elementos que hay en los bancos de imágenes. Podemos tener hasta 7 mapas usando los 3 bancos de imágenes. ==== Editor de sonidos ==== Permite generar hasta 64 sonidos diferentes. Los sonidos son MIDI y se pueden añadir efectos sobre los sonidos. ===== Colores ===== Por defecto, Pyxel soporta 16 colores que están representados por números enteros (del 0 al 15), pero también se pueden usar constantes definidas en este fichero: https://github.com/kitao/pyxel/blob/main/python/pyxel/__init__.pyi Por ejemplo: ^ Color ^ Número ^ Uso con Pyxel ^ | Negro | 0 | ''pyxel.COLOR_BLACK'' | | Blanco | 7 | ''pyxel.COLOR_WHITE'' | ===== Teclas ===== Se pueden consultar la definición de las teclas, entre otras cosas, en este fichero: https://github.com/kitao/pyxel/blob/main/python/pyxel/__init__.pyi Por ejemplo: ^ Tecla ^ Uso con Pyxel ^ | A | ''KEY_A'' | | Q | ''KEY_Q'' | | | ''KEY_RIGHT'' | | | ''KEY_LEFT'' | ===== Controles / entrada ===== Desde Pyxel también se puede usar el ratón y mandos (hasta 4 mandos). Se pueden consultar la definición de las teclas, entre otras cosas, en este fichero: https://github.com/kitao/pyxel/blob/main/python/pyxel/__init__.pyi Por ejemplo: ^ Tecla ^ Uso con Pyxel ^ | Botón derecho del ratón | ''pyxel.MOUSE_BUTTON_RIGHT'' | | Botón izquierdo del ratón | ''pyxel.MOUSE_BUTTON_LEFT'' | | Botón A del primer mando | ''pyxel.GAMEPAD1_BUTTON_A'' | | Arriba en el mando 2 | ''pyxel.GAMEPAD2_BUTTON_DPAD_UP'' | ===== Juegos de ejemplo ===== En el repositorio de Pyxel hay varios scripts con ejemplos de juegos que se pueden hacer con esta biblioteca: * https://github.com/kitao/pyxel/tree/main/python/pyxel/examples Se recomienda seguir el siguiente orden para aprender Pyxel: 01, 05, 03, 04, 02. Otros ejemplos en esta wiki: * [[informatica:programacion:python:pyxel:juego_tipo_pong|Pong clon]] * [[informatica:programacion:python:pyxel:juego_tipo_breakout|Breakout clon]] * [[informatica:programacion:python:pyxel:juego_tipo_endless_runner|Endless Runner clon]] * [[informatica:programacion:python:pyxel:juego_tipo_snake|Snake clon]] * [[informatica:programacion:python:pyxel:juego_tipo_space_invaders|Space Invaders clon]] * [[informatica:programacion:python:pyxel:juego_tipo_tetris|Tetris clon]] * [[informatica:programacion:python:pyxel:juego_tipo_flappy_bird|Flappy Bird clon]] ===== Recursos ===== * https://github.com/kitao/pyxel/wiki/Pyxel-User-Examples * https://github.com/shivanju/pyxel-games * https://github.com/gonzalocarreterohdz/Super-Mario-Bros-Game * https://github.com/dascruz/mario-bros-revisited * https://github.com/timbledum/snake * https://github.com/nadi726/Rocket-Flight * [[https://www.youtube.com/watch?v=Qg16VhEo2Qs|Python Retro Game Tutorial]] (vídeo) * [[https://www.youtube.com/watch?v=8Glx88BVMLs|Create a Retro Game with Pyxel in Python (Breakout)]] (vídeo) * [[https://www.youtube.com/watch?v=qcpLwnFNsxA|Taller de Pyxel | Gamejam]] (vídeo) * [[https://www.youtube.com/watch?v=Z6-eGh3KJyA|Victor Suarez - Pyxel: Los 8 bits Retro Pythoneros]] (vídeo) * [[https://www.youtube.com/watch?v=0g0L5iGKv9g|¡Crea fácilmente juegos retro con Pyxel! ¡Incluso los principiantes pueden hacer juegos en Python!]] (vídeo, audio en japonés, pero hay subtítulos en español)