Street racing

Street Racing

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!

STREET RACING

 

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 RACING
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, …STREET RACING

 

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
RACING

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!

 

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

image Create

Vertical Speed Action Set the vertical speed to 0
Play Sound Play sound snd_music; looping: true

L’auto ha velocità verticale nulla…
Suona per sempre la musica di sottofondo

image <Left>

Text Expression If expression x > 32 is true

Start Block Start of a block
Jump to Position Jump relative to position (-2,0)
End Block End of a block

Se la sua posizione non è troppo a sinistra, si sposta di 2 pixel a sinistra.

image <Right>

Text Expression If expression x < 360 is true

Start Block Start of a block
Jump to Position Jump relative to position (+2,0)
End Block End of a block

Se la sua posizione non è troppo a destra, si sposta di 2 pixel a destra.

image <Up>

Jump to Position Jump relative to position (0,-3)

Si sposta di 3 pixel verso l’alto.

image <Down>

Jump to Position Jump relative to position (0,+3)

Si sposta di 3 pixel verso il basso.

image <Space>

Check Sound If sound snd_horn is playing

Start Block Start of a block
Exit Event Exit this event
End Block End of a block

Play Sound 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 è
CAR
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 RACING
spr_car_up sprite_car_up_strip4.png CAR UP
spr_car_up_dead sprite_car_up_dead_strip4.png CAR UP
spr_car_down sprite_car_down_strip4.png CAR DOWN
spr_car_down_dead sprite_car_down_dead_strip4.png CAR DOWN
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.

CAR UPobj_car_up

image Create

image Set variable dead to false
image Set the sprite to spr_car_up with subimage random(4) and speed 0
Jump to Position Jump to position (44+300,-80)
Vertical Speed Action Set the vertical speed to 2
image With a chance of 1 out of 2 perform the next action

Start Block Start of a block
Jump to Position Jump relative to position (44+240,-80)
Vertical Speed Action Set the vertical speed to 1
image With a chance of 1 out of 3 perform the next action

Start Block Start of a block
Jump to Position Jump relative to position (44+180,-80)
Vertical Speed Action Set the vertical speed to 0.5
End Block End of a block

End Block End of a block

image If at relative position (0,0) there is object obj_car_up

Begin Start of block
image Destroy the instance
End 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.

Collision Event obj_car_up
Collision Event obj_car_racing

Come per obj_car_racing.

image Outside room

Text Expression If expression y > room_height is true

Begin Start of block
image Destroy the instance
End End of block

Se è uscita completamente in basso si autodistrugge.

CAR DOWNobj_car_down

image Create

Come in obj_car_up tranne che per le proprietà posizione

  • (44+120, -80)
  • (44+60, -80)
  • (44+0, -80)

velocità654

Collision Event obj_car_down
Collision Event obj_car_racing

Come prima tranne che per l’immagine spr_car_down_dead.

image Outside room

Come prima.

 

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.

image Create

image Set the score to 0
Play Sound Play sound snd_music; looping: true

Suona per sempre la musica di sottofondo

Step Event Step

image Set the score relative to 1
image With a chance of 1 out 70-score/200 perform the next action

Begin Start of block
image Create instance of object obj_car_down at position (0,0)
End End of block

image With a chance of 1 out 200-score/200 perform the next action

Begin Start of block
image Create instance of object obj_car_up at position (0,0)
End 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.

RACINGobj_car_racing

image Create

image Set variable dead to false
Vertical Speed Action Set the vertical speed to 0

Collision Event obj_car_down
Collision Event obj_car_up

Text Expression If expression dead is true

Begin Start of block
image Exit this event
End End of block

Play Sound Play sound snd_collision; looping: false
image Set the sprite to spr_racing_dead with subimage 0 and speed 1
Vertical Speed Action Set the vertical speed to 3
image 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.

image <Left>
image <Right>
image <Up>
image <Down>

Text Expression If expression  is true

Start Block Start of a block
Jump to Position Jump relative to position (,)
End Block 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)

image Outside room

Play Sound Play sound snd_collision; looping: false
image Sleep 1000 milliseconds
image 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 GAS
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 Event Step

image With a chance of 1 out of 50 do perform the next action

Begin Start of block
image Create instance of object obj_car_down at position (0,0)
End End of block

image With a chance of 1 out of 100 do perform the next action

Begin Start of block
image Create instance of object obj_car_up at position (0,0)
End End of block

image <any key>

image Go to next room

image Game Start

Play Sound Play sound snd_music; looping: true
image Set the score to 0
image Set the number of lives to 3
image Set the information in the window caption: don’t… don’t … don’t …

image Draw

image Set the the font for drawing text to font_large and align center
image Set the drawing color to 65535 (giallo)
image At position (200,40) draw text: ‘Street Racing’
image Set the the font for drawing text to font_small and align center
image Set the drawing color to 65408 (verde chiaro)
image At position (200,100) draw text: ‘–> press <any> key to start <–‘
image At position (200,130) draw text: ‘–> press <ESC> to quit <–‘

 

controller

image Create

image Set variable global.petrol to 1000
image Set Alarm 0 to 3000
image Alarm 0
image Create instance of object obj_gas at position (40+random(320),-40)
image Set Alarm 0 to 300+score/100

Step Event Step

image Set the score relative to 1
image With a chance of 1 out 70-score/200 perform the next action

Begin Start of block
image Create instance of object obj_car_down at position (0,0)
End End of block

image With a chance of 1 out 200-score/200 perform the next action

Begin Start of block
image Create instance of object obj_car_up at position (0,0)
End End of block

image No more lives

Highscore Action Show the highscore table
Restart Game Restart the game

image Draw

image Set the the font for drawing text to font_small and align left
image Set the drawing color to 16777215 (bianco)
image At position (420,20) draw text: ‘Score: ‘ + string(score)
image At position (420,50) draw text: ‘Cars: ‘ + string(lives)
image At position (420,100) draw text: ‘Petrol’
image Set the drawing color to 0 (nero)
image Draw rectangle with vertices (480,100) and (480+100,120), filled
image Set the drawing color to 255 (rosso)
Text Expression If expression global.patrol > 300 is true

Begin Start of block
image Set the drawing color to 65535 (giallo)
End End of block

Text Expression If expression global.patrol > 700 is true

Begin Start of block
image Set the drawing color to 65280 (verde)
End End of block

image Draw rectangle with vertices (480,100) and (480+max(0,min(100,global.petrol/10)),100), filled

 

GASobj_gas

image Create

Vertical Speed Action Set the vertical speed to background_vspeed[0]

 

image Outside room

Text Expression If expression y > room_height is true

Begin Start of block
image Destroy the instance
End End of block

Si muove con la stessa velocità dello sfondo.
Se finisce fuori scompare.

RACINGobj_car_racing

image Create

image Set variable dead to false
Vertical Speed Action Set the vertical speed to 0

Step Event Step

Text Expression If expression dead is true

Begin Start of block
image Exit this event
End End of block

Text Expression If expression global.petrol <= 0 is true

Begin Start of block
Vertical Speed Action Set the vertical speed to 3
End End of block

image Set variable global.petrol relative to -1

Collision Event obj_car_down
Collision Event obj_car_up

Text Expression If expression dead is true

Begin Start of block
image Exit this event
End End of block

Play Sound Play sound snd_collision; looping: false
image Set the sprite to spr_racing_dead with subimage 0 and speed 1
Vertical Speed Action Set the vertical speed to 3
image Set variable dead to true

 

Collision Event obj_gas

Text Expression If expression dead is true

Begin Start of block
image Exit this event
End End of block

Play Sound Play sound snd_gas; looping: false
image Set variable global.petrol to min(1000,global.petrol+400)
image For other object: destroy the instance

 

image <Left>

Text Expression If expression global.petrol > 0 && x >32 && not dead is true

Start Block Start of a block
Jump to Position Jump relative to position (-2,0)
End Block End of a block

 

image <Up>

Text Expression If expression global.petrol > 0 && not dead is true

Start Block Start of a block
Jump to Position Jump relative to position (0,-3)
End Block End of a block

 

image <Right>

Text Expression If expression global.petrol > 0 && x < 360 && not dead is true

Start Block Start of a block
Jump to Position Jump relative to position (2,0)
End Block End of a block

 

image <Down>

Text Expression If expression global.petrol > 0 && not dead is true

Start Block Start of a block
Jump to Position Jump relative to position (0,3)
End Block End of a block

image Outside room

Play Sound Play sound snd_collision; looping: false
image Sleep 1000 milliseconds
image Set the number of lives relative to -1
image Restart the current room

 

CAR UPobj_car_up

CAR DOWNobj_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 POLICE CAR
spr_police_dead sprite_police_dead_strip6.png POLICE CAR
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 Event Step

Text Expression If expression score > 3000 is true
image If number of object obj_police is Equal to 0
image With a chance of 1 out 800-score/30 perform the next action

Begin Start of block
image Create instance of object obj_police at position (0,0)
End End of block

Se i punti sono più di 3000, se non esiste già, con probabilità molto bassa, crea un’auto della polizia.

RACINGobj_car_racing

image Create

image Set variable dead to false
Vertical Speed Action Set the vertical speed to 0

Collision Event obj_police

Text Expression If expression dead is true

Begin Start of block
image Exit this event
End End of block

Play Sound Play sound snd_collision; looping: false
image Set the sprite to spr_racing_dead with subimage 0 and speed 1
Vertical Speed Action Set the vertical speed to 3
image 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.

image <Left>
image <Right>
image <Up>
image <Down>

Text Expression If expression  is true

Start Block Start of a block
Jump to Position Jump relative to position (,)
End Block 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)

image Outside room

image Stop sound snd_sirens
Play Sound Play sound snd_collision; looping: false
image Sleep 1000 milliseconds
image 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.

CAR UPobj_car_up

image Create

image Set variable dead to false
image Set the sprite to spr_car_up with subimage random(4) and speed 0
Jump to Position Jump to position (44+300,-80)
Vertical Speed Action Set the vertical speed to 2
image With a chance of 1 out of 2 perform the next action

Start Block Start of a block
Jump to Position Jump relative to position (44+240,-80)
Vertical Speed Action Set the vertical speed to 1
image With a chance of 1 out of 3 perform the next action

Start Block Start of a block
Jump to Position Jump relative to position (44+180,-80)
Vertical Speed Action Set the vertical speed to 0.5
End Block End of a block

End Block End of a block

image If at relative position (0,0) there is object obj_car_up

Begin Start of block
image Destroy the instance
End 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.

Collision Event obj_car_up
Collision Event obj_car_racing
Collision Event obj_police

Come per obj_car_racing.

image Outside room

Text Expression If expression y > room_height is true

Begin Start of block
image Destroy the instance
End End of block

Se è uscita completamente in basso si autodistrugge.

CAR DOWNobj_car_down

image Create

Come in obj_car_up tranne che per le proprietà posizione e velocità corrispondenti

  • (44+120, -80) e 6
  • (44+60, -80) e 5
  • (44, -80) e 4

Collision Event obj_car_down
Collision Event obj_car_racing
Collision Event obj_police

Come prima tranne che per l’immagine spr_car_down_dead.

image Outside room

Come prima.

 

POLICE CARobj_police

Entra in gioco dal basso, accende la sirena e si dirige verso l’auto rossa speronandola!

Consulta il tutorial originale