Diamonds

DIAMONDSTratto 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
  • corridoi sono realizzati tramite 2 mattoni di base
  • gli oggetti preziosi sparsi per il pavimento devono essere raccolti tutti per poter superare il livello
  • 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.

DIAMONDS

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 spEsploratoreSuspEsploratoreDestraspEsploratoreGiuspEsploratoreSinistraspMurospDiamante.

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....

Wall Diamond

Up Right

Down Left

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

  • NamerLivello, il nome interno del livello
  • Caption for the roomPrimi passi…, il nome che appare nella barra del titolo dell’applicazione
  • Width480, la larghezza del gioco (un multiplo della dimensione delle sprite)
  • Height480, l’altezza del gioco
  • Speed20, 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.

 

image Create

Sprite Action Change sprite into spEsploratoreSu
Alla sua prima comparsa riceve l’immagine girato verso l’alto

 

<Left>

If Grid If instance is aligned with grid
If Free If a position is collision free

Begin Start of block
Move Action 1 Start moving in a direction
Sprite Action Change sprite into spEsploratoreSinistra
End 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, Relativeobjects=Only solid) è libera allora gli assegna un movimento selezionando la freccia corrispondente, con Speed=4 e cambia la sprite.

 

<Up>
<Right>
<Down>

Si comporta in modo analogo…

x=0, y=-4
x=+4, y=0
x=0, y=+4

 

Collision Event Wall oMuro

Move Action 1 Start moving in a direction
Set Variable Set variable image_speed to 0
Quando l’esploratore finisce sul muro deve essere fermato, impostando la direzione rappresentata dal quadrato centrale e Speed=0.
Anche l’animazione del movimento deve essere fermata, con image_speed=0.

 

Collision Event Diamond oDiamante

Destroy Action Destroy the instance
Quando l’esploratore trova un diamante lo raccoglie, facendolo scomparire dalla scena tramite Destroy Instance conApplies to=Other.

 

Step Event Step

If Number If the number of instances is a value

Begin Start of block
Restart Game Restart the game
End End of block

A ogni passo del gioco l’esploratore controlla se ha finito di raccogliere i diamanti, effettuando un Test Instance Countcon objectoDiamantenumber0 e operationEqual 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 Cracked Wall alla sprite spMuro e poi aggiungere un evento e le azioni corrispondenti all’oggetto oMuro

image Create

Sprite Action Change sprite into spMuro
Dice Action With chance 1 out of 10 perform next

Begin Start of block
Sprite Action Change sprite into spMuro
End 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 Stone 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 (rLivello1rLivello2, … ) 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 Other event.

Other Event Game Start

Set Score Set the score to 0
Set Caption Set the score caption info
Play Sound Play sound sSottofondo

Quando inizia il gioco

  • azzera il punteggio, new score0
  • aggiungi il punteggio nella barra del titolo dell’applicazione, show scoreshow
  • inizia a suonare la musica di sottofondo, soundsSottofondolooptrue.

Other Event Outside Room

Wrap Action Wrap in both directions when outside

Se esce fuori dal livello allora entra dall’altra parte, directionin both directions.

Collision Event Diamond oDiamante

Destroy Action Destroy the instance
Play Sound Play sound sDiamante
Set Score Set the score relative to 100

Quando l’esploratore trova un diamante lo raccoglie e guadagna 100 punti, new score100Relative.
Viene emesso anche un suono.

Step Event Step

Set Score Set the score relative to -1
If Number If the number of instances is a value

Begin Start of block
Play Sound Play sound sDiamantiFiniti
Sleep Action Sleep 2000 milliseconds
If Next Room If next room exists

Begin Start of block
Next Room Go to next room
End End of block

Else Action Else

Begin Start of block
Highscore Action Show the highscore table
Restart Game Restart the game
End End of block

End 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, …

image Create

Sprite Action Change sprite into spRagnoSu

Other Event Outside Room

Wrap Action Wrap in both directions when outside

Collision Event Wall oMuro

Hor. Reverse Reverse horizontal direction
Ver. Reverse Reverse vertical direction

Se i ragni sbattono sul muro fanno marcia indietro… invertendo la direzione orizzontale e verticale.

Step Event Step

If Grid If instance is aligned with grid

Begin Start of block
Dice Action With chance 1 out of 10 perform next

Begin Start of block
Move Action 1 Start moving in a direction
End End of block

End End of block

Ogni tanto cambiano direzione… scegliendo a caso tra le 4: sinistra-destra, su-giù.

Step Event End Step

If Variable If direction is equal to 0

Begin Start of block
Sprite Action Change sprite into spRagnoDestra
End End of block

Else Action Else
If Variable If direction is equal to 90

Begin Start of block
Sprite Action Change sprite into spRagnoSu
End End of block

Else Action Else
If Variable If direction is equal to 180

Begin Start of block
Sprite Action Change sprite into spRagnoSinistra
End End of block

Else Action Else
If Variable If direction is equal to 270

Begin Start of block
Sprite Action Change sprite into spRagnoGiu
End 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.

 

Other Event Game Start

Set Lives Set lives to 5
Set Score Set the score to 0
Set Caption Set the score caption info
Play Sound Play sound sSottofondo

Quando inizia il gioco

  • riceve anche un certo numero di vite, new lives5
  • aggiunge anche le vite alla barra del titolo dell’applicazione, show livesshow

 

Other Event No More Lives

Highscore Action Show the highscore table
Restart Game Restart the game

Se perde tutte le vite si ricomincia da capo.

 

Collision Event … oRagno

Play Sound Play sound sColpito
Sleep Action Sleep 2000 milliseconds
Set Lives Set lives relative to -1
Current Room 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

Collision Event Red Potion oPozione

Destroy Action Destroy the instance (Applies toOther)
Play Sound Play sound sPozione (soundsPozioneloopfalse)
image Change instance into oScheletro (ObjectoRagnochange intooScheletroperform eventsnot)
image Set Alarm 0 to 200 (ObjectoScheletronumber of steps200in alarm noAlarm 0)

Tutti i ragni diventano scheletri dotati di un allarme con 200 passi.

 

Gli scheletri

Duplica l’oggetto oRagno e mantieni gli eventi: StepCollisione con il muroOutside Room (quindi elimina Create e End Step).
Aggiungi la gestione dell’allarme

image Alarm 0

image Change instance into oRagno (Selfonchange intooRagnoperform eventsnot)

 

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.