Tratto da: Street Racing – Written by Mark Overmars using GameMaker – Images by Martin Bérubé and Sander Steenhuis – Music by Jacob Habgood
Si tratta di un racing game, cioè di una simulazione di guida con un mezzo di trasporto
- guidi l’auto rossa
- utilizza le 4 frecce per andare a destra, sinistra, avanti, indietro
- evita le auto nella tua direzione e quelle di fronte
- per ogni incidente perdi una vita
- per non rimanere a secco raccogli la tanica di benzina che compare di tanto in tanto sulla strada
- stai attento alla macchina della polizia perché cercherà di speronarti!
Il movimento
Realizziamo il controllo della macchina rossa.
Scoprirai che la macchina in realtà rimane ferma mentre è lo sfondo che scorre verso il basso!
Risorse
Crea le risorse di base
TIPO | NOME | FILE | |
---|---|---|---|
Sprite | spr_racing | sprite_racing.png | |
Sound | snd_music | music.mid | |
snd_horn | horn.wav | ||
Background | back_game | background.png | vedi dopo |
Object | obj_car_racing | spr_racing | |
Room | room_game |
Note
- Per l’auto è sufficiente una sola immagine
- Scegli liberamente la musica di sottofondo (.mid) e il suono per il clacson (.wav)
- L’immagine di sfondo prevede già le due corsie e ha uno spazio a destra per i vari contatori, messaggi, …
Il livello
Nella scheda backgrounds imposta
- Visible when room starts
- back_game (tramite il pulsantino a destra)
- Tile Vert.
- Vert. Speed: 3
Nella scheda objects
- posiziona un’auto al centro della strada.
Nella scheda settings imposta
- Speed: 40
Il risultato finale dovrebbe essere
In questo modo l’immagine dello sfondo scorre continuamente verso il basso (3) e il livello viene tassellato verticalmente (Tile Vert.).
Prova a lanciare l’applicazione!
obj_car_racing
L’auto deve rispondere ai comandi corrispondenti alle 4 frecce e suonare il clacson.
Inserisci gli eventi di seguito con le azioni corrispondenti.
Create
Play sound snd_music; looping: true
L’auto ha velocità verticale nulla…
Suona per sempre la musica di sottofondo
<Left>
Jump relative to position (-2,0)
End of a block
Se la sua posizione non è troppo a sinistra, si sposta di 2 pixel a sinistra.
<Right>
Jump relative to position (+2,0)
End of a block
Se la sua posizione non è troppo a destra, si sposta di 2 pixel a destra.
<Up>
Si sposta di 3 pixel verso l’alto.
<Down>
Si sposta di 3 pixel verso il basso.
<Space>
Exit this event
End of a block
Play sound snd_horn; looping: false
Se il suono snd_horn è già in esecuzione esce dall’evento.
(Altrimenti) suona il suono snd_horn, una volta.
Il risultato finale è
Lancia l’applicazione e osserva
- se non intervieni l’auto percorre apparentemente la strada verso l’alto
- l’auto si sposta in orizzontale rimanendo correttamente in carreggiata
- se va troppo in alto o troppo in basso scompare…
Il traffico
Aggiungiamo del traffico
- macchine nello stesso senso di marcia
- macchine in senso contrario.
Se l’auto rossa subisce un incidente si ricomincia il livello.
Risorse
Aggiungi le risorse
TIPO | NOME | FILE | |
---|---|---|---|
Sprite | spr_racing_dead | sprite_racing_dead.png | |
spr_car_up | sprite_car_up_strip4.png | ||
spr_car_up_dead | sprite_car_up_dead_strip4.png | ||
spr_car_down | sprite_car_down_strip4.png | ||
spr_car_down_dead | sprite_car_down_dead_strip4.png | ||
Sound | snd_collision | collision.wav | |
snd_sirens | sirens.wav | ||
Object | obj_car_up | spr_car_up | |
obj_car_down | spr_car_down | ||
controller |
Note
- Per ogni tipo di auto c’è la versione normale e la versione incidentata
- Le auto sulla strada possono essere di 4 colori diversi (con scelta casuale)
- L’oggetto controller genera le auto sulla strada.
Oggetti auto
Ogni auto possiede una variabile locale dead impostata inizialmente a false.
Indica che non ha ancora subito un incidente.
Se un auto subisce un incidente
- cambia il suo stato, dead diventa true
- cambia la sua immagine nella versione …dead
- si blocca sulla strada.
In particolare l’auto rossa non risponde più ai comandi dell’utente e finisce fuori strada… provocando la fine del livello.
obj_car_up
Create
Set the sprite to spr_car_up with subimage random(4) and speed 0
Jump to position (44+300,-80)
Set the vertical speed to 2
With a chance of 1 out of 2 perform the next action
Jump relative to position (44+240,-80)
Set the vertical speed to 1
With a chance of 1 out of 3 perform the next action
Jump relative to position (44+180,-80)
Set the vertical speed to 0.5
End of a block
End of a block
If at relative position (0,0) there is object obj_car_up
Destroy the instance
End of block
L’auto è nuova, ha un colore casuale, si trova sulla prima corsia e si muove piano.
Con una probabilità del 50% si sposta in seconda corsia e aumenta la velocità.
Con una probabilità più bassa si sposta in terza corsia con velocità ancora più alta.
Se la corsia è già occupata scompare.
obj_car_up
obj_car_racing
Outside room
Destroy the instance
End of block
Se è uscita completamente in basso si autodistrugge.
obj_car_down
Create
- (44+120, -80)
- (44+60, -80)
- (44+0, -80)
e velocità: 6, 5, 4
obj_car_down
obj_car_racing
Outside room
controller
L’oggetto non ha una sprite perché non è visibile.
Inserendolo nel livello (meglio nell’angolo in alto a sinistra per non perderlo di vista…) agirà sia alla sua creazione che a ogni passo fornendo al gioco dei comportamenti non legati al singolo oggetto.
Create
Play sound snd_music; looping: true
Suona per sempre la musica di sottofondo
Step
With a chance of 1 out 70-score/200 perform the next action
Create instance of object obj_car_down at position (0,0)
End of block
With a chance of 1 out 200-score/200 perform the next action
Create instance of object obj_car_up at position (0,0)
End of block
Aumenta i punti a ogni passo.
Con probabilità legata ai punti attuali crea un’auto nell’altra corsia.
Con probabilità più bassa crea un’auto nella stessa corsia.
obj_car_racing
Create
Set the vertical speed to 0
obj_car_down
obj_car_up
Exit this event
End of block
Play sound snd_collision; looping: false
Set the sprite to spr_racing_dead with subimage 0 and speed 1
Set the vertical speed to 3
Set variable dead to true
In caso di collisione, se sei nello stato dead esci dall’evento.
(Altrimenti) Gestisci la collisione
- emetti un suono
- cambia l’immagine dell’auto
- muoviti verso il basso
- dead diventa true
Le stesse azioni vanno inserite nei 2 eventi collisione.
<Left>
<Right>
<Up>
<Down>
Jump relative to position (…,…)
End of a block
Se l’utente agisce con le frecce l’auto si muove, come prima, ma soltanto se non è incidentata.
Modifica le azioni corrispondenti
- <Left> se x >32 && not dead allora va in (-2,0)
- <Right> se x < 360 && not dead allora va in (+2,0)
- <Up> se not dead allora va in (-3,0)
- <Down> se not dead allora va in (+3,0)
Outside room
Sleep 1000 milliseconds
Restart the current room
Quando l’auto esce dallo schermo
- viene emesso il suono della collisione
- il gioco si ferma per un secondo
- riparte il livello.
Gli accessori
Mancano gli accessori che non possono mai mancare…
- la gestione dei punti e delle vite
- un oggetto che permetta di fare rifornimento per prolungare il gioco
- un livello iniziale di presentazione
- …
Risorse
Aggiungi le risorse
TIPO | NOME | FILE | |
---|---|---|---|
Sprite | spr_gas | sprite_gas.png | |
Sound | snd_gas | gas.wav | |
Font | font_small | ||
font_large | |||
Object | obj_gas | spr_gas | |
controller_start | |||
Room | room_start |
Osserva le novità
- La tanica di benzina
- Un livello iniziale, room_start, con il suo oggetto controllore, controller_start
- Due font per le scritte iniziali e sul lato sinistro
Sarà necessario riorganizzare tutti gli eventi precedenti…
controller_start
Step
Create instance of object obj_car_down at position (0,0)
End of block
With a chance of 1 out of 100 do perform the next action
Create instance of object obj_car_up at position (0,0)
End of block
<any key>
Game Start
Set the score to 0
Set the number of lives to 3
Set the information in the window caption: don’t… don’t … don’t …
Draw
Set the drawing color to 65535 (giallo)
At position (200,40) draw text: ‘Street Racing’
Set the the font for drawing text to font_small and align center
Set the drawing color to 65408 (verde chiaro)
At position (200,100) draw text: ‘–> press <any> key to start <–‘
At position (200,130) draw text: ‘–> press <ESC> to quit <–‘
controller
Create
Set Alarm 0 to 3000
Set Alarm 0 to 300+score/100
Step
With a chance of 1 out 70-score/200 perform the next action
Create instance of object obj_car_down at position (0,0)
End of block
With a chance of 1 out 200-score/200 perform the next action
Create instance of object obj_car_up at position (0,0)
End of block
No more lives
Restart the game
Draw
Set the drawing color to 16777215 (bianco)
At position (420,20) draw text: ‘Score: ‘ + string(score)
At position (420,50) draw text: ‘Cars: ‘ + string(lives)
At position (420,100) draw text: ‘Petrol’
Set the drawing color to 0 (nero)
Draw rectangle with vertices (480,100) and (480+100,120), filled
Set the drawing color to 255 (rosso)
If expression global.patrol > 300 is true
Set the drawing color to 65535 (giallo)
End of block
If expression global.patrol > 700 is true
Set the drawing color to 65280 (verde)
End of block
Draw rectangle with vertices (480,100) and (480+max(0,min(100,global.petrol/10)),100), filled
obj_gas
Create
Outside room
Destroy the instance
End of block
Si muove con la stessa velocità dello sfondo.
Se finisce fuori scompare.
obj_car_racing
Create
Set the vertical speed to 0
Step
Exit this event
End of block
If expression global.petrol <= 0 is true
Set the vertical speed to 3
End of block
Set variable global.petrol relative to -1
obj_car_down
obj_car_up
Exit this event
End of block
Play sound snd_collision; looping: false
Set the sprite to spr_racing_dead with subimage 0 and speed 1
Set the vertical speed to 3
Set variable dead to true
obj_gas
Exit this event
End of block
Play sound snd_gas; looping: false
Set variable global.petrol to min(1000,global.petrol+400)
For other object: destroy the instance
<Left>
Jump relative to position (-2,0)
End of a block
<Up>
Jump relative to position (0,-3)
End of a block
<Right>
Jump relative to position (2,0)
End of a block
<Down>
Jump relative to position (0,3)
End of a block
Outside room
Sleep 1000 milliseconds
Set the number of lives relative to -1
Restart the current room
obj_car_up
…
obj_car_down
…
La polizia
Di tanto in tanto appare la macchina della polizia che cerca di speronare la macchina rossa.
Risorse
Aggiungi le risorse
TIPO | NOME | FILE | |
---|---|---|---|
Sprite | spr_police | sprite_police_strip6.png | |
spr_police_dead | sprite_police_dead_strip6.png | ||
Sound | snd_sirens | sirens.wav | |
Object | obj_police | spr_police |
L’auto della polizia ha le luci lampeggianti sul tetto (la sua striscia è un’animazione)
controller
Come prima e in più…
Step
If number of object obj_police is Equal to 0
With a chance of 1 out 800-score/30 perform the next action
Create instance of object obj_police at position (0,0)
End of block
Se i punti sono più di 3000, se non esiste già, con probabilità molto bassa, crea un’auto della polizia.
obj_car_racing
Create
Set the vertical speed to 0
obj_police
Exit this event
End of block
Play sound snd_collision; looping: false
Set the sprite to spr_racing_dead with subimage 0 and speed 1
Set the vertical speed to 3
Set variable dead to true
In caso di collisione, se sei nello stato dead esci dall’evento.
(Altrimenti) Gestisci la collisione
- emetti un suono
- cambia l’immagine dell’auto
- muoviti verso il basso
- dead diventa true
Le stesse azioni vanno inserite nei 3 eventi collisione.
<Left>
<Right>
<Up>
<Down>
Jump relative to position (…,…)
End of a block
Se l’utente agisce con le frecce l’auto si muove, come prima, ma soltanto se non è incidentata.
Modifica le azioni corrispondenti
- <Left>: x >32 && not dead, (-2,0)
- <Right>: x < 360 && not dead, (+2,0)
- <Up>: not dead, (-3,0)
- <Down>: not dead, (+3,0)
Outside room
Play sound snd_collision; looping: false
Sleep 1000 milliseconds
Restart the current room
Quando l’auto esce dallo schermo
- si interrompe il suono della sirena (…)
- viene emesso il suono della collisione
- il gioco si ferma per un secondo
- riparte il livello.
obj_car_up
Create
Set the sprite to spr_car_up with subimage random(4) and speed 0
Jump to position (44+300,-80)
Set the vertical speed to 2
With a chance of 1 out of 2 perform the next action
Jump relative to position (44+240,-80)
Set the vertical speed to 1
With a chance of 1 out of 3 perform the next action
Jump relative to position (44+180,-80)
Set the vertical speed to 0.5
End of a block
End of a block
If at relative position (0,0) there is object obj_car_up
Destroy the instance
End of block
L’auto è nuova, ha un colore casuale, si trova sulla prima corsia e si muove piano.
Con una probabilità del 50% si sposta in seconda corsia e aumenta la velocità.
Con una probabilità più bassa si sposta in terza corsia con velocità ancora più alta.
Se la corsia è già occupata scompare.
obj_car_up
obj_car_racing
obj_police
Outside room
Destroy the instance
End of block
Se è uscita completamente in basso si autodistrugge.
obj_car_down
Create
- (44+120, -80) e 6
- (44+60, -80) e 5
- (44, -80) e 4
obj_car_down
obj_car_racing
obj_police
Outside room
obj_police
Entra in gioco dal basso, accende la sirena e si dirige verso l’auto rossa speronandola!
Consulta il tutorial originale