PhpGame: l'inizio

cover

A: Videogiochi in PHP, completamente in PHP è possibile?
B: Si!
A: Non sto' parlando di backend in PHP e qualche sorta di frontend in Javascript o altro ma proprio un programma eseguibile scritto unicamente in PHP! È possibile?
B: Si!
A: Mostrami il codice.

Da tempo esiste una libreria che si chiama Simple DirectMedia Layer 2 (SDL) con la quale è possibile accedere a input come tastiera, joystick e mouse, gestire audio ma sopratutto si può accedere alle schede grafiche tramite un'astrazione su OpenGL, Direct3D e c'è anche il supporto per Vulkan. SDL è una libreria cross-platform e con questa sono stati implementati giochi da Valve e diversi Humble Bumble.

Con SDL si possono creare finestre e gestirne gli eventi come ridimensionamento, spostamento, over, etc. Gestire il disegno sullo schermo con accelerazione 2D sia di primitive ma sopratutto con texture. La gestione dell'audio è la parte più complicata perché molto a basso livello con funzioni che vanno dalla manipolazione di sample e loro riproduzione o registrazione fino alla gestione e mixing di canali audio. C'è però una libreria aggiuntiva a SDL con la quale è possibile gestire semplicemente suoni e musiche: sdl-mixer. Altra funzionalità che manca a SDL è la possibilità di caricare facilmente le immagini diverse dalle BMP. Anche per questo la community si è attivata ed è stata implementata una libreria aggiuntiva molto utile che si chiama sdl-image.

Ma veniamo alle estensioni PHP.
Esiste da tempo un'estensione php php-sdl scritta per PHP 5.x da Remi Collet e poi mantenuta in collaborazione con Santiago Lizardo. Purtroppo mantenere una estensione PHP è molto time consuming e il porting per PHP 7 era parziale. Così alcuni mesi or sono ho iniziato a collaborare con gli autori dell'estensione per finire il porting a PHP 7 e con grande soddisfazione ora sono utilizzabili la maggior parte delle funzionalità.

Nel core di php-sdl non sono presenti i porting delle librerie sdl-mixer e sdl-image così ho creato un paio di estensioni con il minimo sindacale per produrre suoni, alcune funzioni di mixer e il caricamento delle immagini, soprattutto per le PNG: php-sdl-mixer e php-sdl-image.

Con queste tre estensioni possiamo creare finestre, disegnare immagini e primitive, gestire input, riprodurre file audio. Cosa manca? Un progetto su cui testare il tutto!
No, c'è anche quello: l'anno scorso, il founder di Raspberry Pi, Eben Upton, ha scritto un libro a più mani chiamato Code the Classic - Volume 1 dove reinventa 5 classici degli anni '80 con Python.
La naturale evoluzione non poteva essere il porting dei giochi in PHP: Code the Classic in PHP.
È ancora in fase si sviluppo e solo 2 giochi sono completi più uno in WIP ma è una buona palestra per capire cosa si può fare con queste estensioni.

Che i giochi abbiamo inizio!

PHP PhpGame SDL PECL PHP extension