Come qualcuno nuovo alla programmazione, sto costruendo un'applicazione web di scacchi in JavaScript, sia per divertimento che per saperne di più sui modelli di design. Continuo a correre contro un muro, che è come decomporre il programma.
Per iniziare, ho scelto una semplice rappresentazione di una scacchiera, qui:
Board = function() {
var turn = 0;
var model = [[-4, -2, -3, -5, -6, -3, -2, -4],
[-1, -1, -1, -1, -1, -1, -1, -1],
[ 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 1, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0],
[ 1, 1, 1, 1, 1, 1, 1, 1],
[ 4, 2, 3, 5, 6, 3, 2, 4]];
con alcune routine di accesso di base, come
this.move = function(pt1, pt2) {
turn += 1;
model[pt2.x][pt2.y] = model[pt1.x][pt1.y];
model[pt1.x][pt1.y] = 0;
};
...
Ha senso che la scacchiera incapsuli lo stato ed è responsabile del cambiamento di stato ma potrebbe non conoscere le regole del gioco - Mi piace l'idea di poter inserire una sorta di RulesContoller
e cambiare completamente la natura di il gioco in fase di esecuzione. Ma oltre a ciò, sono un po 'paralizzato da quanto sia granulare modellare i pezzi. Vedo alcune opzioni.
In primo luogo, potrei definire un costruttore di Piece
e istanziare un nuovo pezzo per ogni indice nell'array nidificato, qualcosa del tipo:
_.each(state, function(row, y) {
_.each(row, function(val, x) {
state[y][x] = new Piece(x, y, val);
});
});
Piece
potrebbe facilmente dedurre il suo colore, il tipo (ad esempio "king") e la posizione da tale informazione. Ma è anche ridondante, dal momento che sto solo traducendo un modello che rappresenta già completamente la lavagna. Inoltre, non sembra che lo scopo principale di Piece
'classe' sia questa traduzione, ad es. "Oh, sono un -5, deve essere una Regina oscura."
Un'altra opzione è di rendere i pezzi più stupidi, cioè non in grado di dedurre queste informazioni dal modello. Ma poi costruisco la matrice in linea, come
var model = [new Rook(1,1,'dark'), new Knight(1,2,'dark'), new Bishop(1,3,'dark')... ],
...
Questo sembra più vicino al modo in cui una scacchiera è effettivamente impostata: non c'è una formula elegante; piuttosto, metti i pezzi nella loro posizione corretta. Ma è anche solo forza bruta. Ci sono alcune simmetrie coinvolte e schemi che potrebbero essere semplificati.
Ad ogni modo, sono solo spitballing a questo punto. Qualsiasi idea sarebbe utile. Grazie.