Forza quattro per Android, MVC + SurfaceView

Ho realizzato una nuova app per Android: Forza quattro (in inglese connect4), il mitico gioco a turno dove vince chi riesce ad allineare per primo 4 o più pedine dello stesso colore.

Realizzata per sperimentare il rendering SurfaceView+Canvas e il pattern MVC in ambiente Android.

device-2015-10-03-112816

device-2015-09-06-160459

 

E’ possibile giocare contro lo smartphone selezionando uno dei 32 livelli di difficoltà. L’intelligenza artificiale è basata sull’algoritmo minimax con alcune ottimizzazioni per renderlo più veloce:

Il gioco include:

  • Effetti sonori tramite SoundPool
  • Musica di sottofondo tramite classe MediaPlayer
  • Rendering software tramite SurfaceView e Canvas (su thread separato, come spiegato qui)
  • Effetto caduta dei gettoni

Lo trovate qui in google play!

googleplay

L’ambiente Android si sa, è fortemente event-driven. L’approccio tramite pattern classico MVC è comunque fattibile: ho mappato il pattern alle seguenti componenti Android (non necessariamente la soluzione migliore!):

  • Model: sostanzialmente lo stato della scacchiera, un array bidimensionale.
  • View: classe SurfaceView che legge i dati dal modello e fa il rendering su schermo
  • Controller: activity Android che legge l’input utente e coordina Model e View assieme (più una terza classe Sound responsabile della musica ed effetti sonori).

20150913_170934

L’applicazione nel suo complesso richiede 3 thread: quello principale dell’activity stessa (UI), quello dentro la classe View che legge lo stato di gioco e aggiorna lo schermo e l’ultimo quello che incorpora l’algoritmo minimax per la scelta della mossa da parte del computer.

La caduta dei gettoni è realizzata con la classica equazione del moto uniformemente accelerato: s = 1/2 * g * t^2 dove t è il tempo espresso in tick millisecondi e g è l’accelerazione espressa in pixel / ms /ms.