La complessità dei giochi è cresciuta esponenzialmente negli ultimi anni, tanto più con l’avvento delle console di nuova generazione, dalle quali il mercato si aspetta ulteriore sviluppo delle meccaniche di gioco, ambienti più realistici e complessi, esperienze piu’ vaste. Queste aspettative si traducono durante lo sviluppo in termini di più asset, più linee di codice, tecniche più complesse; problematiche che vanno affrontate da team più numerosi. L’unica variabile che non è cambiata è il tempo di sviluppo per un titolo da vendere a prezzo pieno: circa due anni.
Vari team di sviluppo stanno affrontando il problema di gestire questa crescente complessità in diverse discipline: in questo post mi concentro sulla costruzione del software, quindi su quali linguaggi di programmazione sono usati oggi durante lo sviluppo di un videogioco.
La risposta è: non solo C++, ma diversi a seconda dello scopo.
C++/Assembly. I linguaggi a livello più basso sono usati dove è necessario il totale controllo sull’hardware, sul ciclo di vita degli oggetti e sulla loro collocazione in memoria. L’Engine Grafico, il Network Engine, oppure l’Engine Sonoro, ma anche alcune porzioni del Game Engine, sono scritti in in C++ con minuscole porzioni di assembly dove necessario. In questi sistemi non sono tanto importanti le prestazioni, ma è fondamentale capire quando nascono e soprattutto quando muoiono l’entità con le quali si lavora, oppure dove sono posizionate in memoria. Su console soprattutto la gestione della memoria è fondamentale perché la memoria è un bene scarso e prezioso.
LUA/Python. I linguaggi ad alto livello stanno quasi esclusivamente sostituendo i vecchi linguaggi di scripting proprietari (chi ricorda il Quake C?). LUA e Python in particolare sono semplicissimi da interfacciare a codice C++ nativo, offrendo però un ambiente ad alto livello più produttivo per sistemi dove concetti come la gestione della memoria non sono fondamentali. Le prestazioni offerte sono sufficienti ad eseguire codice che gestisce le meccaniche di gioco. Un ulteriore vantaggio è la semplicità di apprendimento, che permette ad uno scripter di diventare subito produttivo. Civlization 4di Sid Meier, ad esempio, è scritto per larga parte in Python. Fable 2 usa LUA per lo scripting.
C# e .NET. Il codice del gioco rappresenta una parte anche abbastanza piccola rispetto a tutto il codice che è necessario scrivere durante lo sviluppo di un titolo. C# e .NET, per via della loro produttività e standardizzazione, si stanno ritagliando grosse fette di interesse nello sviluppo di tutti i tool di supporto allo sviluppo: tool di conversione, costruzione e gestione degli asset di gioco, editor di livelli sono sempre più spesso scritti in uno dei linguaggi che supportano la piattaforma .NET.
Un programmatore che volesse entrare nel mondo dello sviluppo, quindi, non può più limitarsi a conoscere il C++, ma si vede costretto ad allargare il proprio bagaglio di strumenti con linguaggi e piattaforme a più alto livello.