Запись в любом месте окна DOS

Я ищу способ показать вывод «DOS» в стиле Roguelike, т.е. Это выглядит так, как будто у вас есть окно DOS, заполненное символами (уровнем), которые могут меняться или перемещаться, когда пользователь нажимает кнопки, щелкает мышью и т. д.

В обычном окне DOS (скажем, вывод из классической программы на С ++ или .bat) вы можете только «написать больше текста», и вам придется перерисовывать весь уровень, если что-то меняется, что является громоздким и вызывает артефакты (обновленный уровень медленно прокручивается в ).

Я знаю, что могу использовать, скажем, Qt или SDL и рисовать 2D-плитки с символами, чтобы преодолеть эту проблему, но для того, что я хочу сделать, кажется сложным, есть ли простой способ (скажем, библиотека C ++), который позволит мне рисовать символы где угодно в / окно ‘DOS’?

Спасибо!

[ПРАВКА] Спасибо, я проверю все ваши предложения, +1 для всех!

[EDIT] PDCurses выиграл, руководство по его использованию можно найти здесь (там написано NCurses, но оно отлично работает для простого примера Hello world):
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/

0

Решение

Когда Роуг был написан, он использовал библиотека управления экраном curses.

Вы можете получить различные реализации этого для Windows. Некоторые переводят вызовы curses в обычные вызовы консоли Windows:

PDCurses для Windows

Другие создают настоящее окно с графическим интерфейсом, а затем рисуют расширенные функции, такие как полужирный и подчеркивание, в «поддельном» терминале. (как ваша идея использовать Qt или SDL для рисования плиток):

PDCurses для «настоящих» Windows

Если вы хотите напрямую связать себя с редко используемыми консольными API-функциями Microsoft, вы можете это сделать. Но если ностальгия является вашей целью при использовании такого пользовательского интерфейса в наши дни, то изучение проклятий сделает вас кроссплатформенным а также Позвольте вам лучше понять такие вещи, как исходный код Rogue.

И если ваша цель — использовать настоящую эмуляцию DOS (в соответствии с DOSBox), был еще один популярный вариант: прямой доступ к экранной памяти. Вы можете заглянуть и ковыряться … написать 65 в нужном месте, и появляется «А».

Тогда был ANSI.SYS, который использовался на многих досках объявлений в прошлом … но так же устарел.

4

Другие решения

Вот ссылка на MSDN с рядом функций, которые могут вам помочь: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073%28v=vs.85%29.aspx

Скорее всего, вы могли бы

SetConsoleCursorPosition
WriteConsole

Снова и снова делать то, что вы хотите.

1

Если это действительно DOS, то ansi.sys включит цветовые коды и позиционирование курсора:
В ошибка сервера есть ветка о включении ANSI-кодов в Windows COMMAND.COM. Не проверял, HTH.

Вы также можете проверить Ncurses, которая является библиотекой, портированной на многие системы.

1

Еще одна альтернатива:

Создать виджет текстовой области, такой как Qt’s QPlainTextEdit, QTextEdit или же QTextBrowserсделайте его доступным только для чтения, установите шрифт на фиксированную ширину и залейте его текстом нужного цвета с фиксированным количеством символов на фиксированном количестве строк.

1

Попробуй это:

#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;
}
1
По вопросам рекламы [email protected]