Non farmi domande sugli scacchi, ma in
move() tu modifichi i valori di
currentRow e
currentColumn ad ogni ciclo, alla fine invece restituisci l'offset da aggiungere
alle posizioni iniziali, mentre tu hai controllato l'offset relativo
all'ultimo spostamento...
Magari prova così:
Codice:
for (moveNumber = 0; moveNumber < DIM; ++moveNumber)
{
int tempRow = currentRow + vertical[ moveNumber ];
int tempColumn = currentColumn + horizontal[ moveNumber ];
if (IN_BOUNDS(tempRow) && IN_BOUNDS(tempColumn) && (board[ tempRow ][ tempColumn ] == 0))
{
return moveNumber;
}
}
dove
IN_BOUNDS() è:
Codice:
#define IN_BOUNDS(x) ((x) >= 0 && (x) < DIM)
Non so se era la logica che volevi, ma secondo me è lì l'errore, e infatti lo spostamento mi restituisce valori diversi, per un totale di 27 spostamenti (senza l'
if che ti dicevo prima).