sedo96 ha scritto:
Scusami, ora dovrebbe essere più capibile. Sono sulla strada giusta?
Direi di sì. Non ho analizzato il codice in modo approfondito per questioni di tempo, ma direi che
almeno è la strada che intendevo io... che poi sia anche quella giusta, questo è il mio parere, ma potrei essere smentito in qualsiasi momento.
Come ulteriore miglioria, intesa come semplificazione, secondo me potresti
creare la tabella una volta sola, dato che per aggiornare la situazione di gioco in fondo ti basta solo successivamente
modificare la classe della singola cella (o DIV nella cella) per visualizzare l'elemento che si trova al suo interno, senza doverla necessariamente ricreare.
Quando cambi la classe CSS dell'elemento, anche senza ricrearlo, il browser reagisce subito applicando la formattazione specifica.
Una volta creata la tabella, siccome in seguito devi poter avere un modo di agire sulla singola cella in base al contenuto della tua struttura dati di gioco, ti serve un modo per poter risalire a essa. Per fare questo, magari potresti tenere una matrice uguale a quella di gioco dove, in fase di creazione della tabella, vai a salvarti il riferimento degli "oggetti cella" che crei nella pagina (in poche parole, il valore di ritorno delle chiamate a
createElement()).
Quando crei le singole celle della tabella, chiami i metodi del DOM per fare sì che gli oggetti finiscano nella pagina, ma ti salvi anche in una matrice i riferimenti a quegli oggetti in modo da averli pronti per modificarli in un secondo momento, ovvero risalire alla cella che corrisponde a una certa posizione e assegnarle la classe CSS (tramite
className).
Per quanto riguarda la logica specifica di gioco, così a prima vista mi pare che sia corretta, nel senso che a fronte dell'acquisizione di una intenzione di movimento, vai a fare le dovute verifiche e ad aggiornare la struttura dati di conseguenza: non so se la logica gestisce tutti i casi, però questa è effettivamente la parte più difficile dell'esercizio, ossia andare a implementare con JavaScript il funzionamento del gioco, ed è giusto che sia così, anche perché pur non essendo impossibile - credo - sarebbe una bella sfida anche per me.
Per questo secondo me è efficace seguire il principio consolidato di
separazione della parte visuale dalla cosiddetta "business logic": ti permette di concentrarti sull'uno o sull'altro aspetto in modo distinto, senza commistione, e quindi focalizzare meglio i problemi rendendoli indipendenti e ragionando su uno alla volta.
Ciao!