Sto scrivendo un semplice motore di scacchi in LISP. In realtà so come il motore decide la mossa, valuta e legge alcuni libri di apertura. Ma non è quello che intendo. Questo è il mio design.
57 58 59 60 61 62 63 64
49 50 51 52 53 54 55 56
41 42 43 44 45 46 47 48
33 34 35 36 37 38 39 40
25 26 27 28 29 30 31 32
17 18 19 20 21 22 23 24
09 10 11 12 13 14 15 16
01 02 03 04 05 06 07 08
Ho esaminato soluzioni più complicate ma sono uscito con quello che ritengo sia il più semplice. Dì che l'alfiere è sul quadrato 23, potrebbe muovere 4 possibili mosse, (a 16 o 14 o 32 o 30), quindi muove -7 o +7 o +9 o -9.
Creo un array
(make-array '(8 8) :initial-contents
'((R B N Q K B N R)
(P P P P P P P P)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL NIL NIL NIL)
(P P P P P P P P))
(R B N Q K B N R)))
E sposta i pezzi da un indice all'altro. La mia domanda è, non posso semplicemente dire al vescovo di spostare +7 o qualsiasi altra cosa, se è una diagonale aperta. Devo dirlo per spostare +9 * 1 o +9 * 2 ecc. E il tuo vescovo deve decidere a quale andare. Non riesco a scrivere una condizione e un loop per ogni quadrato possibile