LINUX.ORG.RU

Конкурс на лучший анимированный ASCII-ART

 


0

1

Я тут подумал, мне понравилось и я подумал ещё раз: =) а ведь интересная штука - анимированный аски-арт. Можно на разных языках, можно даже полноценный мультфильм. (По следам темы Кратко про нейронный сети. Тестирование.) У меня пока на тему Gentoo. И ещё в запасе, но я ее уже публиковал.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main (void) {
int i, a, b;
/*Gentoo*/
const char   color_str[] = "         -/oyddmdhs+:.             \n     -odNMMMMMMMMNNmhy+-`         \n   -yNMMMMMMMMMMMNNNmmdhyb+-      \n `omMMMMMMMMMMMMNmdmmmmddhhy/`    \n omMMMMMMMMMMMNhhyyyohmdddhhhdo`   \n.ydMMMMMMMMMMdhs++so/smdddhhhhdm+`\n oyhdmNMMMMMMMNdyooydmddddhhhhyhNd.\n  :oyhhdNNMMMMMMMNNNmmdddhhhhhyymMh\n    .:+sydNMMMMMNNNmmmdddhhhhhhmMmy\n       /mMMMMMMNNNmmmdddhhhhhmMNhs:\n    `oNMMMMMMMNNNmmmddddhhdmMNhs+` \n  `sNMMMMMMMMNNNmmmdddddmNMmhs/.\n /NMMMMMMMMNNNNmmmdddmNMNdso:`     \n+MMMMMMMNNNNNmmmmdmNMNdso/-        \n/hMMNNNNNNNNMNdhs++/-`             \n/hMMNNNNNNNNMNdhs++/-`             \n`/ohdmmddhys+++/:.`                \n";

b=0;
while (b  < 1000) {
sleep(1);
printf("\033[2J\033[H");
/*fflush(stdout);*/
/*system("clear");*/
printf("\n");

for (i=0; color_str[i] != '\0'; i++ ) {

	a = rand() % 1000;

	if (a < b && i < 1000) {
	printf("\033[94m%c", color_str[i]);
	continue;
	}
	printf("\033[0m%c", color_str[i]);

		}
		b = b + 100;
}

	return 0;
}


Последнее исправление: AnonymUser (всего исправлений: 3)

Мне что-то подумалось, что константная строка с кучей сходу непонятных символов - хорошее место чтобы спрятать в ней патч Бармина, а затем каким-нить незаметным Си-трюком (например битьём памяти при printf в переменную, которая затем подаётся в system, или битём стека чтобы переставить на неё адрес возврата) запустить его. Но вроде в этой проге такого нет.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)

Свою анимация я не написал, зато пропатчил твою:

@@@
-while (b  < 1000) {
-sleep(1);
-system("clear");
-printf("\n");
+while (b  <= 1000) {
+usleep(400000);
+printf("\033[H\033[2J\033[3J\n");
@@@
-		b = b + 100;
+		b = b + 40;
@@@
+       sleep(1);
+       printf(\033[0m\n");
	return 0;
}
По-моему так красивее.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Круто будет, если кто-нибудь напишет хороший снегопад. Можно с ветром, таянием снежинок.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main (void) {
int i, a, b;
/*Снегопал*/

b=0;
while (b  < 1000) {
sleep(1);
printf("\033[2J\033[H");
fflush(stdout);
/*system("clear");*/
printf("\n");

for (i=0; i < 7000; i++ ) {

	a = rand() % 1000;

	if (a < b && i < 7000) {
	printf("\033[94m❄️")	;
	continue;
	}
	printf("\033[0m ");

		}
		b =  100;
}

	return 0;
}

AnonymUser
() автор топика
Ответ на: комментарий от AnonymUser

printf(«\033[2J\033[H»);
fflush(stdout);
/*system(«clear»);*/
printf(«\n»);

Зачем тут fflush и зачем в итоге 4 строки вместо одной?

И почему у тебя такое ужасное форматирование кода?

firkax ★★★★★
()
Ответ на: комментарий от firkax

Про fflush мне так Алиса подсказала, но да, он не нужен.

Ибо руками писан код. Во! Придумал задачу для ИИ. Форматирование кода.

AnonymUser
() автор топика
Последнее исправление: AnonymUser (всего исправлений: 1)
Ответ на: комментарий от AnonymUser

Форматирование от deepai.org

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void) {
    int i, a, b;

    /* Снегопад */

    b = 0;
    while (b < 1000) {
        sleep(1);
        printf("\033[2J\033[H");
        /* system("clear"); */
        printf("\n");

        for (i = 0; i < 7000; i++) {
            a = rand() % 1000;

            if (a < b && i < 7000) {
                 printf("\033[94m\u2744");
                continue;
            }
            printf("\033[0m ");
        }
        b = 100; // Обновление переменной b (по логике, возможно, нужно изменить)
    }

    return 0;
}
AnonymUser
() автор топика
Последнее исправление: AnonymUser (всего исправлений: 1)
Ответ на: комментарий от gagarin0
  1. Контейнеров.
  2. ВМ.
  3. Контрольных сумм на файлы.
  4. Открытых репозитариев с исходниками.
  5. Программ (м.б., нейронных сетей), которые способны найти «уязы» в открытом коде.
AnonymUser
() автор топика
Последнее исправление: AnonymUser (всего исправлений: 3)

Вот снегопад:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define W 80
#define H 25

typedef unsigned char uchar;
typedef unsigned int uint;
typedef struct { uchar v,h,p,d; } snow;

static snow arr[H][W];
static int ww, xww;
static char buf[W*H*3];

static void xrand(uchar *v, uchar mask) {
  int v0;
  v0 = (*v) & mask;
  v0 = (v0 + (mask+1)/2)/2;
  mask++;
  v0 += (int)((mask/6+16)*(0.01*(random()%201)-1));
  mask--;
  if(v0<0) v0 = 0;
  if(v0>mask) v0 = mask;
  *v = ((*v) & ~mask) | v0;
}

static int yrand(int mod) { return random()%mod; }
static int zrand(int mod) { return !(random()%mod); }

int main(void) {
  uint j, k, x, y;
  snow *line, *l2;
  char *b;
  
  srandom(getpid());
  printf("\033[8;%u;%ut",H,W); fflush(stdout); ww = 1152;

  while(1) {
    for(j=H; j; ) {
      line = arr[--j];
      for(k=0; k<W; k++,line++) {
        if(!line->v && !line->h) continue;
        line->v = y = line->v + line->p;
        line->h = x = line->h + (line->d&127)*2 + ww;
        if((y/=256)&&j==H-1) { line->h = line->v = 0; continue; }
        if(!line->v && !line->h) line->v = 1;
        xrand(&line->p, 255);
        xrand(&line->d, 127);
        if((x/=256)==5 && !y) continue;
        x = (x+k+W-5)%W;
        l2 = line-k+x+y*W;
        if(!l2->h && !l2->v) *l2 = *line;
        else {
          l2->h = (line->h + l2->h)/2;
          l2->v = (line->v + l2->v)/2;
          l2->p = (line->p + l2->p)/2;
          l2->d = ((line->d&127) + (l2->d&127))/2 + 128;
          if(!l2->v && !l2->h) l2->v = 1;
        }
        line->h = line->v = 0;
      }
    }
    if(zrand(3000)) xww = (yrand(3)-1)*(40+yrand(60)+100*(yrand(4)+
                        (yrand(2)?0:yrand(4))+(yrand(5)?0:yrand(6))));
    if(xww) {
      if(xww<0) xww++; else xww--;
      if(!(xww%100)) xww = 0;
      else if(zrand(30)) ww = 1152 + xww;
    }
    ww = ww + random()%13 - 6;
    if(!xww) {
      if(ww<1088) ww = 1088;
      if(ww>1216) ww = 1216;
    } else {
      if(ww<0) ww = 0;
      if(ww>2304) ww = 2304;
    }
    if(ww<1120 && !(random()%4)) ww++;
    if(ww>1184 && !(random()%4)) ww--;
    for(k=0,line=arr[0]; k<W; k++,line++) {
      if(random()%130 || line->v || line->h) continue;
      line->v = 1; line->h = random()%256;
      line->p = (random()%64) + (random()%64) + (random()%64) + (random()%64);
      line->d = (random()%32) + (random()%32) + (random()%32) + (random()%32);
    }
    
    for(j=W*H-1,line=arr[0],b=buf; j; j--,line++) {
      if(!line->v && !line->h) *(b++) = ' ';
      else if(line->d<128) { b[0]=0xE2;b[1]=0x9D;b[2]=0x84;b+=3; }
      else *(b++) = '@';
    }
    fputs("\033[0m\033[H\033[2J\033[3J\033[94m",stdout);
    fwrite(buf, 1, b-buf, stdout); fflush(stdout);
    usleep(100000);
  }
}

firkax ★★★★★
()
Ответ на: комментарий от firkax
@@ -66,4 +66,4 @@
     if(xww) {
-      if(xww<0) xww++; else xww--;
-      if(!(xww%100)) xww = 0;
+      if(zrand(3)) if(xww<0) xww++; else xww--;
+      if(xww && !(xww%100)) { int tt = abs(xww); if(tt>100 && (tt>yrand(1300) || yrand(2) && tt>yrand(300) || yrand(2) && tt>yrand(600))) xww -= xww/tt*40; else xww = 0; }
       else if(zrand(30)) ww = 1152 + xww;
firkax ★★★★★
()
Ответ на: комментарий от firkax

Хороший снегопад, но есть пара но:

  1. У меня работает идеально только под 1 разрешением терминала. Если расширить окно, то снего идет уже не так правильно.
  2. Не клоссплатформенный, на Андроиде выдает 18 ошибок.
anonymous
()
Ответ на: комментарий от firkax

Крутой у тебя снегопад. У себя добавил увеличение плотности снега. И после 20:00 верчера снегопад уже на черном фоне - ночь.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
int main(void) {
    int i, a, b;

    struct tm t;
    char date[30];
    time_t now;
    struct tm *local_time;
	time(&now);
    local_time = localtime(&now);

    b = 0;
    while (b < 500) {
        sleep(1);
        printf("033[2J\033[H");


        for (i = 0; i < 7000; i++) {
            a = rand() % 1000;

            if (a < b && i < 7000) {
                 printf("\033[94m\u2744");
                continue;
            }


           if(local_time->tm_hour > 20 )
            printf("\033[0m\033[40m ");
           else
            printf("\033[0m ");

        }


        b = b + 1; /* Плотность*.
        /*Для одной плотности*/
        //b =  100;
    }

    return 0;
}

AnonymUser
() автор топика
Последнее исправление: AnonymUser (всего исправлений: 1)
Ответ на: комментарий от anonymous

Разрешение указано в исходнике вверху, он же сам и ресайзит (пытается по крайней мере) терминал в нужное. Соответственно смени его и перекомпилируй.

#define W 80
#define H 25

Не клоссплатформенный, на Андроиде выдает 18 ошибок.

Именно ошибок? Это каких, интересно? Тут вроде даже линуксизмов не используется.

firkax ★★★★★
()
Ответ на: комментарий от firkax
sn4.c:1:1: error:
      expected identifier or '('
    1 | && !l2->h) l2->v = 1;
      | ^
sn4.c:2:9: error:
      extraneous closing brace ('}')
    2 |         }
      |         ^
sn4.c:3:9: error:
      unknown type name 'line'
    3 |         line->h = line->v = 0;
      |         ^
sn4.c:3:13: error:
      expected identifier or '('
    3 |         line->h = line->v = 0;
      |             ^
sn4.c:4:7: error:
      extraneous closing brace ('}')
    4 |       }
      |       ^
sn4.c:5:5: error:
      extraneous closing brace ('}')
    5 |     }
      |     ^
sn4.c:6:5: error:
      expected identifier or '('
    6 |     if(zrand(3000)) xww = (yrand(3)-...
      |     ^
sn4.c:8:5: error:
      expected identifier or '('
    8 |     if(xww) {
      |     ^
sn4.c:13:5: error:
      type specifier missing, defaults to
      'int'; ISO C99 and later do not
      support implicit int [-Wimplicit-int]
   13 |     ww = ww + random()%13 - 6;
      |     ^
      |     int
sn4.c:13:15: error:
      call to undeclared function 'random';
      ISO C99 and later do not support
      implicit function declarations
      [-Wimplicit-function-declaration]
   13 |     ww = ww + random()%13 - 6;
      |               ^
sn4.c:13:27: error:
      initializer element is not a
      compile-time constant
   13 |     ww = ww + random()%13 - 6;
      |          ~~~~~~~~~~~~~~~~~^~~
sn4.c:14:5: error:
      expected identifier or '('
   14 |     if(!xww) {
      |     ^
sn4.c:17:7: error:
      expected identifier or '('
   17 |     } else {
      |       ^
sn4.c:21:5: error:
      expected identifier or '('
   21 |     if(ww<1120 && !(random()%4)) ww++;
      |     ^
sn4.c:22:5: error:
      expected identifier or '('
   22 |     if(ww>1184 && !(random()%4)) ww--;
      |     ^
sn4.c:23:5: error:
      expected identifier or '('
   23 |     for(k=0,line=arr[0]; k<W; k++,line++) {
      |     ^
sn4.c:30:5: error:
      expected identifier or '('
   30 |     for(j=W*H-1,line=arr[0],b=buf; j...
      |     ^
sn4.c:35:11: error:
      expected parameter declarator
   35 |     fputs("\033[0m\033[H\033[2J\033[...
      |           ^
sn4.c:35:11: error:
      expected ')'
sn4.c:35:10: note: to
      match this '('
   35 |     fputs("\033[0m\033[H\033[2J\033[...
      |          ^
fatal error: too many errors
      emitted, stopping now [-ferror-limit=]
20 errors generated.
AnonymUser
() автор топика
Ответ на: комментарий от firkax

Да. Похоже. Так и есть. На Андроиде, на маленьком экране, эффект от моего скрипта сильно не отличим. С работы вернусь ещё что-нибудь покручу… То , что я на работе на телефоне напрограммировал, как-то пока даже хуже.

AnonymUser
() автор топика
Последнее исправление: AnonymUser (всего исправлений: 1)
Ответ на: комментарий от firkax

Ну, ладно. Ты выиграл конкурс. Предлагаю всем скинуться тебе на МакБук Про. или билет в Хогвардс =)

Но напоследок, после работы, надумал кратковремнный снег с небольшими порывами ветра: Прерывистый, так сказать:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

/* Кратковременный снег с лёгким порывистым ветром */

int *buffering(int str[], int number_of) {
    int z, a;

    for (z = 0; z < 30; z++) {
        a = rand() % 100;
        str[z] = a;
    }
    return str;
}

int snow(int str[]) {
    int a, b, i, j;
    a = rand() % 10;

    for (i = 0; i < str[i]; i++) {
        for (b = 0; b != str[i]; b++) {
            printf(" ");
        }
        if (a > 3) {
            printf("  ");
        }
        if (a > 5) {
            printf("    ");
        }
        printf("\u2744");
    }
    printf("\n");
}

int main(void) {
    int str[30] = {0};
    int str1[30] = {0};
    int str2[30] = {0};

    int a, b, i, j, k;

    buffering(str, 30);
    buffering(str1, 30);
    buffering(str2, 30);

    for (j = 0; j < 10; j++) {
        if (j == 9) {
            j = 0;
            buffering(str, 30);
            buffering(str1, 30);
            buffering(str2, 30);
            continue;
        }

        sleep(1);
	printf("\033[2J\033[H");
	fflush(stdout);
        k = 0;

        while (k <= j) {
            printf("\n");
            k++;
        }

        if (j > 1) {
            snow(str1);
            printf("\n");
        }
        if (j > 2) {
            snow(str2);
            printf("\n");
        }
        if (j > 0) {
            snow(str);
            printf("\n");
        }
    }
}

AnonymUser
() автор топика
Последнее исправление: AnonymUser (всего исправлений: 1)
Ответ на: комментарий от AnonymUser

Чего это выиграл, где остальные кандидаты?! Нужно минимум 10 участников.

firkax ★★★★★
()
Ответ на: комментарий от dataman

Во времена царя гороха в оффотпике не работали ескейп последовательности. Вот с тех пор оно и ползёт.

peregrine ★★★★★
()
Ответ на: комментарий от firkax

Зачем тут fflush

Вот и настал момент, когда Алиса и Gemeni стали умнее кожаных. Проверяй (код выдан gemeni)

#include <stdio.h>

// Функция имитации тяжелых вычислений
void heavyCalculations() {
    long long counter = 0;
    // Крутим пустой цикл пару секунд, чтобы занять процессор
    for (long long i = 0; i < 3000000000LL; ++i) {
        counter += i;
    }
    // Используем результат, чтобы компилятор не оптимизировал и не удалил цикл
    (void)counter; 
}

int main() {
    printf("=========================================\n");
    printf(" ТЕКСТ, КОТОРЫЙ ДОЛЖЕН ИСЧЕЗНУТЬ МГНОВЕННО\n");
    printf("=========================================\n");

    // Пауза перед тестом, чтобы вы успели заметить текст
    heavyCalculations();

    // Отправляем команду очистки в БУФЕР (без \n на конце!)
    printf("\x1B[H\x1B[2J");

    // --- РАЗНИЦА ЗДЕСЬ ---
    // Если раскомментировать строку ниже, экран очистится СРАЗУ:
    // fflush(stdout); 

    // Запускаем тяжелые вычисления на несколько секунд.
    // Из-за отсутствия fflush старый текст ВСЁ ЕЩЁ ОСТАНЕТСЯ НА ЭКРАНЕ,
    // пока этот код работает, хотя команда очистки уже была вызвана выше!
    heavyCalculations();

    printf("Вычисления завершены! (Только сейчас буфер сбросился)\n");

    return 0;
}

Хотя, конечно, там многопоток надо по идее. Но даже так разница очевидна. Собери 2 бинаря один с fflush, другой без и запусти их одновременно.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от peregrine

Вот и настал момент, когда Алиса и Gemeni стали умнее кожаных. Проверяй (код выдан gemeni)

Не стали. Алиса и deepai исправили один мой код до нерабочего состояния.

AnonymUser
() автор топика
Последнее исправление: AnonymUser (всего исправлений: 2)
Ответ на: комментарий от peregrine

Если ты это всерьёз написал то 🤦

fflush там (в коде который я комментировал) не нужен и ни на что не влияет. А твой пример вообще не в тему, он другой. Выглядит как урок из какого-то учебника, найденный по ключевому слову «fflush». Что такое fflush я ни у кого не спрашивал.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Я про то, что в реальной программе clear надо выносить в функцию, а её делать надо нормально, а не тут работает а тут нет. Ещё и для старых оффтопиков код сделать, потому что они на эскейп последовательности вообще плевать хотели. cmd.exe в них не умеет.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

что в реальной программе clear надо выносить в функцию

В общем случае - нет, не надо.

а её делать надо нормально, а не тут работает а тут нет

Если хочешь, чтобы вся печать в терминал сразу актуализировалась - отключи ему буферизацию (это делается одной строчкой в начале программы). А каких-то причин слать esc-последоватиельности повышенным по отношению к обычному тексту приоритетом нет. Если прога хочет актуализировать - сделает fflush, но нужда в этом известна только вызывающему коду, а никак не clear-у.

Ещё и для старых оффтопиков код сделать

Только если ты планируешь компилировать прогу под оффтоп. «На всякий случай, а вдруг» - нет. В юниксовом терминале очистка экрана может быть частью захардкоженной длинной строки, и «рефакторить» простое puts (оно может и не отдельно стоять, быть каким-нить колбеком или ещё чем-то что просто так не расширишь) в какой-то более сложный код просто ради «а вдруг оффтоп» совсем ни к чему.

cmd.exe в них не умеет

Открою тебе секрет, bash тоже не умеет парсить esc-последовательности. Это не его задача.

firkax ★★★★★
()
Ответ на: комментарий от firkax

conhost.exe тоже не умеет в старых оффтопиках этого, а писать прикладной linux/windows/osx/подставь_тут_другие_ОС-only код это то, за что надо руки отрубать вместе с головами у разработчиков.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

Не «тоже», а как раз именно он.

Твою приверженность к усложнению кода ради гипотетической кроссплатформенности я не разделяю. Бывают случаи когда ты именно специально пишешь кроссплатформенно - там да, но не надо делать вид что это дефолт. И если переносимость между разными юниксами это ещё часто относительно лёгкая задача и сделать её на всякий случай ещё есть резон, то вот совместимость с кардинально другими платформами это уже совсем другое дело.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Вот смотри. Сейчас у нас нет Windows, есть Linux. В теории через N лет весь софт от РФ будет Linux-only. А потом M$ договорится с Intel и AMD и компы станут такими огороженными, что кроме Windows/OSX ничто не сможет загружаться (залочат загрузчик как в андроидах, но с криптой и TPM). А дальше — свои конкурентоспособные компы мы не сможем ни в 2040 ни в 3180. И у нашего государства будет только 3 варианта: жить без электроники (старые машины всё равно сломаются со временем), договариваться с USA и переходить на их огороженные системы (но прикладной софт тоже будет их или с нуля придётся писать), сделать аналоговнет из 1992 года и на тех же технологиях. Смысл резать себе яйца самостоятельно, ограничивая свои же возможности.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

Ты какую-то ерунду пишешь. Ну и в любом случае никто не обязан поддерживать то, что он не считает нужным поддерживать.

firkax ★★★★★
()

Моросящий дождик (и вроде как без церей Маркова, хотя я почитал про них):

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/*Что-то вроде моросящего дождика*/
int *buffering(int str[], int number_of) {
    int z, a;

    for (z = 0; z < 20; z++) {
        a = rand() % 100;
        str[z] = a;
    }
    return str;
}

int main(void) {
	int x, y, i, j, b;

	int str[20];
	buffering(str, 10);

while (1) {
	    //sleep(1);
		printf("\033[2J\033[H");
 for (j = 0; j < 20; j++) {
	 x= rand() % 2;
	 y= rand() % 3;
  for (i = 0; i < x; i++)
	  printf("  ");
	 for (i = 0; i < y; i++)
	  printf("\n");
	  	 for (i = 0; i < str[j] ; i++)
	  	  printf("  ");
	printf("💧");
		}
b=0;
	printf("\n\n\n");
	while (b < 1000) {
		b++;
		/*если убрать слип, то будет быстро, можно переделать в дождь*/
		    //sleep(1);
 for (j = 0; j < 20; j++) {
	 x= rand() % 2;
	 y= rand() % 3;
  for (i = 0; i < x; i++)
	  printf("  ");
	 for (i = 0; i < y; i++)
	  printf("\n");
	  	 for (i = 0; i < str[j] ; i++)
	  	  printf("  ");
	printf("💧");
		   }

		}
	}
}


AnonymUser
() автор топика
Последнее исправление: AnonymUser (всего исправлений: 1)
Ответ на: комментарий от AnonymUser

Дождь со снегом быстрый с завершением:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/*Что-то вроде моросящего дождика*/
int *buffering(int str[], int number_of) {
    int z, a;

    for (z = 0; z < 20; z++) {
        a = rand() % 100;
        str[z] = a;
    }
    return str;
}

int main(void) {
	int x, y, i, j, b, v;

	int str[20];
	buffering(str, 10);
v=0;
while (v < 3) {
v++;
		printf("\033[2J\033[H");
		sleep(1);

 for (j = 0; j < 20; j++) {
	 x= rand() % 2;
	 y= rand() % 3;
  for (i = 0; i < x; i++)
	  printf("  ");
	 for (i = 0; i < y; i++)
	  printf("\n");
	  	 for (i = 0; i < str[j] ; i++)
	  	  printf("  ");
	printf("\u2744");
		}
b=0;
	printf("\n\n\n");
	while (b < 5000 ){
		b++;
		/*если убрать слип, то будет быстро, можно переделать в дождь*/
		    //sleep(1);
 for (j = 0; j < 20; j++) {
	 x= rand() % 2;
	 y= rand() % 3;
  for (i = 0; i < x; i++)
	  printf("  ");
	 for (i = 0; i < y; i++)
	  printf("\n");
	  	 for (i = 0; i < str[j] ; i++)
	  	  printf(" ");
	 if (b%2==0)
	printf("\u2744");
	else
	printf("💧");

		   }

		}
	}
				printf("\n Дождь со снегом кончился!\n ");
}


AnonymUser
() автор топика
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария