giovedì 11 marzo 2010

Fare un Videogioco: Curva d'apprendimento (Parte 1)

Avete dunque deciso di creare videogiochi, e avete anche scelto uno dei tre metodi precedentemente illustrati per farlo (vedi il post precedente). E ora? Cosa devi fare? Semplicemente imparare! Per fare questo (e per farlo bene) si deve partire dalle basi per arrivare a un gioco complesso come un platform o un RPG.

Curva d'apprendimento

Esaminerò la curva d'apprendimento da utilizzare principalmente per la programmazione . La regola d'oro è fare giochi per IMPARARE a farli, non tanto per farli.

Grafica ed input

Prima di tutto si deve imparare a gestire la grafica e l'input, le cose fondamentali in un videogioco. Per fare questo si può iniziare con giochi semplicissimi, come ad esempio il gioco del Tris, o un semplice gioco di carte, come rubamazzetto o straccia camica.


Un semplice gioco del Solitario

Ovviamente per iniziare non si deve fare subito una versione con intelligenza artificiale, dato che potrebbe complicare troppo il programma (leggi regola d'oro!). Di conseguenza si può fare una versione da giocare in due in cui i due giocatori si alternano. Una volta volta fatta maggior esperienza con la programmazione, si può tornare sui primi giochi per implementare l'intelligenza artificiale.

Io, come primissimo gioco, feci il Tris per due giocatori. Ecco qui l'eseguibile

Movimento, animazioni e timing

Ora che avete preso confidenza con la grafica e l'input, potete iniziare a darvi da fare con giochi in cui sono previsti oggetti in movimento ed immagini animate.

Per fare questo, bisogna innanzitutto temporizzare il gioco. Questo perchè il computer è in grado di eseguire innumerevoli operazioni al secondo, e pertanto se si tutti si muovesse alla velocità del computer si otterrebbe solo un guazzabuglio incomprensibile. Bisogna perciò fornire all'elaboratore un certo tempo di pausa da rispettare, in modo che, per farci vedere un movimento percepibile o un animazione comprensibile, il computer interrompa l'esecuzione del programma per un certo periodo di tempo, portando così il gioco ad avere un certo numero di fps (frame al secondo).

Il movimento si implementerà fornendo un oggetto di due variabili fondamentali: x e y. Tali variabili verranno incrementate o decrementate (a seconda della direzione da fargli assumere) e i loro valori saranno successivamente utilizzati per disegnare sullo schermo l'immagine. Maggiore è la variazione di x e y, più veloce (ma anche più scattoso se varia di molto) sarà il movimento dell'oggetto.



Duck hunt, perfetto esempio per allenarsi con il movimento e l'animazione

L'animazione consiste nel cambiare l'immagine visualizzata in un dato momento in una molto simile ma con lievi differenze, in modo da creare l'illusione del movimento. Sfrutta anch'essa il timing, dato che tempi di pausa minori (ovvero un frame rate più alto) danno animazioni più veloci e fluide.

E' bene fare almeno un paio di giochi di questo tipo, come Space Invaders o Pong. Personalmente, subito dopo il Tris, feci un clone semplificato da giocare col mouse di Duck Hunt, il gioco dove si deve sparare alle papere. Trovate questo giochino qui

Ora vi potrebbe venir voglia di gettarvi immediatamente nello sviluppo di un giocone serio come un MMORPG o FPS online, raccogliendo dalla rete i pezzi di codici utili e mettendoli insieme. Pessima idea. Otterreste solo un enorme ammasso di codice incomprensibile, che non riesce a fare quasi niente e che voi non avete idea di come funzioni. Non fate il mio stesso errore e seguite tutto passo per passo (rileggete la regola d'oro!)

IA, fisica e diversi livelli
Una volta fatta pratica con la grafica la gestione degli eventi si può iniziare a fare giochi più complessi. I giochi che avrai fatto finora avevano un solo livello, movimenti basilari e Intelligenza Artificiale praticamente inesistente. E' dunque il momento di approfondire tali concetti.

Per poter gestire un gioco strutturato su più "stati" (stato iniziale con schermata del menù, stato del primo livello, stato del secondo...) si deve implementare un sistema di "stati macchina". Il computer deve poter gesterire determinati eventi di certi stati indipendentemente dagli altri, e per fare ciò ci sono diversi modi. Per il mio engine di gioco isometrico ho usato un sistema basato sulla programmazione a classi, ma si potrebbe farne uno anche con uno meno performante con un semplice switch (o costrutto di selezione multipla)


Breakout (Conosciuto anche come Arkanoid) richiede un corretto calcolo con direzione e velocità per il movimento della palla

Alcuni giochi richiedono una fisica del movimento realistica. Si pensi ad esempio un gioco in cui vi è una palla che rimbalza: bisogna fare un calcolo dell'influenza della gravità sul movimento della palla per poter dare una sensazione realistico del rimbalzo. Per fare ciò, basta fare determinati calcoli che si basano sulle formule fisiche che regolano quegli eventi nel nostro mondo, in modo da fornire a x e y variazioni adeguate per un movimento fisicamente corretto. Giochi come Puzzle Bubble o Breakout sarebbero adatti per allenarsi sulla fisica.

Creare un clone di Pacman permette di allenarsi sull'IA con i nemici che inseguono il personaggio

L' IA può essere molto difficile da implementare. Il caso base, nel caso di un gioco dal quale si deve scappare da un nemico, è quello il cui il nemico in questione insegua il protagonista fino a che lo raggiunge. E' l'esempio più basilare, ed infatti è più limitato. Un caso di IA più avanzata si ha se il nemico, prima di inseguirvi, chiamasse altri nemici per dargli manforte. Nel caso in cui il protagonista potrebbe reagire sparando, il nemico dovrebbe tentare di evitare i proiettili. Più l'IA è avanzata, più sarò appagante e realistico il gioco, ma anche tremendamente più difficile da implementare. In questo caso, per impratichirsi, sarebbe utile fare una propria versione di Pacman, oppure implementarla nel vostro gioco del Tris

Il vostro giocone serio
Ora, dopo esservi impratichiti con giochi man mano sempre più complessi, dovreste essere in grado di sviluppare il vostro gioco dei sogni.

Non pensate di potervi gettare più o meno allo sbaraglio come avete fatto finora. A seconda della categoria di gioco, la fase di progettazione dovrà essere più o meno lunga ma in ogni caso fondamentale. Se per esempio volete fare il vostro RPG, dovete

  • Progettare l'engine (gestione grafica, input, dialoghi, inventario, battle system, npc...)
  • Scrivere la sceneggiatura (storia, dialoghi, side-quest, eventi che modificano il gioco...)
  • Inventare i nemici (disegnarli, indicare caratteristiche, eventuali premi...)
  • Inventare i personaggi (disegnarli, inserirli nella storia, indicare caratteristiche ed oggetti utilizzabili...)
  • Inventare tutti gli oggetti (disegnarli, indicare le caratteristiche, cosa fanno...)
  • Inventare tutti i luoghi da visitare (disegnarli, inserirli nella storia, prevedere eventi...)
Fasi più o meno presenti in tutti i giochi più corposi. Se queste premesse non ti scoraggiano... beh, mettiti al lavoro!


Sulla prossima parte di Curva D'apprendimento tratterò invece la metodologia da seguire per gli editor e le engine! Se qualche link non dovesse funzionare o i giochi dovessero dare problemi, non esitate a dirmelo!


2 commenti:

  1. Grazie dei suggerimenti

    RispondiElimina
    Risposte
    1. Prego, sono felice che questa guida ti sia stata d'aiuto!

      Elimina