giovedì 21 aprile 2011

HADOKEN!!!


Fanart che ho commissionato al prode Aurelio Mazzara per un regalo di compleanno. I colori naturalmente sono miei.

venerdì 15 aprile 2011

FACCIAMO UN (VIDEO)GIOCO? - PARTE 2


Il videogioco che ho iniziato a realizzare e di cui ho parlato nel precedente post sarà suddiviso sostanzialmente in due parti: una di esplorazione del labirinto ed una di combattimento e gestione dei personaggi creati dai giocatori.
Visto che queste due parti si sovrappongono molto poco, possiamo tranquillamente iniziare dalla prima senza preoccuparci troppo, per il momento, della seconda.
Concentriamoci quindi sull'esplorazione del labirinto.

Primo problema: per avere un labrinto da esplorare, bisogna crearlo! Come si può fare?

Ricorderete che l'idea iniziale era quella di impostare il gioco in modo procedurale, quindi la creazione dei labirinti dev'essere automatica.
Esistono diversi algoritmi per generare labirinti. Quello che ho scelto è chiamato "Randomized depth-first search" implementato con una variante detta "Recursive backtracking". Al di là dei nomi, che sembrano complicatissimi e spaventano, il procedimento in realtà è relativamente semplice:
1 - Il labirinto può essere pensato come una griglia quadrata di celle, che all'inizio sono tutte "piene" (come se si trovassero sepolte all'interno di una montagna).
2 - Si individua a caso una cella di partenza ad un'estremità del labirinto e la si "svuota" (come se si scavasse via un cubo di roccia dentro la montagna).
3 - Si controlla quali celle tra le confinanti sono "piene", considerando un raggio di 2 celle (cioè: non solo le celle confinanti, ma anche quelle dietro di esse). All'inizio, naturalmente, tutte le celle sono piene e quindi tutte le direzioni sono "ammissibili" per costruire il labirinto. Il dettaglio di considerare 2 celle anzichè 1 è molto importante, ma non voglio addentrarmi troppo in tecnicismi, quindi non sto a spiegarvi il motivo (quiz a sorpresa: chi riesce ad arrivarci da solo?).
4 - Si sceglie a caso una direzione tra quelle ammissibili e si "scavano" due celle consecutive, svuotandole.
5 - Ci si sposta nell'ultima cella appena svuotata.
6 - Si continua a "scavare" ripetendo i passaggi 3-4-5 e cambiando direzione a caso, fino ad arrivare a una cella dove non è più possibile "scavare" in nessuna direzione. Questa cella è l'uscita. Se guardiamo bene, ci accorgiamo che il percorso finora è privo di ramificazioni ed occupa solo una porzione relativamente piccola della griglia, quindi non è un granchè come labirinto.
7 - Per aggiungere le ramificazioni, si ripercorre all'indietro il percorso "scavato", spostandosi di due passi (due celle) alla volta, fino a trovarne una da cui si può ricominciare a "scavare" in un'altra direzione.
8 - Si "scava" fino a quando è possibile, poi di nuovo si ritorna indietro passo-passo fino al punto in cui si può ricominciare a "scavare" in un'altra direzione, e così via fino a quando non si è ritornati alla cella di partenza e non è più possibile scavare in nessuna direzione. Il labirinto ora è completo, però è composto solo da corridoi, senza stanze.
9 - Per aggiungere anche le stanze, si possono distribuire a caso nella mappa un certo numero di blocchi quadrati di 2 x 2 celle vuote, "scavando" le celle "piene" che cadono all'interno di quei blocchi. Il risultato saranno stanze dalla forma irregolare, che derivano dall'interazione casuale tra la geometria dei corridoi e quella dei blocchi 2 x 2.

Che fatica! A leggerlo sembrava più semplice!
Però almeno adesso i labirinti creati automaticamente hanno un aspetto decente, inoltre posso generarne un numero pressochè infinito, ognuno diverso dall'altro... e tutto quello che deve fare il giocatore è specificare lunghezza e larghezza della griglia! (altro quiz a sorpresa: per un risultato ottimale, lunghezza e larghezza del labirinto devono essere due numeri dispari e anche la cella iniziale deve trovarsi in posizione "dispari". Sapreste spiegarmi perchè?)

Proseguendo, ora che abbiamo il nostro labirinto possiamo popolarlo di elementi "statici" (cioè: che non si muovono).
- Entrata e uscita le abbiamo già individuate. Per aggiungere un pizzico di sfida in più, mettiamo un mostro che funga da "boss di fine livello" proprio davanti all'uscita.
- Poi passiamo ai forzieri. Per semplicità li collocheremo alla fine di tutti i "vicoli ciechi" (terzo quiz a sorpresa: come posso far capire al computer che una cella si trova alla fine di un vicolo cieco e non invece in mezzo a un corridoio?). Alcuni forzieri conterranno un tesoro ed altri una trappola, con una probabilità che dipende dalle impostazioni definite dal giocatore.
- Infine, visto che utilizzando l'algoritmo "depth-first search" i vicoli ciechi (e quindi i forzieri) sono molto pochi, dobbiamo aggiungere anche ulteriori tesori e trappole distribuiti a caso nei corridoi e nelle stanze. Anche in questo caso il numero di tesori e di trappole dipende dalle impostazioni definite dal giocatore.

Uno dei possibili risultati, disegnato con caratteri di testo, potete vederlo nella figura all'inizio di questo articolo. E' la rappresentazione di un labirinto generato automaticamente in una griglia di 21 x 21 celle. Le impostazioni definite dall'utente sono solo 4: lunghezza, larghezza, frequenza dei tesori, frequenza delle trappole. Tutto il resto è generato dal motore di gioco.

Legenda:
# = Muro
* = Casella di partenza
$ = Forziere contenente un tesoro
T = Forziere contenente una trappola
+ = Tesoro lungo un corridoio o in una stanza
! = Trappola lungo un corridoio o in una stanza
B = Boss di fine livello
@ = Teletrasporto (uscita)

Nel prossimo articolo ci occuperemo della schermata che riproduce la visuale "in soggettiva".

mercoledì 13 aprile 2011

COMPITO IN CLASSE DI TERZA ELEMENTARE


Tema: spiega con parole tue perchè l'idea di un Paese senza giudici è una vaccata mondiale.

(immagine tratta dal sito http://www.repubblica.it)

venerdì 8 aprile 2011

FACCIAMO UN (VIDEO)GIOCO? - PARTE 1


Come ho già avuto modo di scrivere, sono un appassionato di videogiochi e mi diverto anche a realizzarli, soprattutto con Flash. Ne ho già fatti alcuni in passato, potete trovarli qui, qui e qui (ci sarebbe in ballo anche un quarto progettino, ma per ora mantengo il riserbo. Rilascierò qualche anticipazione più avanti, quando sarà il momento... ^__^).

Ultimamente ho deciso di rimettermi all'opera, con calma, senza una scadenza precisa e condividendo sul blog tutte le fasi della lavorazione (ma senza entrare nei noiosi dettagli della programmazione).
Non sono un professionista, quindi molte delle considerazioni e delle soluzioni tecniche che adotterò saranno inefficienti. Pazienza, non si può avere tutto dalla vita.

Il gioco che vorrei fare è ad ambientazione fantasy ed appartiene al genere dei cosiddetti "dungeon crawler" con vista "in soggettiva". Per capirci, intendo ispirarmi a miti degli anni '80-'90 come Eye of the Beholder o Dungeon Hack, dove un gruppo di avventurieri deve trovare la via d'uscita in un complesso labirinto, mentre tenta di sopravvivere ai combattimenti contro le creature che lo popolano. Nell'immagine all'inizio del post potete vedere come mi immagino grossomodo la schermata di gioco.

Naturalmente per questioni di tempo dovrò tagliare brutalmente sulla parte grafica e sulle funzionalità di gioco, e questo è un bel problema! Infatti, se il gioco è bruttino e le meccaniche sono pure scarne, il tutto diventa rapidamente noioso.

Come posso fare allora perchè valga la pena di realizzare quello che ho in mente di fare? Come posso produrre un gioco che sia almeno un minimo divertente e che non finisca subito?
Seguendo due linee-guida:
1 - Pensare in piccolo = non posso creare un nuovo Final Fantasy, però posso fare un giochino per passare il tempo ogni tanto.
2 - Adottare un'impostazione "procedurale" = invece di inserire tanti elementi singoli e specifici, disegnati e programmati uno ad uno, è meglio individuare una serie di fattori che possono avere un certo numero di variazioni e fare in modo che sia il motore di gioco a mescolarli più o meno casualmente per generare ogni volta combinazioni diverse, facendo così in modo che il tutto sembri più vario di quanto non sia in realtà.

Ecco spiegato perchè si è fatta strada nella mia mente l'idea del dungeon crawler con vista in soggettiva:
- E' relativamente semplice da programmare
- Ha un impatto visivo più interessante rispetto ad altri tipi di visualizzazione (es. dall'alto oppure laterale), quindi posso fare una figura decente anche con una grafica mediocre
- Può essere strutturato in modo procedurale con estrema facilità (labirinti generati casualmente, grande possibilità di personalizzare le caratteristiche dei labirinti e dei personaggi, ecc...)
- Sorprendentemente in giro per la rete non ho trovato nessun giochino Flash dello stesso tipo!!!

Nel prossimo post di questa serie entrerò un po' più in dettaglio nel game design.

giovedì 31 marzo 2011

I GRADI NEL WING CHUN... E COMPLIMENTI AL SI-HING!


Sono lieto di annunciare che domenica scorsa allo stage nazionale EMAS di Roma il mio Si-Hing (istruttore) di Wing Chun, Piero Pedrazzi, ha brillantemente superato l'esame da 1° Grado Tecnico!
Nella foto qui sopra lo potete vedere a destra, accanto al Sifu (maestro) Marco Mattioni, che nella stessa occasione ha ricevuto addirittura il 6° Grado Praticante!

Non sapete cosa significano questi gradi? Ecco allora una spiegazione basata sulla mia esperienza personale fino ad oggi (alcune informazioni le ho apprese solo oralmente e potrei non essere accurato al 100%, inoltre possono variare da federazione a federazione, quindi prendetele con beneficio d'inventario). In ogni caso una cosa è certa: al contrario delle arti marziali giapponesi, per distinguere i gradi non si utilizzano i colori delle cinture ma quelli di maglia e pantaloni.
Più o meno la progressione è questa:

Principiante
- Divisa = maglia bianca con decorazioni nere; pantaloni neri.

Gradi Allievo (1°-12° SG)
- Divisa dal 1° al 3° SG = maglia bianca con decorazioni nere; pantaloni neri.
- Divisa dal 4° al 7° SG = maglia bianca o grigia con decorazioni nere; pantaloni neri.
- Divisa dall'8° al 12° SG = maglia nera con decorazioni bianche; pantaloni neri. [attualmente mi trovo in questo gruppo, perchè sono 8° SG e sto preparando l'esame per 9° SG]

Gradi Tecnico (1°-4° TG)
- Divisa = maglia nera con decorazioni rosse; pantaloni neri con baffi rossi sottili.

Gradi Praticante (dal 5° PG in poi)
- Sono la prosecuzione dei Gradi Tecnico e la divisa in teoria è identica, anche se quasi tutti sono anche Sifu (maestri) e indossano la divisa corrispondente (vedi sotto).

Qualifiche da insegnante
Sono parzialmente slegate dalle altre divise:
- Assistente istruttore (titolo di "Si-Hing", almeno 8° SG) = le decorazioni della maglia nera sono blu anzichè bianche. [da quest'anno ho l'onore di essere anche assistente istruttore e se tutto va bene prima o poi dovrebbe arrivarmi l'apposita divisa che ho ordinato]
- Istruttore (titolo di "Si-Hing", almeno 8° SG, ma consigliato almeno 11° SG - 1° TG) = normale divisa del proprio grado.
- Maestro (titolo di "Sifu", almeno 3°-4° TG) = la maglia è rossa con decorazioni nere; inoltre i baffi sui pantaloni sono più grandi.

Casi particolari
- In caso di allenamenti speciali ("stage") con Sifu o Tecnici di alto grado, è buona norma per tutti i Gradi Allievo indossare la maglia bianca, a meno che il Sifu o il Tecnico di riferimento non conceda di indossare le maglie grige o nere normalmente utilizzate in allenamento.
- Se un istruttore è un Grado Allievo e risulta "caposcuola" -es: nella sua palestra non ci sono gradi superiori al suo- per la sola maglia possono essere ammesse le decorazioni rosse anzichè bianche (non sono invece ammessi i baffi rossi sui pantaloni).
- In alcune federazioni internazionali il maestro capo-scuola mondiale indossa una divisa diversa da tutti gli altri (es. maglia gialla anzichè rossa).

Che casino!
E' vero, però semplificando ci sono quattro categorie principali che è possibile distinguere rapidamente ad occhio:
- le "maglie bianche" (fino al 7° SG), con la maglia bianca oppure grigia
- le "maglie nere" (fino al 12° SG), con la maglia nera e bianca
- i "tecnici" (dal 1° TG in poi), con la maglia nera e rossa ed i baffi rossi sui pantaloni
- i Sifu (maestri, almeno 3°-4° TG), con la maglia rossa ed i baffi rossi sui pantaloni

D'accordo, ma cosa significano in pratica i gradi?
Come in tutte le arti marziali, i gradi corrispondono ad un certo livello di abilità tecnica acquisita.
- Nei Gradi Allievo si impara la maggior parte dei movimenti che compongono il Wing Chun. E' un programma molto ampio, ma anche discretamente approfondito, che comprende tra l'altro il combattimento libero armato e disarmato, in piedi e al suolo, contro uno o più avversari.
- Per avere un metro di paragone, la "cintura nera" delle arti marziali giapponesi corrisponde grossomodo alla "maglia nera" (8° SG), con la differenza che nel Wing Chun si tende a raggiungere l'8°SG con un lieve anticipo rispetto alla cintura nera (personalmente ci ho impiegato 4 anni).
- Gli ultimi gradi Allievo (11° e 12° SG) sono particolari perchè corrispondono ad un completamento e ad un perfezionamento di tutto ciò che è stato appreso fino a quel momento. Da quanto ho visto è una mole di lavoro notevole e anche piuttosto complessa.
- Il passaggio da 12° SG a 1° TG è un'altra transizione molto importante e non solo da un punto di vista simbolico: da quel momento in poi le tecniche vengono raffinate, curate nei minimi dettagli e interiorizzate in modo molto più spinto rispetto a prima. Questo lavoro di cesello è difficile, ma permette un miglioramento molto pronunciato. In parole povere, la differenza tra un Grado Allievo e un Grado Tecnico si vede (e posso dire per esperienza diretta che si sente... dolorosamente!). Raggiungere il 1° TG può richiedere, da quanto ho visto, una media di 6-8 anni di pratica costante.
- Altro grande passaggio (e qui siamo nella stratosfera) è quello da 4° TG a 5° PG. Questo perchè si tratta dell'ultimo esame previsto nel Wing Chun (lo si raggiunge dopo una ventina d'anni di pratica) e significa che il praticante ha imparato tutto il sistema. Infatti i gradi dal 5° PG in poi cambiano anche nome, da Gradi Tecnico a Gradi Praticante.
- I gradi successivi al 5° PG sono assegnati ad honorem dopo un certo numero di anni aggiuntivi di pratica e insegnamento (credo 4 per ogni grado).
- Alcuni siti internet riportano che durante la pratica attiva si può arrivare al massimo fino al 10° PG, mentre l'11° PG viene assegnato quando un maestro 10° PG "va in pensione" (cioè smette di insegnare) ed il 12° PG viene assegnato solo postumo. Per il momento non ho conosciuto nessuno oltre il 7° PG, quindi potrò confermarvi questo dettaglio quando lo vedrò.