Я пытаюсь создать программу игры в жизнь на C, но я не очень хорошо знаком с процессом обновления вывода, отображаемого на терминале.
Так, например, у меня будет массив 2d char, где каждый элемент будет содержать либо "#", либо "-". Я буду печатать этот массив на экране, но вместо того, чтобы печатать новый массив 2d каждый раз, когда происходит изменение состояния, я хочу перезаписать старый массив в терминале новым состоянием.
Я искал способы сделать это, но мне не повезло. Самое близкое, что я нашел, это возврат каретки в функции printf (\r), но, надеюсь, кто-нибудь подскажет, как это сделать лучше всего.
В частности, как я мог распечатать 2d-массив на экране, изменить элементы массива и распечатать новый массив ПОВЕРХ старого, т.е. перезаписать его.
Ответ 1 · рейтинг 1 · ryyker
(некоторые из этих ссылок и фрагментов кода относятся к Linux, а другие - к Windows)
С учетом ваших конкретных вопросов (и при условии, что вы знаете, как записать массив в консоль):
1) запишите первый массив.
2) Затем очистите консоль (или над написать консоль)
Примерно так:
#include <stdlib.h>
void main()
{
system("cls");
}
Или напишите в стандартный вывод следующее: (Linux)
write(1,"\E[H\E[2J",7);
это то, что делает /usr/bin/clear, за исключением того, что он не создает другой процесс.
Или и то, и другое:
void clear_screen()
{
#ifdef WINDOWS
system ( "CLS" );
#else
// Assume POSIX
system ( "clear" );
#endif
}
Дополнительные параметры здесь
3) записать следующий массив
Ответ 2 · bubble
Вы можете попробовать что-то вроде этого:
#include<stdio.h>
int main(void)
{
printf ("#####-----\r");
printf ("-#####----\r");
}
Не уверен, что действительно ответил на ваш вопрос. И если это не ваш ответ, то вы определенно ищете что-то вроде ncurses.