Я ищу способ показать вывод «DOS» в стиле Roguelike, т.е. Это выглядит так, как будто у вас есть окно DOS, заполненное символами (уровнем), которые могут меняться или перемещаться, когда пользователь нажимает кнопки, щелкает мышью и т. д.
В обычном окне DOS (скажем, вывод из классической программы на С ++ или .bat) вы можете только «написать больше текста», и вам придется перерисовывать весь уровень, если что-то меняется, что является громоздким и вызывает артефакты (обновленный уровень медленно прокручивается в ).
Я знаю, что могу использовать, скажем, Qt или SDL и рисовать 2D-плитки с символами, чтобы преодолеть эту проблему, но для того, что я хочу сделать, кажется сложным, есть ли простой способ (скажем, библиотека C ++), который позволит мне рисовать символы где угодно в / окно ‘DOS’?
Спасибо!
[ПРАВКА] Спасибо, я проверю все ваши предложения, +1 для всех! [EDIT] PDCurses выиграл, руководство по его использованию можно найти здесь (там написано NCurses, но оно отлично работает для простого примера Hello world):Когда Роуг был написан, он использовал библиотека управления экраном curses.
Вы можете получить различные реализации этого для Windows. Некоторые переводят вызовы curses в обычные вызовы консоли Windows:
Другие создают настоящее окно с графическим интерфейсом, а затем рисуют расширенные функции, такие как полужирный и подчеркивание, в «поддельном» терминале. (как ваша идея использовать Qt или SDL для рисования плиток):
PDCurses для «настоящих» Windows
Если вы хотите напрямую связать себя с редко используемыми консольными API-функциями Microsoft, вы можете это сделать. Но если ностальгия является вашей целью при использовании такого пользовательского интерфейса в наши дни, то изучение проклятий сделает вас кроссплатформенным а также Позвольте вам лучше понять такие вещи, как исходный код Rogue.
И если ваша цель — использовать настоящую эмуляцию DOS (в соответствии с DOSBox), был еще один популярный вариант: прямой доступ к экранной памяти. Вы можете заглянуть и ковыряться … написать 65 в нужном месте, и появляется «А».
Тогда был ANSI.SYS, который использовался на многих досках объявлений в прошлом … но так же устарел.
Вот ссылка на MSDN с рядом функций, которые могут вам помочь: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073%28v=vs.85%29.aspx
Скорее всего, вы могли бы
SetConsoleCursorPosition
WriteConsole
Снова и снова делать то, что вы хотите.
Если это действительно DOS, то ansi.sys включит цветовые коды и позиционирование курсора:
В ошибка сервера есть ветка о включении ANSI-кодов в Windows COMMAND.COM. Не проверял, HTH.
Вы также можете проверить Ncurses, которая является библиотекой, портированной на многие системы.
Еще одна альтернатива:
Создать виджет текстовой области, такой как Qt’s QPlainTextEdit
, QTextEdit
или же QTextBrowser
сделайте его доступным только для чтения, установите шрифт на фиксированную ширину и залейте его текстом нужного цвета с фиксированным количеством символов на фиксированном количестве строк.
Попробуй это:
#include <iostream>
#include <windows.h>
using namespace std;void gotoxy(int x, int y)
{
static HANDLE hStdout = NULL;
COORD coord;
coord.X = x;
coord.Y = y;
if(!hStdout)
{
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
}
SetConsoleCursorPosition(hStdout,coord);
}int main(void)
{
gotoxy(30 , 12);
cout<<" Writing anywhere \n";
gotoxy(1 , 22);
cout<<" \nPress any key to continue\n";
cin.ignore();
cin.get();
return 0;
}