Автор Гілка: Багаття bash  (Прочитано 2848 раз)

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Багаття bash
« : 2007-10-26 21:51:31 »
Не для production, бо надто повільне, JFF :)
#! /bin/bash

# TODO:
# * Speed-up!
# * Improve oven gen algo - it should take into account neighbors state
#   and increase appropriate probability.

X=100
Y=35

C=(
' '
$'\e[1;31m.'
$'\e[1;33m,'
$'\e[0;31m:'
$'\e[0;33m;'
$'\e[0;31m|'
$'\e[1;31mj'
$'\e[1;31mo'
$'\e[1;33m*'
$'\e[1;33m%'
$'\e[1;33m#'
$'\e[1;37m$'
$'\e[1;37m@'
)
buf=( 0{,}{,}{,,,,}{,,,,}{,,,,}{,,,,,,} ) # 100*35 = 2*2*5*5*5*7 :)

MC=$(( ${#C
  • } - 1 ))

MB=$(( X * (Y-1) ))
M=$(( X*Y ))

while : ; do
      l=''
      echo -n $'\e[0;0f\e[0m'
      for (( i=0, j=X; i < MB ; i++ )) ; do
            c=${buf[i+X]}
            if (( c )) ; then
                  (( c-- ))
            fi
            buf=$c
            if (( --j )) ; then
                  l="$l${C[c]}"
            else
                  echo -n "$l${C[c]}"
                  l=''
                  j=X
            fi
      done
      for (( i=MB; i < M ; i++ )) ; do
            c=${buf}
            (( c += ( (RANDOM%5) - 2 ) ))
            if (( c < 0 )) ; then
                  c=0
            elif (( c > MC )) ; then
                  c=$MC
            fi
            buf=$c
            l="$l${C[c]}"
      done
      echo -n "$l"
done

# The End

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: Багаття bash
« Відповідей #1 : 2007-10-26 21:54:25 »
Flame=)))

Михайло Даниленко

  • Гість
Re: Багаття bash
« Відповідей #2 : 2008-07-08 21:53:55 »
Іще один простенький візуальний ефект - створює грозову атмосферу.
$ while : ; do tput flash; sleep 0.$(($RANDOM%10)) ; done &

P.S. Маю нагоду подякувати пану Володимиру за оце, тоді, якщо чесно, не оцінив.