Как бы я сделал окно вокруг экрана, используя Ncurses
Я делаю простую программу для перемещения ящика на открытой местности. Теперь, когда все готово, я бы хотел сделать рамку вокруг экрана (не как окно Ncurses, а просто для отображения). Я просто не знаю, как это сделать. Я искал Google, а также ТАК для решения этой проблемы, но я не могу найти его. Кто-нибудь знает, как сделать такую коробку вокруг экрана.
Столкновение уже есть, мне просто нужно сделать вокруг него коробку. Я думал об использовании символов, таких как обычный бокс, в Ncurses, но это может быть невозможно. Можно ли сделать бокс в блоке?
Здесь у меня есть пример коробки, которую я сделал с помощью Ncurses (хотя мое форматирование отстой, в реальной коробке нет точек)
+--------+
|........|
+--------+
Этот код является кодом для движения и также вычисляет столкновение с внешней частью поля (так, где должен быть ящик):
while((ch = getch()) != KEY_F(1))
{ switch(ch)
{ case KEY_LEFT:
if(win.startx>1){
create_box(&win, FALSE);
--win.startx;
create_box(&win, TRUE);
}
break;
case KEY_RIGHT:
if(win.startx<122){
create_box(&win, FALSE);
++win.startx;
create_box(&win, TRUE);
}
break;
case KEY_UP:
if(win.starty>1){
create_box(&win, FALSE);
--win.starty;
create_box(&win, TRUE);
}
break;
case KEY_DOWN:
if(win.starty<44){
create_box(&win, FALSE);
++win.starty;
create_box(&win, TRUE);
}
break;
}
}
endwin();
return 0;
Как вы можете видеть, большой блок находится в первой строке x и y (таким образом, первый столбец в терминале и первая строка в терминале), а также в строке № 44 и столбце № 122 (один самый нижний и самый правая строка и столбец в терминале). Столкновение уже существует. Если вы хотите получить полный код, вы можете нажать на эту ссылку, чтобы вставить и посмотреть, как он работает. (не забудьте скомпилировать с -lncurses после команды компиляции)
1 ответ
Посмотрите на код, он тут же. Функция даже называется create_box
,
Подсказка: звонок mvaddch
принимает 3 аргумента: позиция y, позиция x и символ, который вы хотите поместить в эту позицию. p_win->border.XX
константы, каждый из которых определяет символ границы, как tl
для верхнего левого.