Non e` male come esercizio.
A mio parere si puo` fare in JS, e con (relativamente) poco sforzo.

Non vedo come potresti fare con tutte 16 le caselle occupate. Io lascerei vuota una casella, per poter spostare le altre.
Un po' come nel gioco del 15; in questo caso pero` puo anche permettere i salti, se lo credi.

Oppure puoi farlo con 2 tabelle: una inizialmente vuota, l'altra con tutte le tessere in disordine.

Poi il click del mouse puo` selezionare la casella di partenza e quella di destinazione.
Un campo fuori dalla casella potrebbe far capire all'utente se deve fare la prima selezione o la seconda .... o comunque contenere informazioni per l'utilizzo.


PS. io userei una matrice a due dimensioni per le tessere.