Ну, если вы можете жить без линии в нижней части экрана, которая притворяется, что снег накапливается на земле, это довольно просто. Основная хитрость заключается в том, чтобы прокрутить экран вниз, а не вверх. Однако, если вы действительно хотите, чтобы этот результат был сложнее, и вам, возможно, придется попробовать другой подход, чем этот.
Я только что проверил это на своей машине, так что во всех случаях ругательства применяются обычные предостережения о пробеге вашего терминала. В любом случае, что-то для вас, чтобы жевать и играть. Cntl-C должен убить его, но было бы неплохо использовать правильную обработку ошибок.
#include <ncurses.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
int main(int argc, char *argv[])
{
srand (time(NULL));
initscr();
int maxRows, maxCols;
getmaxyx(stdscr, maxRows, maxCols);
int flakesPerRow = maxCols * 0.02;
scrollok(stdscr, TRUE);
while (true)
{
//setup top line
for (int i = 0; i < flakesPerRow; ++i)
{
int x = rand() % maxCols;
mvaddch(0, x, '*');
}
move(0,0); //keeps cursor from bouncing around
scrl(-1); //scroll down, not up
refresh();
napms(200); //delay 200ms
}
endwin();
}