Tratto da Treasure.
I giochi di labirinto sono una categoria di videogioco molto popolare e sono semplici da realizzare con Game Maker.
Nei giochi di labirinto ogni livello è un labirinto.
Per uscire dal labirinto, il personaggio deve raccogliere tutti gli oggetti disseminati nei corridoi, evitando di venire a contatto con dei mostri che girano per i livelli.
Progetto
In pratica è un clone di PACMAN anche se le sprite sono completamente diverse
- l’oggetto principale del gioco è controllato dal giocatore ed è raffigurato come un esploratore
- i corridoi sono realizzati tramite 2 mattoni di base
- gli oggetti preziosi sparsi per il pavimento devono essere raccolti tutti per poter superare il livello
- i mostri sono degli animali repellenti che si muovono continuamente
- se l’esploratore viene a contatto con un mostro perde una vita
- se l’esploratore raccoglie un oggetto speciale diventa invincibile contro i mostri
- nel passaggio da un livello all’altro aumenta il numero di mostri oppure i corridoi diventano più intricati ma si presentano anche delle aperture nel perimetro del labirinto che aiutano a evitare i mostri quando si avvicinano troppo
- compaiono, di tanto in tanto, anche dei bonus.
Il progetto è abbastanza semplice ma alcuni aspetti del gioco richiederanno un approfondimento
- il personaggio si muove nelle 4 direzioni e quindi è necessario farlogirare quando cambia direzione
- anche i mostri si girano e in più si muovono autonomamente.
In una versione più evoluta del gioco
- i mostri potrebbero avere comportamenti diversi (uno di loro potrebbe addirittura inseguirel’esploratore)
- si potrebbero aggiungere alcune delle idee presenti nel tutorial MAZE…
Il gioco
Realizziamo una prima versione del gioco nella quale l’esploratore, per passare di livello, deve semplicemente raccogliere dei diamanti sparsi lungo il percorso.
Le sprite
Tramite il comando Resources > Create Sprite aggiungi al progetto 6 nuove sprite dando il nome specificato spEsploratoreSu, spEsploratoreDestra, spEsploratoreGiu, spEsploratoreSinistra, spMuro, spDiamante.
Associa a ogni sprite le immagini corrispondenti, si trovano in Maze > Maze – Platform, tramite il comando Menu contestuale > Properties... > Edit Sprite > File > Add from File....
Osserva che le sprite per l’esploratore sono delle strisce formate da 8 immagini che formeranno le animazioni nelle 4 direzioni…
Alcune immagini potrebbero essere leggermente più piccole del quadrato 32×32.
Per evitare problemi quando dovremo gestire il movimento e le collisioni deselezioniamo Precise collision checking e impostiamo Full image per Bounding box.
Gli oggetti
Adesso creiamo i 3 oggetti.
Il diamante
Gli assegniamo il nome oDiamante, la sprite spDiamante come immagine, non selezioniamo la casella Solid.
L’oggetto diamante non fa altro, quindi non ci sarà bisogno di specificare alcun comportamento.
Il muro
Gli assegniamo il nome oMuro, la sprite spMuro come immagine e selezioniamo la casella Solid.
L’esploratore
Gli assegniamo il nome oEsploratore, la sprite spEsploratoreSu come immagine, non selezioniamo la casella Solid.
Si tratta dell’oggetto controllato dal giocatore tramite le frecce direzionali.
Presenta una certa complessità perché dovrà avere diversi comportamenti.
Il livello
Realizziamo un livello.
Impostiamo alcuni valori nella barra degli strumenti
- Snap X: 32
- Snap Y: 32
e nelle schede presenti a sinistra della finestra delle proprietà
settings
- Name: rLivello, il nome interno del livello
- Caption for the room: Primi passi…, il nome che appare nella barra del titolo dell’applicazione
- Width: 480, la larghezza del gioco (un multiplo della dimensione delle sprite)
- Height: 480, l’altezza del gioco
- Speed: 20, la velocità del gioco
backgrounds
- Draw background color, disegna lo sfondo
- Color: …, scegli un colore
objects
- seleziona nel menu in basso oMuro e posizionalo più volte sul livello per formare un labirinto (utilizza i tasti sinistro e destro del mouse)
- seleziona oDiamante e spargine sul pavimento del livello
- seleziona oEsploratore e posizionalo alla sua posizione iniziale.
I comportamenti
Aggiungiamo all’esploratore un certo numero di eventi, Add Event, e per ognuno di essi le azioni corrispondenti che deve eseguire.
Create
<Left>
If a position is collision free
Start moving in a direction
Change sprite into spEsploratoreSinistra
End of block
Quando viene premuto il tasto sinistro, se l’esploratore è allineato con la griglia di gioco e se la cella alla sua sinistra (x=-4, y=0, Relative, objects=Only solid) è libera allora gli assegna un movimento selezionando la freccia corrispondente, con Speed=4 e cambia la sprite.
<Up>
<Right>
<Down>
x=+4, y=0
x=0, y=+4
oMuro
Set variable image_speed to 0
oDiamante
Step
Restart the game
End of block
A ogni passo del gioco l’esploratore controlla se ha finito di raccogliere i diamanti, effettuando un Test Instance Countcon object: oDiamante, number: 0 e operation: Equal to.
In caso di risposta affermativa fa ripartire il gioco.
Finito!
La prima versione del gioco è pronta.
Giocaci per un po’ e poi prova a fare delle modifiche
- cambia le immagini degli oggetti
- ingrandisci il livello e crea un vero labirinto
- fai andare più veloce l’esploratore…
- fai andare più piano le animazioni dell’esploratore…
- fai andare più piano tutto il gioco…
- …
Alcuni miglioramenti
Aggiungiamo al gioco delle rifiniture per renderlo piùaccattivante: più livelli, suoni e punteggi.
Il muro
Il muro viene rappresentato, in modo casuale, con 2 immagini diverse.
Bisogna aggiungere la seconda immagine alla sprite spMuro e poi aggiungere un evento e le azioni corrispondenti all’oggetto oMuro
Create
With chance 1 out of 10 perform next
Change sprite into spMuro
End of block
La prima azione Change Sprite assegna 0 come subimage.
La seconda assegna 1 come subimage (il muro rotto) ma soltanto 1 volta su 10 perché dipende dal lancio del dado consides=10.
I livelli
Aggiungiamo al progetto una risorsa nella cartella Backgrounds che utilizzeremo come sfondo, pavimento, per i livelli.
Utilizziamo il comando Resources > Create Backgrounds e assegnamo alla risorsa il nome bSfondo e l’immagine tramite Load Background.
Aggiungiamo lo sfondo al livello impostando le proprietà nella scheda backgrounds del livello
- Visible when room starts
- Tile Horizontal, l’immagine deve essere ripetuta perché è piccola…
- Tile Vertical
Adesso realizza alcuni livelli (rLivello1, rLivello2, … ) riciclando il primo livello tramite Menu contestuale > Duplicate.
In particolare, realizza un livello con delle aperture nel perimetro esterno di muri: permetteranno all’esploratore di passare velocemente da un lato del labirinto al lato opposto.
Suoni e musica
Per aggiungere dei suoni in corrispondenza di eventi particolari e una musica di sottofondo, crea 3 risorse nella cartellaSounds e imposta, con Load Sound, i suoni corrispondenti
- sDiamante, sarà emesso quando l’esploratore raccoglie un diamante
- sDiamantiFiniti, alla fine del livello
- sSottofondo, una piacevole musica di sottofondo sempre in azione.
L’esploratore
I comportamenti dell’esploratore devono essere aggiornati per rendere effettive le novità che vogliamo introdurre.
Gli eventi Game Start e Outside Room si trovano nella cartella Other event.
Game Start
Set the score caption info
Play sound sSottofondo
Quando inizia il gioco
- azzera il punteggio, new score: 0
- aggiungi il punteggio nella barra del titolo dell’applicazione, show score: show
- inizia a suonare la musica di sottofondo, sound: sSottofondo, loop: true.
Outside Room
Se esce fuori dal livello allora entra dall’altra parte, direction: in both directions.
oDiamante
Play sound sDiamante
Set the score relative to 100
Quando l’esploratore trova un diamante lo raccoglie e guadagna 100 punti, new score: 100, Relative.
Viene emesso anche un suono.
Step
If the number of instances is a value
Play sound sDiamantiFiniti
Sleep 2000 milliseconds
If next room exists
Go to next room
End of block
Else
Show the highscore table
Restart the game
End of block
End of block
A ogni passo del gioco l’esploratore perde un punto (questo per evitare che il giocatore si appisoli…) e controlla se ha finito di raccogliere i diamanti.
Se ha finito il livello emette un suono, aspetta qualche secondo e poi decide tra caricare il prossimo livello, se esiste, oppure visualizzare la classifica e ricominciare il gioco dall’inizio.
Prova!
Con i suoni, i punti e tanti livelli il gioco comincia a farsi interessante!
Prova a giocarci.
Fai qualche ritocco sui valori delle variabili.
Cosa manca al gioco per essere veramente avvincente?
I ragni
Al gioco manca il brivido!
Bisogna aggiungere gli animali più repellenti che esistono e aizzarli contro l’esploratore!
In questa fase di sviluppo del gioco ci basta che i ragni si muovano autonomamente, anche se lo fanno in modostupido.
I ragni
I ragni, per certi aspetti, assomigliano all’esploratore: sono rappresentati tramite 4 animazioni, se escono dal bordo rientrano dal lato opposto, …
Create
Outside Room
oMuro
Reverse vertical direction
Se i ragni sbattono sul muro fanno marcia indietro… invertendo la direzione orizzontale e verticale.
Step
With chance 1 out of 10 perform next
Start moving in a direction
End of block
End of block
Ogni tanto cambiano direzione… scegliendo a caso tra le 4: sinistra-destra, su-giù.
End Step
Change sprite into spRagnoDestra
End of block
Else
If direction is equal to 90
Change sprite into spRagnoSu
End of block
Else
If direction is equal to 180
Change sprite into spRagnoSinistra
End of block
Else
If direction is equal to 270
Change sprite into spRagnoGiu
End of block
Siccome cambiano direzione autonomamente, è necessario controllare in che direzione si muovono per assegnare loro l’animazione giusta.
Si può fare meglio…
L’esploratore
È necessario apportare degli aggiornamenti nei comportamenti dell’esploratore per tenere conto della presenza dei ragni.
Game Start
Set the score to 0
Set the score caption info
Play sound sSottofondo
Quando inizia il gioco
- riceve anche un certo numero di vite, new lives: 5
- aggiunge anche le vite alla barra del titolo dell’applicazione, show lives: show
No More Lives
Restart the game
Se perde tutte le vite si ricomincia da capo.
… oRagno
Sleep 2000 milliseconds
Set lives relative to -1
Restart the current room
Se l’esploratore viene a contatto con un ragno perde una vita e ricomincia lo stesso livello.
Prova!
Adesso il gioco è più appassionante perché bisogna continuamente controllare i movimenti dei ragni per evitare di rimanere senza vite prima di aver finito l’ultimo livello!
La pozione magica
Mancano ancora degli oggetti speciali che rendano il gioco ancora più imprevedibile
- la pozione magica contro i ragni
- la gemma sfuggente
- …
Se l’esploratore raccoglie la pozione magica tutti i ragni diventano degli scheletri.
Gli scheletri continuano a muoversi come i ragni ma sono innocui: al contatto con l’esploratore scompaiono e ricompaiono alla posizione iniziale come ragni.
Se passa un certo intervallo di tempo lo scheletro ritorna alla posizione iniziale e ridiventa un ragno.
La pozione
L’esploratore gestisce la collisione con la pozione
oPozione
Play sound sPozione (sound: sPozione, loop: false)
Change instance into oScheletro (Object: oRagno, change into: oScheletro, perform events: not)
Set Alarm 0 to 200 (Object: oScheletro, number of steps: 200, in alarm no: Alarm 0)
Tutti i ragni diventano scheletri dotati di un allarme con 200 passi.
Gli scheletri
Duplica l’oggetto oRagno e mantieni gli eventi: Step, Collisione con il muro, Outside Room (quindi elimina Create e End Step).
Aggiungi la gestione dell’allarme
Alarm 0
Finito?
Adesso il gioco presenta dei momenti difficili intervallati da attimi di tranquillità… potrebbe diventare un gioco interessante con l’aggiunta di un certo numero di livelli originali e nella giusta progressione.