È online VOID LANCE, uno space shooter arcade a scorrimento verticale scritto in C++20 con Qt6 e OpenGL. Non c’è un solo file di grafica o di audio: nebulose, sagome dei nemici, esplosioni, musica ed effetti nascono a runtime, dallo shader o dal sintetizzatore.

Cosa c’è dentro
- 12 mondi × 10 settori, ognuno con nome, tinta, sagoma dei nemici e armi proprie. Le silhouette sono stelle a N punte (da 3 a 12) costruite nel fragment shader, non sprite disegnati a mano.
- Tre astronavi con velocità, cadenza di fuoco, numero di canne e danno diversi: LANCE (equilibrata), VIPER (intercettore), BULWARK (corazzata).
- Boss al quinto e al decimo settore di ogni mondo: bracci rotanti, ventaglio mirato, anelli di proiettili.
- Arsenale guadagnato combattendo: dal secondo mondo missili guidati e bombe. Si parte con due missili e una bomba, poi ogni sei nemici distrutti arriva una munizione garantita, alternando missile e bomba; i boss ne lasciano sempre una per tipo.
- Audio sintetizzato: quindici effetti e quattro strumenti in DSP a 48 kHz, mixer a 64 voci, musica su quattro battute in tre atmosfere.
- Progressi salvati a ogni settore, pausa compresa, con ripresa dal titolo.

Come provarlo
Il gioco è distribuito come pacchetto Flatpak per Linux x86_64: meno di 200 kB, perché Qt arriva dal runtime KDE e non è incluso. Serve una GPU con OpenGL 3.3 core; su hardware più vecchio parte il percorso di compatibilità GLSL 120 (OpenGL 2.1).
flatpak install --user flathub org.kde.Platform//6.10
flatpak install --user ./VoidLance-1.1-x86_64.flatpak
flatpak run it.pseudocodice.VoidLance
Il pacchetto si scarica dalla pagina del gioco, dove ci sono schermate, comandi e requisiti, oppure dalla release su GitHub.
Comandi essenziali
| Mouse / WASD | pilota la nave (fuoco automatico) |
| V / B | missile guidato / bomba, dal secondo mondo |
| P / Esc | pausa, con menu: riprendi o torna al menu principale |
| pannello missione: salta a un mondo e settore qualsiasi |
Come è fatto
Tre strati con contratti stretti: una simulazione pura che non conosce né Qt né OpenGL, una traduzione stato → istanze grafiche fatta di funzioni pure, un renderer che non sa nulla del gameplay. L’audio non ha thread propri: il mixer riempie i buffer che QAudioSink richiede in pull mode. Le catture che si vedono qui sono generate dal gioco con passo fisso e seed costante: nessuno screenshot ritoccato a mano.
Codice sorgente: github.com/4n-0n/void_lance.
Pagina del gioco: pseudocodice.it/void_vance.