Как заполнить сетку судоку (9x9) в ncurses? - PullRequest
0 голосов
/ 24 марта 2019

У меня есть сетка судоку 9x9, которую я нарисовал с помощью функций ncurses (mvw) hline / vline, и сейчас я пытаюсь заполнить ее числами из массива 9x9. У меня вопрос, какой самый эффективный / действенный способ сделать это?

Если это полезно, я использую ncurses v6.1-r2 и C ++ 17 (скомпилировано с g ++). Я дошел до того, что прошел через массив (из которого будет заполнена доска), но после этого я не могу придумать, как заполнить каждый квадрат.

Вот код, который я использую для рисования сетки.

WINDOW *create_board(int x, int y, int width, int height) {
    WINDOW *local_win;

    local_win = newwin(height, width, y, x);

    mvwaddch(local_win, 0,          0,         '+');
    mvwaddch(local_win, 0,          width - 1, '+');
    mvwaddch(local_win, height - 1, 0,         '+');
    mvwaddch(local_win, height - 1, width - 1, '+');

    mvwhline(local_win, 0,          1, '-', width - 2);
    mvwhline(local_win, height - 1, 1, '-', width - 2);

    mvwvline(local_win, 1,      0,         '|', height - 2);
    mvwvline(local_win, 1,      width - 1,     '|', height - 2);

    for (int i = 0; i < 9; i++) {
        mvwvline(local_win, 1,          (10 * i), '|', height - 2);
        mvwhline(local_win, (4.2 * i),  1,        '-', width - 2);
    }

    wrefresh(local_win);
    return local_win; 
}

Я прошу прощения, если формулировка неуклюжая, английский не мой родной язык.

РЕДАКТИРОВАТЬ: для ясности я не хочу генерировать доску судоку, я просто хочу заполнить существующую сетку предварительно определенными числами в массиве. Например:

int board[9][9] =  
   {{0,0,0,7,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0},
    {0,0,0,4,3,0,2,0,0},
    {0,0,0,0,0,0,0,6,0},
    {0,0,5,0,9,0,0,0,0},
    {0,0,0,0,0,4,1,8,0},
    {0,0,0,8,1,0,0,0,0},
    {0,2,0,0,0,0,5,0,0},
    {4,0,0,0,0,3,0,0,0}};
...