1) Используйте эту функцию вместо прямой платы [x] [index] и т. Д.:
const Square& GetSquare(
const Square board[BOARD_SIZE][BOARD_SIZE]&,
int x,
int y)
{
assert(x >= 0);
assert(x < BOARD_SIZE);
assert(y >= 0);
assert(y < BOARD_SIZE);
return board[x][y];
}
Проверьте, что вы находитесь на отладке, чтобы assert(false)
выдало сообщение об ошибке. Напишите assert(false)
, посмотрите сообщение, затем удалите эту строку. Без этих утверждений я просто не могу доверять вашему коду.
2) Не используйте магические числа 9 и 3.
3) Учтите, что int v_subgrid = x / 3; может иметь ненулевой остаток, например, 7/3 = 2, а остаток равен 1. И 2/3 = 0. Если это то, что вы хотите, хорошо. Просто примите это во внимание.