Страница 1 из 1
C++. Можно ли сделать динамический вывод на экран?
Добавлено: 14 янв 2010, 15:59
Dragon
Есть двухмерный массив.
Забиваются значения. После по определенному алгоритму значения меняются.
Есть функции:
void display(char array[][COLUMN];
void generate(char array [][COLUMN];
Первая выводит матрицу, вторая меняет значения.
Но выходит, что матрицы выводятся на экран одна за одной и видно остаток предыдущего вывода. Можно ли сделать (возможно иммитировать) смену незаметно, чтобы было ощущение, что данные сменяются динамически?
вывожу данные так:
Код: Выделить всё
const int ROW = 10;
const int COLUMN = 10;
void display(char world[][COLUMN])
{
int index1, index2;
for(index1 = 0; index1 < ROW; index1++)
{
for(index2 = 0; index2 < COLUMN; index2++)
{
cout << world[index1][index2];
}
cout << endl;
}
}
Re: C++. Можно ли сделать динамический вывод на экран?
Добавлено: 14 янв 2010, 16:27
WinMain
Это можно сделать двумя способами:
1. В промежутке между выводом первого и второго массивов делать очистку консоли.
2. Позиционировать вывод на консоль, т.е. указывать в какую конкретно позицию консоли выводить каждое значение.
Re: C++. Можно ли сделать динамический вывод на экран?
Добавлено: 14 янв 2010, 17:12
Dragon
У меня выглядит так вся эта история:
Код: Выделить всё
for(; ;)
{
system("cls");
display(world);
generation(world);
}
Но видно, как моргает экран и видно как накладывается новое значение ячейки на старое.
Возник такой вопрос: можно ли как-то сделать паузу в секунду-две перед новой итерацией (перед очисткой экрана ит.д.)? Т.е. отобразилась матрица, следующий шаг это изменение содержимого ячеек, очистка консоли, затем вывод нового наполнения матрицы. Если перед очисткой консоли сделать задержку в 1-2 секунды, тогда наложения ячеек не будут напрягать глаз и исчезнуть мерцания из-за частого стирания консоли.
Re: C++. Можно ли сделать динамический вывод на экран?
Добавлено: 14 янв 2010, 18:40
WinMain
Для задержки по времени можно использовать функцию Sleep() из Windows API.
Вместо system("cls") лучше использовать функции Windows API, они намного быстрее работают.
Вот как выглядит функция clrscr() для очистки консоли на Windows API
BOOL clrscr()
{
static HANDLE _ConsoleOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
COORD cr = {0, 0}; DWORD dw(0);
CONSOLE_SCREEN_BUFFER_INFO csbi = {0};
::GetConsoleScreenBufferInfo(_ConsoleOut, &csbi);
::SetConsoleCursorPosition(_ConsoleOut, cr);
return ::FillConsoleOutputCharacter(_ConsoleOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, cr, &dw);
}
Re: C++. Можно ли сделать динамический вывод на экран?
Добавлено: 15 янв 2010, 00:56
rrrFer
Dragon можно вывести матрицу,определить какие элементы надо изменить,использовать задержку, очистить экран, вывести ту же матрицу(но изменяемые элементы выделить цветом), использовать задержку, очистить экран ивывести измененную матрицу.
Вместо задержки можно ожидать нажатия клавиши пользователем - это ИМХО лучше если пользователь должен обязательно успеть разглядеть какие элементы изменяются.
Re: C++. Можно ли сделать динамический вывод на экран?
Добавлено: 15 янв 2010, 10:37
Dragon
Хм, через нажатие клавиши пользователем будет лучше в плане того, что цикл бесконечный, тогда пользователю если надоест, то он может прекратить процесс вывода на экран по своему желанию.