Otevře se na nové kartě

Picogame

Založeno 28. 7. 2026 · aktualizováno 4. 11. 2026
Funkční
Licence: MIT
Sledovat
0
♥ Líbí se mi
0
Autor
Petr Šrámek
Stav
Funkční
Licence
MIT

2D herní engine pro CircuitPython na mikrokontrolérech. Vykreslování, kolize a scény řeší rychlé jádro v C, herní logiku píšete v Pythonu. Bez kompilace a flashování: upravíte code.py a hned vidíte výsledek. Vyzkoušet ho můžete i bez hardwaru v prohlížeči.

Ukázky her vytvořených v picogame
Pár her, které v picogame vznikly.

Co projekt umí

  • Sprity libovolné velikosti, tilemapy, kamera, kolize a částicové efekty.
  • Knihovny pro vstupy včetně USB gamepadu a klávesnice, animace, dialogy, zvuk a syntézu, ukládání skóre.
  • Desítky až stovky FPS: Bouncing Balls běží 250 FPS proti 115 FPS v knihovně Stage.
  • Vrstva kompatibility se Stage, takže staré hry běží dál.
  • Webový i desktopový simulátor, editor scén a převod grafiky z PNG.

Jak to funguje

Hlavní brzdou je překreslování displeje po SPI. Celá obrazovka 240 × 240 trvá zhruba 144 ms, tedy necelých 7 snímků za sekundu. Picogame proto drží objekty scény (retained mode) a na displej posílá jen změněné obdélníky. Kreslí v úzkých pruzích tak, aby procesor stihl spočítat další pruh, zatímco se předchozí odesílá.

Druhou brzdou je RAM. RP2040 má 264 kB a samotný framebuffer 320 × 240 by zabral přes 150 kB. Engine žádný plný framebuffer nedrží a velké bloky alokuje hned na začátku, aby paměť nefragmentovala. Matematika je ve fixed pointu, goniometrie z tabulek.

Referenční zařízení je PicoPad. Běží ale na téměř každé desce s CircuitPythonem, zhruba 200 kB RAM a displejem ST7789 nebo ILI9341: Pico 1 a 2, Feather S3 TFT, PicoSystem nebo Fruit Jam s HDMI výstupem.

Ukázka: první krok tutoriálu

MakerClassCZ/picogamemain · licence MIT
tutorials/01-bounce/step1_hello.py · 36 řádků Na GitHubu
# Bounce -- step 1: get ONE thing on screen.
#
# What you learn: the picogame render loop. A game is (a) a Scene you add objects
# to ONCE, then (b) a loop that moves things and calls scene.refresh(). The engine
# is retained-mode: you don't redraw by hand, you change object state and refresh.
#
# New in this step: picogame_game.setup(), picogame_shapes.rect(), pg.Sprite,
# scene.add(), scene.refresh(), the frame clock.
#
# Run it:  python3 sim/run.py tutorials/01-bounce/step1_hello.py --shot /tmp/s1.png
# On device: copy this file + the lib/ helpers to CIRCUITPY.

import picogame as pg
import picogame_game
import picogame_clock
import picogame_shapes as shp

W, H = picogame_game.screen()   # never hardcode: the same game runs at 240x240 and 640x480
PADDLE_W, PADDLE_H = 44, 8

# setup() takes over the display and gives us a Scene + its two strip buffers.
scene, _, _ = picogame_game.setup(background=pg.rgb565(8, 10, 24))
clock = picogame_clock.Clock(40)            # cap the loop to 40 FPS

# A "paddle" is just a Sprite whose bitmap is a solid rectangle. shp.rect(w,h,color)
# makes that bitmap -- a rectangle and an image sprite are the SAME kind of object
# (we'll prove that in step 9 by swapping the bitmap for art, with no other change).
paddle = pg.Sprite(shp.rect(PADDLE_W, PADDLE_H, pg.rgb565(220, 220, 230)),
                   (W - PADDLE_W) // 2, H - 16)

scene.add(paddle)                            # add it to the scene ONCE

while True:
    scene.refresh()                          # the engine draws the scene
    clock.tick()                             # sleep to the next frame

Co budete potřebovat

Položka
Ks
Poznámka
Kde koupit
PicoPad
1
referenční deska, nebo vlastní zapojení níže
Raspberry Pi Pico 2
1
pro vlastní zapojení, stačí i Pico 1
—
SPI displej ST7789 320×240
1
nebo ILI9341
—
Tlačítka
8
zapojení podle PicoPadu = firmware bez úprav
—
Pasivní piezo nebo malý reproduktor
1
volitelně pro zvuk
—

Deník projektu

10. 10. 2026

Vlak se všemi 50 levely

15. 8. 2026

Moon Miner: 6× rychlejší a o 40 % kratší

28. 7. 2026

Zveřejnění: engine, simulátor a tutoriály

Sdílejte projekt:
Postavili jste něco podobného? Ukažte svůj projekt komunitě chiptronu.
Přidat projekt

Diskuse

Přidat příspěvek do diskuse

Další projekty komunity