Gioco del 15 online

gioco del 15 online

In questo tutorial impareremo a creare il gioco del 15 online con JavaScript.

Cliccate sul pulsante gioca e cominciate a muovere i numeri, semplicemente passandoci sopra, fino a riordinare il tutto. Quando avrete finito vi comparirà il messaggio di vittoria.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15


Implementazione del gioco del 15 online con JavaScript

Realizzeremo questo gioco in maniera molto semplice utilizzando i fogli di stile e i metodi di JavaScript per gestire gli eventi.

Chiaramente ci sono tantissime implementazioni di questo gioco online con JavaScript, io ve ne propongo una.

Utilizzeremo il metodo addEventListener che attiveremo all’evento mouseover, cioè quando passeremo con il mouse sul tassello da spostare.

Codice HTML

Il codice HTML per lo sviluppo del gioco sarà semplicemente costitutito da un container per tutti i tasselli a cui diamo la classe tasselli e da ogni singolo tassello che inizialmente è nel suo posto.

Infine aggiungo il pulsante gioca che serve ad iniziare il gioco.



Foglio di stile per il gioco del 15

Costruiamo il nostro foglio di stile costruendo i nostri tasselli larghi e alti 60 pixel. Diamo un bordo di 10 pixel di colore grigio chiaro per simulare meglio il gioco. L’ultimo tassello sarà 79 pixel di altezza e larghezza.


.tasselli {
  width: 320px;
  height: 315px;
  display: flex;
  flex-wrap: wrap;
}
.tasselli .tassello {
  border: 10px solid #ddd;
  width: 60px;
  height: 60px;
  color:#ffffff;
  background: #5cb1d6;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 24px;
}
.tasselli .ultimo {
  width: 79px;
  height: 79px;
}

Codice JavaScript

Costruiamo una funzione gioca che semplicemente crea dei numeri casuali senza ripetizioni. Scambiando gli elementi iniziali con quelli generati utilizzando la funzione scambia. Notate che lo scambio viene attivato sulla proprietà style del livello div.

Dopo attiviamo lo spostamento della casella solo se la distanza dx e dy ta l’ultimo tassello e il tassello in considerazione sia 0 e 1 oppure 1 e 0.

Infine se ogni elemento dell’array è al suo posto allora abbiamo risolto il nostro gioco.



var ultimo = document.querySelector(".ultimo");
var ar = Array.from(document.querySelectorAll(".tassello"));

ar.forEach(tassello => {
    tassello.addEventListener("mouseover", ev => move(tassello));
});

function gioca(){
    var i = 0;
    var a, b;
    while (i < 30) {
        a = Math.random() * 15 >>> 0;
        b = Math.random() * 15 >>> 0;
        scambia(ar[a], ar[b]);
        i++;
    }
};
function scambia({style: a}, {style: b}) {
	temp = a.order;
	a.order = b.order;
	b.order = temp;
}
function cambiaX({style}) {
    return parseInt(style.order)%4;
}
function cambiaY({style}) {
    return parseInt(style.order)/4 >>> 0;
} 
      
function move(tassello) {
    var ux = cambiaX(ultimo);
    var x = cambiaX(tassello);
    var uy = cambiaY(ultimo);
    var y = cambiaY(tassello);
    var dx = Math.abs(ux-x),  dy = Math.abs(uy-y);
    if (dx == 0 && dy == 1 || dx == 1 && dy == 0) {
        scambia(ultimo, tassello);
        if (ar.every((p, i) => i == cambiaX(p) + cambiaY(p) * 4)) {
           alert("Hai vinto!");
        }
    }
}

In questa lezione abbiamo trovato una possibile soluzione al gioco del 15 online in JavaScript, nelle prossime lezioni ci divertiremo a sviluppare tante altre applicazioni.

Alcuni link utili

Indice tutorial linguaggio JavaScript

Rimuovere attributi agli elementi del DOM con JavaScript

Creare attributi agli elementi

Dom in javascript

Come creare una galleria di immagini con javascript

Utilizzare gli array in javascript

Come creare una calcolatrice con javascript

Validare un form con javascript

Saper utilizzare il metodo getElementById

Alcuni esempi con javascript alert

6 thoughts on “Gioco del 15 online

  1. Ottimo! Suggerimento: si dovrebbe fare in modo che il gioco sia sempre risolvibile (in metà dei casi lo schema è impossibile)

  2. devo ancora capire molte cose mai viste prima sul corso, oppure mi sono sfuggite, ad esempio “queryselector”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *