Lunediscord #1: Je suis Valve

Se amate i videogiochi, probabilmente sognate in segreto di svilupparne uno. Ecco come io ho iniziato in circa 6 mesi

Mi son sempre pentito di non aver seguito il consiglio di chi mi diceva che “programmare mi sarebbe piaciuto“. Perché non aveva torto. Sentire “linguaggi di programmazione” può essere spaventoso, all’inizio, ma il nostro webmaster insegna che si può tranquillamente programmare qualcosa senza che ti esploda in faccia. Basta un minimo di buona volontà.

E nessuno ha detto che devi iniziare giovane.

Perché l’Internet è un posto meraviglioso, ed è interamente a nostra disposizione.

Per tutti quei giocatori/sognatori là fuori che vogliono “giocare oltre le regole”, al punto da arrivare a crearle loro stessi, ecco una lista di 7 passi per iniziare a programmare un videogioco in meno di un anno. Se siete bravi e avete costanza, forse, bastano persino 6 mesi.

Sentire la frase 'linguaggi di programmazione' può essere spaventoso, all'inizio, ma quello che non vi dicono è che basta un minimo di buona volontà.

Come programmare videogiochi in meno di un anno

Step 1: Definisci un obiettivo

Il primo passo è più un jolly che un vero e proprio aspetto pratico, ma è uno step fondamentale per raggiungere qualunque risultato. Volete imparare a disegnare un personaggio umanoide? Volete creare il vostro primo gioco? Volete comporre un intero concept album per raccontare le vostre storie originali? Non importa quanto il vostro obiettivo sia ambizioso; l’importante è che sia raggiungibile, e che siate disposti a rincorrerlo fino in fondo.

Concentratevi sul capire i vostri limiti e definite un obiettivo in base a quelli. Nel mio caso, io sapevo di voler imparare nuove abilità professionali da inserire sul curriculum, e volevo anche togliermi uno sfizio che avevo da anni. Sapevo anche di essere un appassionato di linguistica e lingue straniere, e ho approcciato la programmazione come se stessi imparando una nuova lingua.

Tenete a mente, tuttavia, che io non mi son dato nessun tipo di limite di tempo, ma consiglio fortemente di non fare la stessa cosa. Datevi sei mesi, un anno, due anni, il tempo che preferite (sempre tenendo a mente limiti e quanto ho appena detto), ma che sia una scadenza tangibile per raggiungere l’obiettivo. Altrimenti è fin troppo facile distrarsi e allontanarsi dalla retta via, una volta che la sensazione di novità sarà scemata.

Step 2: Gli Strumenti – Codecademy

Internet è pieno di strumenti per imparare

Una volta impostato l’obiettivo, è il momento di pensare agli strumenti più adatti per raggiungerlo. Tutti gli scrittori prima o poi soffrono della “sindrome da cursore lampeggiante” sulla pagina bianca di Word, e lo stesso si applica alla programmazione. Un documento vuoto può spaventare, se non si sa da dove cominciare. Per fortuna, esiste Codecademy.

Codecademy è una “accademia online di programmazione” con modello Freemium, con diversi corsi accessibili gratuitamente e progetti più pratici a pagamento. Offre corsi in tutti i maggiori linguaggi di programmazione, inclusi JavaScript, Python, C++, C# e molti altri, tutti piuttosto complessi, approfonditi e completamente interattivi. Esistono altri siti per imparare a programmare, ma Codecademy mi è parso di gran lunga il più completo, pulito e divertente da usare. Ogni esercizio ha una checklist di compiti da eseguire, e non è possibile avanzare nella lezione a meno di completare quella lista di obiettivi. Gamification applicata all’apprendimento, che è una figata clamorosa.

programmare videogiochi Codecademy
Schermata tipo di una lezione di Codecademy

Step 3: Il Linguaggio

Sì, ma quale imparo?La risposta più semplice è che non c’è un linguaggio definitivo. Ma Unity e Unreal Engine sono scritti in C# e C++, e quelli saranno probabilmente i vostri “linguaggi di arrivo”.

Consiglio di farsi le ossa su tutti i linguaggi che sembrano incuriosirvi su Codecademy. Anche se non arriverete a creare un’App con ciascuno di essi, l’importante è comprendere la teoria con qualche risvolto pratico. Ogni corso successivo al primo sarà un ripasso della teoria dei precedenti, che rafforzerà la vostra conoscenza della programmazione e renderà il vostro cervello più elastico, per adattarsi a diversi tipi di sintassi e situazioni.

E questo è un momento altrettanto importante nella fase di apprendimento. Consiglio di spendere più tempo che potete cercando di completare tutte le lezioni che potete di Codecademy, possibilmente nel linguaggio di vostra scelta. Molti altri vi consiglieranno di iniziare da Python, che ha una sintassi molto semplice ed è una scelta che posso anche condividere, ma la realtà è che è tutto nelle vostre mani e in buona parte è un semplice blocco psicologico.

Io stesso ho iniziato da JavaScript (utilizzato per costruire applicazioni e giochi web, tra le altre cose). JavaScript possiede una sintassi molto più simile allo standard di parecchi altri linguaggi, e mi son sorpreso ad amarlo alla follia. E poi, quando sono passato a Python, mi sono effettivamente ritrovato a voler tornare su JavaScript il prima possibile.

Spendete più tempo che potete cercando di comprendere le basi. La roba più succosa verrà dopo.

Nel giro di qualche settimana, saprete le basi della sintassi di programmazione, del Control Flow, delle funzioni, i metodi, e possibilmente anche le classi e gli oggetti. Il corso in C# di Codecademy, soprattutto, è particolarmente completo e dettagliato, e fornisce un gran numero di informazioni a volte assenti negli altri corsi sulla piattaforma.

Qualunque cosa succeda, non fate come ho fatto io. Evitate Java come la peste.

Step 4: Come sviluppare i Primi Giochi – Python?

Ovviamente, un anno fa non sapevo che Java fosse visto come la mer*a assoluta in praticamente tutta l’industria videoludica. Così ho deciso di prendere Java, poco dopo aver completato il corso su Codecademy, e mettermi a creare un’avventura testuale da giocare sul terminale del computer.

Non è stata la mia prima opzione, però. Seguendo un paio di tutorial su YouTube, sono riuscito a creare un paio di giochini arcade utilizzando Pygame, una libreria di Python pensata appositamente per programmare giochi. Per quanto basilare e lontana anni luce dalla versatilità di Unity, consiglio di approcciare a Pygame, se si ha tempo, per comprendere le basi più grezze del game design. Questo perché, in Pygame, ogni elemento va programmato nel minimo dettaglio: i salti sono parabole, le animazioni degli sprite sono programmi in loop che mostrano sullo schermo diversi frame presi da un insieme, e così via.

Programmare un gioco insignificante in Pygame, anche seguendo due o tre tutorial, può aprirvi la mente sui principi alla base dello sviluppo di un engine. E può essere fondamentale per capire la fisica all’interno di un videogioco.

Il mio primo (e praticamente unico) gioco in Pygame

Dopo i miei primi giochi in Pygame, ho seguito un altro paio di tutorial su YouTube per creare un dungeon crawler testuale in Java. Consiglio di seguire questo tutorial anche senza creare il gioco stesso; mi ha permesso di comprendere il concetto di drop rate e la struttura matematica alla base dei videogiochi RPG.

Dopodiché, ho deciso che ero pronto per provare a sviluppare qualcosa da solo. Per circa un paio di settimane, ho lavorato a un’avventura testuale ispirata a uno dei miei racconti horror, L’Organista, ideando un sistema di inventario, scelte multiple e molto altro. E, proprio quando stavo iniziando a ingranare per bene, ho dovuto abbandonare il progetto per continuare il mio percorso accademico.

Step 5: C++ e C#

I miei 'linguaggi di arrivo'

Ma non me ne pento. Poco dopo, ho scoperto che Java non è il linguaggio più pulito esistente per programmare videogiochi, e che l’industria tende a guardarlo con certo ribrezzo. In più, circa un anno dopo aver abbandonato il progetto, mi sono reso conto di quanto grezzo e poco ottimizzato fosse il mio codice, specie dopo aver ripreso a studiare con Codecademy.

Perché a quel punto Codecademy aveva introdotto i corsi in C++ e C#. E da lì è stata tutta una discesa.

Sia C++ che C# sono derivati da C, un linguaggio tanto complesso quanto potente. Anche se è una semplificazione, vi basti sapere a grandi linee che la differenza maggiore sta nel supporto di classi e oggetti, e in modi diversi di gestire la memoria.

Una volta imparato C#, sapevo che sarei passato a Unity Engine come prossima mossa. Ed è lì che è iniziata la parte più affascinante della mia avventura.

Step 6: Perché usare Unity

Per chi non lo conoscesse, Unity è un engine sviluppato per supportare la programmazione di videogiochi. È molto più user-friendly di Unreal, ma non supporta gli shader e il rendering foto-realistico di quest’ultimo, nonostante le cose stiano lentamente cambiando per il meglio. Inoltre, i giochi più grandi sviluppati con Unreal tendono a essere più stabili e performanti – Unity è perfetto per giochi leggeri e di medie dimensioni, e per i titoli mobile.

Finché non ho scoperto Unity, sviluppare un videogioco in Java o in Pygame voleva dire programmare il mio engine personale man mano che andavo avanti. Il che voleva dire anche impostare le collisioni manualmente, le animazioni e molto altro. Con Unity, molti di questi processi diventano automatici.

ODDIO COS’È TUTTA ‘STA ROBA

Certo, l’interfaccia è un po’ ostica da comprendere all’inizio, e c’è una curva di apprendimento abbastanza ripida. Qualunque progetto in Unity inizia semplicemente con una telecamera di gioco – sta al programmatore aggiungere tutto il resto. E quella tela bianca può essere tanto spaventosa quanto il foglio bianco di Word.

Ma quella paura si supera in fretta. YouTube è pieno di risorse, tutorial e video-corsi che possono aiutare a capire lo sviluppo in Unity, e la community attorno all’engine è molto più attiva di Unreal. È probabile che, se pensate di candidarvi per un lavoro da game programmer, la conoscenza di Unreal sia preferibile, se non addirittura necessaria – ma ci sarà tempo per imparare a utilizzarlo. Per il momento, Unity andrà benissimo, e vi permetterà di togliervi parecchie soddisfazioni senza scoraggiarvi troppo.

Gli utenti Unity vi daranno un supporto pazzesco

Personalmente, in quanto a risorse, il canale YouTube di Brackeys è diventato la mia bibbia. Asbjørn (il CEO e fondatore di Brackeys) sviluppa giochi su Unity da almeno 10 anni, e il suo stile di insegnamento è così genuino e chiaro che farebbe capire Unity anche a un bambino di sei anni. Inoltre, il canale YouTube è attivo da parecchi anni e presenta tutorial per ogni livello, dal principiante all’avanzato, coprendo anche generazione procedurale, shader, illuminazione 2D/3D e molto altro.

Altri canali degni di nota sono Dani, che fa spesso delle challenge interessanti (come “sviluppare un gioco in 12 ore“), Blackthornprod e Thomas Brush (più concentrati sulla game art).

Ma le risorse per Unity non finiscono con i canali YouTube; ci sono anche corsi un po’ più “professionali” che è possibile rimediare per pochissimi spiccioli.

Step 7: Corsi su Udemy & GameDev.TV

Sì, avete ragione. Udemy è pieno di robaccia, ma di quella che puzza e ti resta sui vestiti per giorni e giorni. E molti dei corsi gratuiti, effettivamente, lo sono. Ma la piattaforma svende spesso i corsi a sconti paurosi, e, grazie a un fortunatissimo Humble Bundle a inizio anno, sono riuscito a rimediare (per circa €20 in totale) una decina di corsi creati da GameDev.tv, un’accademia online dedicata a tutorial di programmazione per principianti.

Gli istruttori di GameDev.tv non saranno chiari, sintetici o giovani come Asbjørn, ma hanno anni di sviluppo alle spalle e sono insegnanti più che capaci. Per quanto le loro lezioni siano definite adatte a totali principianti, è consigliabile avere almeno una conoscenza base o intermedia dei linguaggi di programmazione prima di approcciare i loro corsi. Codecademy e Brackeys dovrebbero darvi le basi necessarie.

Ignorate il prezzo attuale – su Udemy, i corsi vanno molto spesso in sconto al 90%.

Il corso che ho seguito personalmente è stato Complete C# Unity Developer 2D: Learn to Code Making Games (sì, scordatevi di programmare se il vostro inglese è al di sotto delle scarpe). In circa 35 ore di video-lezioni, uno degli istruttori di GameDev.tv mi ha guidato nello sviluppo di circa 5 giochi diversi, da un’avventura testuale a un action-platform 2D, passando per un top-down shooter e persino un tower-defender à la Plants VS Zombies. Il corso incoraggia a utilizzare i propri asset e creare qualcosa di proprio, ma nulla vieta di seguire passo per passo le lezioni con gli asset forniti dagli istruttori stessi, per fare pratica in vista della fine del corso.

GameDev.tv ha a disposizione un ampio portfolio di corsi, da modellazione 3D con Blender a un corso avanzato di scripting per RPG e IA. E tutto al prezzo medio di circa £12,99 a corso su Udemy, o anche meno se, come me, sarete fortunati abbastanza da beccare un bundle.

Step 8: Come iniziare a programmare videogiochi

A questo punto avrete maturato gli strumenti, possibilmente le capacità, e sarà il momento di buttarsi su qualcosa di serio. Come programmare il primo videogioco originale?

Se siete delle persone creative, a questo punto starete esplodendo di idee per potenziali giochi da creare e non vedrete l’ora di mettere le mani su un progetto Unity tutto vostro. Ma ci sono ancora un paio di cose da considerare, ostacoli contro cui mi sono scontrato io stesso.

I miti da sfatare

Non vi mentirò: programmare è complesso, e può esserlo parecchio. Ma vi stupireste di vedere quanto semplice sia, rispetto all’idea che si ha generalmente. Soprattutto per quanto riguarda lo sviluppo videoludico.

I tripla-A sono ovviamente fuori discorso. Quelli potrebbero arrivare nel futuro, se volete. Ma per programmare dei giochi arcade semplici, o anche dei giochi in 2D mediamente complessi, la verità è che non vi serve neanche sapere troppa matematica. Un amico, ora laureato alla triennale di Fisica a Pisa, mi ha limpidamente fatto sapere che un gioco come Kerbal Space Program si ferma al primo trimestre del primo anno di Fisica teorica, in termini di concetti. E la matematica effettivamente utilizzata nel game design è probabilmente anche meno.

Il resto è tutta memoria visiva e pratica.

Non lasciatevi spaventare dalla matematica o dalle linee di codice. Con un minimo di logica, tutti i concetti saranno semplici da comprendere.

Gli Asset

Gli asset sono la parte più rognosa del programmare un videogioco, specie se non siete minimamente degli artisti. Ma ci sono parecchie soluzioni da percorrere. Se non avete un artista nel team, potreste comprare degli asset premium dall’Asset Store di Unity, oppure scaricarne di gratuiti in giro per il web (o anche dallo stesso Asset Store). Itch.io è pieno di asset gratuiti, ma Kenney è abbastanza famoso per i suoi pack e il suo stile coloratissimo, e opengameart.org è un’altra ottima risorsa per trovare degli asset molto di base.

Il più delle volte non potrete utilizzarli a scopi commerciali, a meno di averli acquistati per un prezzo preciso, ma sono un ottimo modo per iniziare a fare pratica. E se tutto va male, potrete sempre ricorrere alla Pixel Art; con un po’ di pratica e i tutorial giusti (Brackeys ne offre un paio), non sarà difficile creare qualcosa di cui andrete fieri voi stessi.

In realtà, però, è probabile non abbiate neanche bisogno di utilizzare asset per il vostro gioco. Brackeys ha speso diverse ore di tutorial creando giochi semplicissimi con nient’altro che forme geometriche, come quadrati, triangoli, cubi e simili, e abbellendo con effetti particellari ed effetti di luce. Il mio consiglio è iniziare con un’idea semplicissima, qualcosa che vi permetta di concentrarvi sul codice piuttosto che sul design; coi progetti successivi, potrete puntare più in grande.

Idee semplici, ambizioni complesse

Infine, un ultimo consiglio: non gettatevi subito su un RPG a generazione procedurale, magari con anche spawn casuale dei nemici e un’IA di combattimento complessa. Chiunque, da Brackeys a GameDev.tv, vi dirà di “iniziare in piccolo.” Partite da un’idea semplice, un gioco relativamente facile da pensare e completare, ed evolvete le vostre capacità a partire da lì. Non dovete farci dei soldi – non ancora, almeno. I primi progetti servono soprattutto per fare pratica. Non c’è niente di più bello di vedere un gioco, completo e funzionante, che prende vita di fronte ai vostri occhi, e anche piccoli successi come un arcade a schermata singola possono motivarvi parecchio.

Ed è facile trovare delle idee per giochi semplici; un protagonista in difficoltà, un animale con un desiderio, un piccolo cubo rosso che vuole solo arrivare alla fine di un corridoio evitando i cubi neri. Qualunque idea può diventare un gioco, con la mentalità giusta. E, col tempo, sarete in grado di individuare e riconoscere anche le più efficaci fonti di ispirazione; Ludum Dare e altri contest di game design (inclusi quelli di Brackeys stesso) sono ottimi posti in cui cercare dei prompt, grazie a temi sempre diversi ogni anno che potranno esservi di ispirazione per fare piccoli esperimenti.

Il mio gioco: Running Out of Power

E il mio primo gioco, attualmente in sviluppo, viene proprio da uno dei Ludum Dare passati. Ho preso ispirazione alla lettera dal tema “Running Out of Power“, e ho immaginato un piccolo elettrone che cerca di fuggire da una batteria in spegnimento. Un concetto semplice, che svilupperò probabilmente come un endless runner o un top-down shooter a livelli, con movimento libero, scorrimento verticale e nemici ad ostacolare il giocatore sul cammino.

Non è che un piccolo arcade insignificante, qualcosa che si può letteralmente programmare con due lire e una sfera bianca con un simbolo al centro. Ma è un ottimo modo per fare pratica e imparare qualcosa con un progetto interamente mio. E nel frattempo, grazie a Brackeys, a GameDev.tv e una certa perseveranza, ho già diversi altri giochi arcade sotto la cintura, tutte esperienze di scrittura di codice che posso rielaborare e riutilizzare per il futuro. Seguire i tutorial su Unity diventa gradualmente più semplice e intuitivo, e mi ritrovo sempre più incline ad anticipare le mosse dei vari istruttori man mano che vado avanti.

Ho ancora parecchio da imparare, e il mio apprendimento non finisce certo qui. Ma, se ripenso a dov’ero un anno fa, quando a malapena sapevo di voler programmare e non avevo la minima idea di cosa fosse un for loop Dio, se sono cambiate le cose da allora.

Perché non c’è niente di più soddisfacente di vedere quel piccolo elettrone muoversi sullo schermo, grazie a un codice che ho scritto interamente da zero.