[ English | 中文 | Español | Français | Italiano | 日本語 | 한국어 | Português | Русский ]
Pyxel é uma engine de jogos retrô para Python.
Graças às suas especificações simples inspiradas em consoles de jogos retrô, assim como permitir a exibição de apenas 16 cores e apenas 4 sons poderem ser reproduzidos ao mesmo tempo, você pode se sentir à vontade para fazer jogos em estilo pixel art.
As especificações do console e APIs do Pyxel fazem referência ao incrível PICO-8 e TIC-80.
Pyxel é open source e livre para utilização. Vamos começar fazendo um jogo retrô com Pyxel!
- Executável no Windows, Mac e Linux
- Código escrito em Python3
- Paleta fixa de 16 cores
- 3 bancos de imagens de tamanho 256x256
- 8 tilemaps de tamanho 256x256
- 4 canais com 64 sons definíveis
- 8 músicas que podem combinar sons arbitrários
- Entrada de teclado, mouse e joystick
- Editor de imagem e som
Primeiro, instale o Python3 (versão 3.6.8 ou superior).
Durante a instalação utilizando o instalador oficial do Python, não esqueça de adicionar o Python no PATH selecionando a seguinte opção:
Em seguida, instale o Pyxel com o seguinte comando do pip na linha de comando:
pip install -U pyxelPrimeiro, no ambiente com o [Homebrew] (https://brew.sh/) instalado, instale o [Python3] (https://www.python.org/) (versão 3.6.8 ou superior) e os pacotes necessários com o próximo comando:
brew install python3 gcc sdl2 sdl2_image gifsicleVocê pode instalar o Python3 de outras maneiras, mas lembre-se de que você deve instalar outras bibliotecas.
Em seguida, reinicie o terminal e instale o Pyxel com o commando pip3:
pip3 install -U pyxelInstale Python3 (versão 3.6.8 ou superior) e os requisitos específicos para cada distribuição.
Ubuntu:
sudo apt install python3 python3-pip libsdl2-dev libsdl2-image-dev gifsicle
sudo -H pip3 install -U pyxelPara instalar o Pyxel em ambientes diferentes dos anteriores (Linux 32-bit, Raspberry PI, etc.), siga os passos abaixo:
- Conjunto de ferramentas C++ (deve incluir os comandos gcc e make)
- libsdl2-dev and libsdl2-image-dev
- Python3 (versão 3.6.8 ou superior) e o comando pip
git clone https://github.com/kitao/pyxel.git
cd pyxel
make -C pyxel/core clean all
pip3 install .Após instalar o Pyxel, os exemplos serão copiados para o diretório atual com o seguinte comando:
install_pyxel_examplesOs exemplos copiados são os seguintes:
- 01_hello_pyxel.py - Aplicação simples
- 02_jump_game.py - Jogo de pulo com o arquivo de recursos do Pyxel
- 03_draw_api.py - Demonstração da API de desenho
- 04_sound_api.py - Demonstração da API de som
- 05_color_palette.py - Lista da paleta de cores
- 06_click_game.py - Jogo de clique com mouse
- 07_snake.py - Jogo Snake com BGM
- 08_triangle_api.py - Demonstração da API de desenho de triângulo
- 09_shooter.py - Jogo de tiro com transição de tela
Os exemplos podem ser executados como um programa Python comum:
Windows:
cd pyxel_examples
python 01_hello_pyxel.pyMac / Linux:
cd pyxel_examples
python3 01_hello_pyxel.pyDepois de importar o módulo Pyxel para o seu código Python, primeiro especifique o tamanho da janela com a função init, depois inicie a aplicação Pyxel com a função 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)Os argumentos da função run são as funções update, para atualizar cada frame, e draw para desenhar a tela quando for necessário.
Em uma aplicação real, é recomendado colocar código pyxel em uma classe, como feito abaixo:
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()Também é possível escrever um código simples utilizando as funções show e flip para desenhar gráficos e animações simples.
A função show desenha na tela e espera até a tecla ESC ser pressionada.
import pyxel
pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()A função flip atualiza a tela uma vez.
import pyxel
pyxel.init(120, 80)
while True:
pyxel.cls(3)
pyxel.rectb(pyxel.frame_count % 160 - 40, 20, 40, 40, 7)
pyxel.flip()Os seguintes controles especiais podem ser executados quando uma aplicação Pyxel estiver sendo executada:
Esc
Encerra a aplicaçãoAlt(Option)+1
Salva uma captura de tela para a área de trabalhoAlt(Option)+2
Reinicia o momento inicial do vídeo de captura de tela.Alt(Option)+3
Salva um vídeo de captura de tela (gif) na área de trabalho (até 30 segundos)Alt(Option)+0
Ativa/desativa o monitor de performance (fps, tempo de update e tempo de draw)Alt(Option)+Enter
Ativa/desativa tela cheia
O Editor Pyxel pode criar imagens e sons usados em uma aplicação Pyxel.
O Editor Pyxel é iniciado com o seguinte comando:
pyxeleditor [pyxel_resource_file]Se o arquivo de recursos Pyxel (.pyxres) existir, o arquivo será carregado, e se ele não existir, um novo arquivo com o nome especificado será criado.
Se o arquivo de recursos for omitido, o nome será my_resource.pyxres.
Após iniciar o Editor Pyxel, o arquivo pode ser trocado arrastando e soltando outro arquivo de recursos. Se o arquivo de recursos for arrastado segurando a tecla Ctrl(Cmd), somente o tipo de recurso (imagem/tilemap/som/musica) que está sendo editado será carregado. Esta operação permite combinar múltiplos arquivos de recurso em um só.
O arquivo de recurso criado pode ser carregado com a função load.
O Editor Pyxel possuí os seguintes modos de edição.
Editor de Imagem:
O modo para editar bancos de imagem.
Ao arrastar e soltar um arquivo png na tela do Editor de Imagens, a imagem pode ser carregada no banco de imagens atualmente selecionado.
Editor de Tilemap:
O modo para editar tilemaps em que imagens dos bancos de imagens são organizados em um padrão de tiles.
Editor de Som:
O modo para editar sons.
Editor de Musica:
O modo para editar músicas nas quais os sons são organizados na ordem de execução.
Imagens Pyxel e tilemaps também podem ser criadas da seguinte forma:
- Criar uma imagem a partir de uma lista de strings com a função
Image.setouTilemap.set - Carregar um arquivo png na paleta do Pyxel com a função
Image.load
Sons Pyxel também podem ser criados da seguinte maneira:
- Criar um som a partir de strings com a função
Sound.setouMusic.set
Favor consultar a referência da API para o uso dessas funções.
Usando o Empacotador Pyxel embutido é possível criar um executável autônomo que irá funcionar até em ambientes em que não tenham o Python instalado.
Para criar um executável independente, no ambiente em que PyInstaller está instalado, especifique o arquivo Python a ser usado para iniciar o aplicativo com o comando pyxelpackager da seguinte maneira:
pyxelpackager python_fileQuando o processo estiver completo, um executável será criado na pasta dist.
Se recursos como os arquivos .pyxres e .png também forem necessários, coloque os dentro da pasta assets que eles também serão inclusos.
Também é possível especificar um icone com a opção -i icon_file.
-
width,height
A largura e a altura da tela -
frame_count
O número dos quadros decorridos -
init(width, height, [caption], [scale], [palette], [fps], [quit_key], [fullscreen])
Inicializa a aplicação Pyxel com o tamanho de tela (width,height). A largura e a altura máxima da tela é 256
Também é possível especificar o título da janela comcaption, a ampliação da tela comscale, a paleta de cores compalette, a taxa de quadros comfps, a tecla para finalizar a aplicação comquit_keye se ela será iniciada em modo tela cheia comfullscreen.paletteé especificada como uma lista de 16 elementos de cor de 24 bits.
e.g.pyxel.init(160, 120, caption="Pyxel with PICO-8 palette", palette=[0x000000, 0x1D2B53, 0x7E2553, 0x008751, 0xAB5236, 0x5F574F, 0xC2C3C7, 0xFFF1E8, 0xFF004D, 0xFFA300, 0xFFEC27, 0x00E436, 0x29ADFF, 0x83769C, 0xFF77A8, 0xFFCCAA], quit_key=pyxel.KEY_NONE, fullscreen=True) -
run(update, draw)
Inicia a aplicação Pyxel e chama a funçãoupdatepara atualização de quadros e a funçãodrawpara desenhar -
quit()
Encerra a aplicação Pyxel no fim do quadro atual -
flip()
Força o desenho na tela (não use em aplicações normais) -
show()
Desenha na tela e espera para sempre (não use em aplicações normais)
-
save(filename)
Salva o arquivo de recurso (.pyxres) no diretório do script de execução -
load(filename, [image], [tilemap], [sound], [music])
Lê o arquivo de recurso (.pyxres) do diretório do script de execução. SeFalsefor especificado para o tipo de recurso (imagem/tilemap/som/musica), o recurso não será carregado.
-
mouse_x,mouse_y
A posição atual do cursor do mouse -
mouse_wheel
O valor atual da roda de rolagem do mouse -
btn(key)
RetornaTruesekeyé pressionada, caso contrário retornaFalse(lista de definições de teclas) -
btnp(key, [hold], [period])
RetornaTruesekeyfor pressionada naquele quadro, caso contrário retornaFalse. Quandoholdeperiodsão especificados,Trueserá retornado durante o intervalo de quadrosperiod, no qualkeyestiver pressionada por mais queholdquadros -
btnr(key)
RetornaTruesekeyfor solta naquele quadro, caso contrário retornaFalse -
mouse(visible)
SevisibleforTrue, mostra o cursor do mouse. Se forFalse, esconde. Mesmo se o cursor do mouse não for visível, sua posição é atualizada.
-
image(img, [system])
Opera o banco de imagensimg(0-2) (veja a classe de Imagem). SesystemforTrue, o banco de imagens do sistema pode ser acessado. 3 é para a fonte e o editor de recursos. 4 é para tela
e.g.pyxel.image(0).load(0, 0, "title.png") -
tilemap(tm)
Opera o tilemaptm(0-7) (ver a classe de Tilemap) -
clip(x, y, w, h)
Define a área de desenho da tela de (x,y) para a largurawe alturah. Redefina a área de desenho para tela cheia comclip() -
pal(col1, col2)
Substitui a corcol1comcol2ao desenhar. Usepal()para voltar para a paleta inicial -
cls(col)
Limpar a tela com a corcol -
pget(x, y)
Captura a cor de um pixel em (x,y) -
pset(x, y, col)
Desenha um pixel de corcolem (x,y) -
line(x1, y1, x2, y2, col)
Desenha uma linha da corcolde (x1,y1) até (x2,y2) -
rect(x, y, w, h, col)
Desenha um retângulo de larguraw, alturahe corcola partir de (x,y) -
rectb(x, y, w, h, col)
Desenha o contorno de um retângulo de larguraw, alturahe corcola partir de (x,y) -
circ(x, y, r, col)
Desenha um círculo de raiore corcolem (x,y) -
circb(x, y, r, col)
Desenha o contorno de um círculo de raiore corcolem (x,y) -
tri(x1, y1, x2, y2, x3, y3, col)
Desenha um triangulo com os vértices (x1,y1), (x2,y2), (x3,y3) e corcol -
trib(x1, y1, x2, y2, x3, y3, col)
Desenha o contorno de um triangulo com os vértices (x1,y1), (x2,y2), (x3,y3) e corcol -
blt(x, y, img, u, v, w, h, [colkey])
Copia a região de tamanho (w,h) de (u,v) do banco de imagensimg(0-2) para (x,y). Se um valor negativo for definido parawe/ouh, será invertido horizontalmente e/ou verticalmente. Secolkeyfor especificada, será tratado como cor transparente
bltm(x, y, tm, u, v, w, h, [colkey])
Desenha o tilemaptm(0-7) em (x,y) de acordo com a informação de tile de tamanho (w,h) da posição (u,v). Secolkeyfor especificada, será tratada como cor transparente. Um tile do tilemap será desenhado com tamanho 8x8, e se o número do tile for 0, indica a região (0, 0)-(7, 7) do banco de imagens, se for 1, indica (8, 0)-(15, 0)
text(x, y, s, col)
Desenha uma stringsde corcolem (x,y)
-
sound(snd, [system])
Opera o somsnd(0-63) (ver a classe de Som). SesysteméTrue, o som 64 para o sistema, pode ser acessado
e.g.pyxel.sound(0).speed = 60 -
music(msc)
Opera a músicamsc(0-7) (ver a classe de Musica) -
play_pos(ch)
Recupera a posição de reprodução de som do canalch. As centenas e os milhares indicam o numero do som e as unidades e dezenas indicam o numero da nota. Quando a reprodução termina, retorna-1 -
play(ch, snd, loop=False)
Reproduz o somsnd(0-63) no canalch(0-3). Tocar em ordem quandosndfor uma lista -
playm(msc, loop=False)
Reproduz a músicamsc(0-7) -
stop([ch])
Interrompe a reprodução em todos os canais. Sech(0-3) for especificado, somente este será interrompido
-
width,height
Largura e altura da imagem -
data
Os dados da imagem (lista bidimensional de 256x256) -
get(x, y)
Pega os dados da imagem em (x,y) -
set(x, y, data)
Define os dados da imagem em (x,y) com um valor ou uma lista de strings
e.g.pyxel.image(0).set(10, 10, ["1234", "5678", "9abc", "defg"]) -
load(x, y, filename)
Lê a imagem png do diretório do script de execução em (x,y) -
copy(x, y, img, u, v, w, h)
Copia a região do tamanho (w,h) na posição (u,v) do banco de imagensimg(0-2) para (x,y)
-
width,height
A largura e a altura do tilemap -
data
Os dados do tilemap (lista bidimensional de 256x256) -
refimg
O banco de imagens referenciado pelo tilemap -
get(x, y)
Pega os dados do tilemap em (x,y) -
set(x, y, data)
Define os dados do tilemap em (x,y) com um valor ou uma lista de strings.
e.g.pyxel.tilemap(0).set(0, 0, ["000102", "202122", "a0a1a2", "b0b1b2"]) -
copy(x, y, tm, u, v, w, h)
Copia a região de tamanho (w,h) da posição (u,v) da tilemaptm(0-7) para (x,y)
-
note
Lista de notas(0-127) (33 = 'A2' = 440Hz) -
tone
Lista de tons(0:Triangle / 1:Square / 2:Pulse / 3:Noise) -
volume
Lista de volume(0-7) -
effect
Lista de efeitos(0:None / 1:Slide / 2:Vibrato / 3:FadeOut) -
speed
Duração de uma nota(120 = 1 segundo por tom) -
set(note, tone, volume, effect, speed)
Define uma nota, tom, volume e efeito com uma string. Se a duração do tom, volume e duração do efeito forem mais curtas que a nota, será repetido do começo -
set_note(note)
Define a nota com uma string consistindo de 'CDEFGAB'+'#-'+'0123' ou 'R'. Não diferencia maiúsculas e minúsculas e espaços são ignorados
e.g.pyxel.sound(0).set_note("G2B-2D3R RF3F3F3") -
set_tone(tone)
Define um tom com uma string consistindo de 'TSPN'. Não diferencia maiúsculas e minúsculas e espaços são ignorados
e.g.pyxel.sound(0).set_tone("TTSS PPPN") -
set_volume(volume)
Define o volume com uma string consistindo de '01234567'. Não diferencia maiúsculas e minúsculas e espaços são ignorados
e.g.pyxel.sound(0).set_volume("7777 7531") -
set_effect(effect)
Define o efeito com uma string consistindo de 'NSVF'. Não diferencia maiúsculas e minúsculas e espaços são ignorados
e.g.pyxel.sound(0).set_effect("NFNF NVVS")
-
ch0
Lista de som(0-63) a tocar no canal 0. Se uma lista vazia for definida, o canal não será usado para reprodução -
ch1
Lista de som(0-63) a tocar no canal 1. Se uma lista vazia for definida, o canal não será usado para reprodução -
ch2
Lista de som(0-63) a tocar no canal 2. Se uma lista vazia for definida, o canal não será usado para reprodução -
ch3
Lista de som(0-63) a tocar no canal 3. Se uma lista vazia for definida, o canal não será usado para reprodução -
set(ch0, ch1, ch2, ch3)
Define a lista de som(0-63) de todos os canais. Se uma lista vazia for definida, o canal não será usado para reprodução
e.g.pyxel.music(0).set([0, 1], [2, 3], [4], []) -
set_ch0(data)
Define a lista de som(0-63) do canal 0 -
set_ch1(data)
Define a lista de som(0-63) do canal 1 -
set_ch2(data)
Define a lista de som(0-63) do canal 2 -
set_ch3(data)
Define a lista de som(0-63) do canal 3
Use o issue tracker para reportar bugs e enviar pedidos feature/aprimoramento. Antes de submeter uma nova issue, procure no issue tracker para ter certeza de que não há algo similar em aberto.
Quando for enviar, selecione o template apropriado neste link.
Qualquer pessoa é bem vinda a testar manualmente o código e reportar bugs ou enviar sugestões de aprimoramento no issue tracker!
Patches/correções serão aceitas na forma de pull requests (PRs). Tenha certeza de que o que o pull request tenta resolver esteja em aberto no issue tracker.
Será considerado que todo pull request tenha concordado a ser publicado sob a licença MIT.
Pyxel está sob MIT license. Pode ser reutilizado dentro de um software proprietário desde que todas as cópias do software licenciado incluam uma cópia dos termos da licença MIT e o aviso dos direitos autorais.
Pyxel usa o seguinte software:









