sudo apt install -y piu-piu
#----------------------------------------------------------------------+ #Color picker, usage: printf ${BLD}${CUR}${RED}${BBLU}"Some text"${DEF}| #---------------------------+--------------------------------+---------+ # Text color | Background color | | #------------+--------------+--------------+-----------------+ | # Base |Lighter\Darker| Base | Lighter\Darker | | #------------+--------------+--------------+-----------------+ | RED='\e[31m'; LRED='\e[91m'; BRED='\e[41m'; BLRED='\e[101m' #| Red | GRN='\e[32m'; LGRN='\e[92m'; BGRN='\e[42m'; BLGRN='\e[102m' #| Green | YLW='\e[33m'; LYLW='\e[93m'; BYLW='\e[43m'; BLYLW='\e[103m' #| Yellow | BLU='\e[34m'; LBLU='\e[94m'; BBLU='\e[44m'; BLBLU='\e[104m' #| Blue | MGN='\e[35m'; LMGN='\e[95m'; BMGN='\e[45m'; BLMGN='\e[105m' #| Magenta | CYN='\e[36m'; LCYN='\e[96m'; BCYN='\e[46m'; BLCYN='\e[106m' #| Cyan | GRY='\e[37m'; DGRY='\e[90m'; BGRY='\e[47m'; BDGRY='\e[100m' #| Gray | #------------------------------------------------------------+---------+ # Effects | #----------------------------------------------------------------------+ DEF='\e[0m' # Default color and effects | BLD='\e[1m' # Bold\brighter | DIM='\e[2m' # Dim\darker | CUR='\e[3m' # Italic font | UND='\e[4m' # Underline | INV='\e[7m' # Inverted | COF='\e[?25l' # Cursor Off | CON='\e[?25h' # Cursor On | #----------------------------------------------------------------------+ # Text positioning, usage: XY 10 10 "Some text" | XY () { printf "\e[${2};${1}H${3}"; } # | #----------------------------------------------------------------------+ # Line, usage: line - 10 | line -= 20 | line "word1 word2 " 20 | line () { printf %.s"${1}" $(seq ${2}); } # | #----------------------------------------------------------------------+
__ |★〵____ \_| / °)- |/
__ |${RED}★${DEF}〵____ \_| /${UND}${BLD} °${DEF})${DGRY}-${DEF} |/
hero=(" " "__ " "|${RED}★${DEF}〵____ " " \_| /${UND}${BLD} °${DEF})${DGRY}-${DEF}" " |/ " " ")
for (( i=0; i<${#hero[@]}; i++ )); do XY ${X} $(($Y + $i)) " ${hero[$i]} "; done
while true; do read -t0.0001 -n1 input; case $input in "w") ((Y--));; "a") ((X--));; "s") ((Y++));; "d") ((X++));; esac for (( i=0; i<${#hero[@]}; i++ )); do XY ${X} $(($Y + $i)) " ${hero[$i]} " done done
function bye () { stty echo # printf "${CON}${DEF}" # , exit # } trap bye INT # bye Ctrl+C printf "${COF}" # stty -echo #
function get_dimensions { endx=$( tput cols ) # - (X) endy=$( tput lines ) # - (Y) heroendx=$(( $endx - 12 )) # . X heroendy=$(( $endy - 7 )) # . Y }
while true; do get_dimensions read -t0.0001 -n1 input; case $input in "w") ((Y--)); [ $Y -lt 1 ] && Y=1;; "a") ((X--)); [ $X -lt 1 ] && X=1;; "s") ((Y++)); [ $Y -gt $heroendy ] && Y=$heroendy;; "d") ((X++)); [ $X -gt $heroendx ] && X=$heroendx;; esac for (( i=0; i<${#hero[@]}; i++ )); do XY ${X} $(($Y + $i)) " ${hero[$i]} " done done
while true; do HX=$(($X + 9)); HY=$(($Y + 3)) get_dimensions read -t0.0001 -n1 input; case $input in "w") ((Y--)); [ $Y -lt 1 ] && Y=1;; "a") ((X--)); [ $X -lt 1 ] && X=1;; "s") ((Y++)); [ $Y -gt $heroendy ] && Y=$heroendy;; "d") ((X++)); [ $X -gt $heroendx ] && X=$heroendx;; "p") PIU+=("$HY $HX");; esac for (( i=0; i<${#hero[@]}; i++ )); do XY ${X} $(($Y + $i)) " ${hero[$i]} " done done
dbases=( #-------------------------------+---------------+------------+---------+ # Ssh address | Dump folder | DB name | New db | #-------------------------------+---------------+------------+---------+ '-p123 user@192.168.0.1' '/backup' 'test_db' 'db1' '-p321 looser@127.1' '/tmp' 'main_db' 'db2' 'someserver' '/tmp/backup' 'a' 'db3' ); N=${#dbases[*]}; C=4
tmp=("${dbases[@]:$i:$C}") srvadr="${tmp[0]}" bkpath="${tmp[1]}" dbname="${tmp[2]}" dbtest="${tmp[3]}"
read srvadr bkpath dbname dbtest <<< "${dbases[@]:$i:$C}"
#!/bin/bash dbases=( #-------------------------------+---------------+------------+---------+ # Ssh address | Dump folder | DB name | New db | #-------------------------------+---------------+------------+---------+ '-p123 user@192.168.0.1' '/backup' 'test_db' 'db1' '-p321 looser@127.1' '/tmp' 'main_db' 'db2' 'someserver' '/tmp/backup' 'a' 'db3' ); N=${#dbases[*]}; C=4 for ((i=0; i<${N}; i+=${C})); do tmp=("${dbases[@]:$i:$C}") srvadr="${tmp[0]}" bkpath="${tmp[1]}" dbname="${tmp[2]}" dbtest="${tmp[3]}" # copy dump scp ${srvadr}${bkpath}/${dbname}.gz . # test dump gunzip -c ${dbname}.gz | psql -v ON_ERROR_STOP=1 ${dbtest} \ || { printf "\nDB error!"; continue; } done
df=($(df -h)); echo ${df[5]}
shoot=( " ->" "-=>" "=->" "- >")
shoot=( "${RED} -${DEF}${BLD}${GRN}>${DEF}" "${BLD}${LRED}-=${DEF}${GRN}>${DEF}" "${LRED}=-${DEF}${BLD}${GRN}>${DEF}" "${RED}- ${DEF}${GRN}>${DEF}")
function get_dimensions { endx=$( tput cols ) # - (X) endy=$( tput lines ) # - (Y) heroendx=$(( $endx - 12 )) # . X heroendy=$(( $endy - 7 )) # . Y bullendx=$(( $endx - 4 )) # . X }
#-------------------------------{ }--------------------------------------- # , L? ((L++)); [ $L -gt 3 ] && L=0 NP=${#PIU[@]} # - # for (( t=0; t<${NP}; t++ )); do # "YX" # .. X ( ) PI=(${PIU[$t]}); PY=${PI[0]}; PX=${PI[1]} # X ((PX++)) [ $PX -ge $bullendx ] && { # : XY ${PX} ${PY} " " # ( ) unset PIU[$t] # PIU=("${PIU[@]}") # # .. unset ((NP--)) # - continue # . # , "PIU" } || { PIU[$t]="$PY $PX"; } # , XY ${PX} ${PY} " ${shoot[$L]}" done
alien=( " ___ " "( o ) " ' `¯´ ')
small=( 'o ' ' ' ' o' ' o ')
small=( ${YLW}'o '${DEF} ${YLW}' '${DEF} ${YLW}' o'${DEF} ${YLW}' o '${DEF})
function sprites { # "" alien=( " _${UND}${BLD}_${DEF}_ " # small "(${small[$L]}${DEF}) " ' `¯´ ') }
enmyendx=$(( $endx - 5 )) enmyendy=$(( $endy - 7 ))
#-----------------------------{ }-------------------------------------- [ $enumber -lt $enmax ] && { OBJ+=("$enmyendx $(( (RANDOM % $enmyendy) + 3 )) alien") ((enumber++)) }
NO=${#OBJ[@]} # - er=${#alien[@]} # - # for (( i=0; i<$NO; i++ )); do # "XY type" OI=(${OBJ[$i]}); OX=${OI[0]}; OY=${OI[1]}; type=${OI[2]} # X ( ) ((OX--)) # : [ $OX -lt 1 ] && { # , # .. for (( k=0; k<$er; k++ )); do XY ${OX} $(($OY + $k)) " " done unset OBJ[$i] # OBJ=("${OBJ[@]}") # # .. unset ((NO--)) # - ((enumber--)) # - continue # . # , "OBJ" } || { OBJ[$i]="$OX $OY $type"; } # , for (( p=0; p<${er}; p++ )); do XY ${OX} $(($OY + $p)) "${alien[$p]}" done done
# for (( p=0; p<${er}; p++ )); do # for (( t=0; t<${NP}; t++ )); do # # "YX" # .. X ( ) PI=(${PIU[$t]}); PY=${PI[0]}; PX=${PI[1]} # # <i>case</i> <i>test([])</i> .. <i>case</i> # , # , case "$(($OY + 1)) $(($OX + $p))" in # "${PIU[$t]}") # , # .. for (( k=0; k<$er; k++ )); do XY ${OX} $(($OY + $k)) " " done unset OBJ[$i] # OBJ=("${OBJ[@]}") # ((NO--)) # - ((enumber--)) # - # # ( ) XY ${PX} ${PY} " " unset PIU[$t] # PIU=("${PIU[@]}") # ((NP--)) # - break # ;; esac done done
frags=0 # life=3 # function remove_obj () { for (( k=0; k<$er; k++ )); do XY ${OX} $(($OY + $k)) " " done unset OBJ[$1]; OBJ=("${OBJ[@]}"); ((NO--)) } function remove_piu () { XY ${PX} ${PY} " " unset PIU[$1]; PIU=("${PIU[@]}"); ((NP--)) }
#-------------------------------{ }--------------------------------------- # , L? ((L++)); [ $L -gt 3 ] && L=0 NP=${#PIU[@]} # - # for (( t=0; t<${NP}; t++ )); do # "YX" # .. X ( ) PI=(${PIU[$t]}); PY=${PI[0]}; PX=${PI[1]} # X ((PX++)) [ $PX -ge $bullendx ] && { # : remove_piu ${t} # , # "PIU" continue # . # , "PIU" } || { PIU[$t]="$PY $PX"; } # , XY ${PX} ${PY} " ${shoot[$L]}" done #------------------------------{ }------------------------------------- [ $enumber -lt $enmax ] && { OBJ+=("$enmyendx $(( (RANDOM % $enmyendy) + 3 )) alien") ((enumber++)) } NO=${#OBJ[@]} # - er=${#alien[@]} # - # for (( i=0; i<$NO; i++ )); do # "XY type" OI=(${OBJ[$i]}); OX=${OI[0]}; OY=${OI[1]}; type=${OI[2]} # X ( ) ((OX--)) [ $OX -lt 1 ] && { # : remove_obj ${i} # , , # "OBJ" ((enumber--)) # - continue # . # , "OBJ" } || { OBJ[$i]="$OX $OY $type"; } # , for (( p=0; p<${er}; p++ )); do XY ${OX} $(($OY + $p)) "${alien[$p]}" done # for (( p=0; p<${er}; p++ )); do # for (( t=0; t<${NP}; t++ )); do # # "YX" # .. X ( ) PI=(${PIU[$t]}); PY=${PI[0]}; PX=${PI[1]} # # <i>case</i> <i>test([])</i> .. <i>case</i> # , # , case "$(($OY + 1)) $(($OX + $p))" in # # "${PIU[$t]}") remove_obj ${i} # , , # # "OBJ" ((enumber--)) # - # ((frags++)) # remove_piu ${t} # , # # "PIU" break # ;; esac done # , # case "$(($OY + 1)) $(($OX + $p))" in # # "$HY $HX") remove_obj ${i} # , , # "OBJ" ((enumber--)) # - ((life--)) # ((frags++)) # break # ;; esac done done
#----------------------------{ }------------------------------ XY 0 0 "${BLD}killed aliens: ${DEF}${CYN}${frags}${DEF} ${BLD}Life: ${DEF}${CYN}${life}${DEF} " [ $life -le 0 ] && { clear; echo 'Game over man!'; bye; }
#!/bin/bash #----------------------------------------------------------------------+ #Color picker, usage: printf ${BLD}${CUR}${RED}${BBLU}"Some text"${DEF}| #---------------------------+--------------------------------+---------+ # Text color | Background color | | #------------+--------------+--------------+-----------------+ | # Base |Lighter\Darker| Base | Lighter\Darker | | #------------+--------------+--------------+-----------------+ | RED='\e[31m'; LRED='\e[91m'; BRED='\e[41m'; BLRED='\e[101m' #| Red | GRN='\e[32m'; LGRN='\e[92m'; BGRN='\e[42m'; BLGRN='\e[102m' #| Green | YLW='\e[33m'; LYLW='\e[93m'; BYLW='\e[43m'; BLYLW='\e[103m' #| Yellow | BLU='\e[34m'; LBLU='\e[94m'; BBLU='\e[44m'; BLBLU='\e[104m' #| Blue | MGN='\e[35m'; LMGN='\e[95m'; BMGN='\e[45m'; BLMGN='\e[105m' #| Magenta | CYN='\e[36m'; LCYN='\e[96m'; BCYN='\e[46m'; BLCYN='\e[106m' #| Cyan | GRY='\e[37m'; DGRY='\e[90m'; BGRY='\e[47m'; BDGRY='\e[100m' #| Gray | #------------------------------------------------------------+---------+ # Effects | #----------------------------------------------------------------------+ DEF='\e[0m' # Default color and effects | BLD='\e[1m' # Bold\brighter | DIM='\e[2m' # Dim\darker | CUR='\e[3m' # Italic font | UND='\e[4m' # Underline | INV='\e[7m' # Inverted | COF='\e[?25l' # Cursor Off | CON='\e[?25h' # Cursor On | #----------------------------------------------------------------------+ # Text positioning, usage: XY 10 10 "Some text" | XY () { printf "\e[${2};${1}H${3}"; } # | #----------------------------------------------------------------------+ # Line, usage: line - 10 | line -= 20 | line "word1 word2 " 20 | line () { printf %.s"${1}" $(seq ${2}); } # | #----------------------------------------------------------------------+ small=( ${YLW}'o '${DEF} ${YLW}' '${DEF} ${YLW}' o'${DEF} ${YLW}' o '${DEF}) hero=(" " "__ " "|${RED}★${DEF}〵____ " " \_| /${UND}${BLD} °${DEF})${DGRY}-${DEF}" " |/ " " ") shoot=( "${RED} -${DEF}${BLD}${GRN}>${DEF}" "${BLD}${LRED}-=${DEF}${GRN}>${DEF}" "${LRED}=-${DEF}${BLD}${GRN}>${DEF}" "${RED}- ${DEF}${GRN}>${DEF}") X=1; Y=1 # enumber=0 # enmax=10 # frags=0 # life=3 # #-----------------------------{ }------------------------------------- function sprites { alien=( " _${UND}${BLD}_${DEF}_ " "(${small[$L]}${DEF}) " ' `¯´ ') } function remove_obj () { for (( k=0; k<$er; k++ )); do XY ${OX} $(($OY + $k)) " " done unset OBJ[$1]; OBJ=("${OBJ[@]}"); ((NO--)) } function remove_piu () { XY ${PX} ${PY} " " unset PIU[$1]; PIU=("${PIU[@]}"); ((NP--)) } function bye () { stty echo printf "${CON}${DEF}" exit } function get_dimensions { endx=$( tput cols ) endy=$( tput lines ) heroendx=$(( $endx - 12 )) heroendy=$(( $endy - 7 )) bullendx=$(( $endx - 4 )) enmyendx=$(( $endx - 5 )) enmyendy=$(( $endy - 7 )) } #----------------------------------------------------------------------------- trap bye INT printf "${COF}" stty -echo clear #---------------------------{ }--------------------------------- while true; do HX=$(($X + 9)); HY=$(($Y + 3)) get_dimensions; sprites read -t0.0001 -n1 input; case $input in "w") ((Y--)); [ $Y -lt 1 ] && Y=1;; "a") ((X--)); [ $X -lt 1 ] && X=1;; "s") ((Y++)); [ $Y -gt $heroendy ] && Y=$heroendy;; "d") ((X++)); [ $X -gt $heroendx ] && X=$heroendx;; "p") PIU+=("$HY $HX");; esac for (( i=0; i<${#hero[@]}; i++ )); do XY ${X} $(($Y + $i)) " ${hero[$i]} " done #--------------------------{ }--------------------------------- ((L++)); [ $L -gt 3 ] && L=0 NP=${#PIU[@]} # for (( t=0; t<${NP}; t++ )); do PI=(${PIU[$t]}); PY=${PI[0]}; PX=${PI[1]}; ((PX++)) [ $PX -ge $bullendx ] && { remove_piu ${t} continue } || { PIU[$t]="$PY $PX"; } XY ${PX} ${PY} " ${shoot[$L]}" done #-------------------------{ }------------------------------- [ $enumber -lt $enmax ] && { OBJ+=("$enmyendx $(( (RANDOM % $enmyendy) + 3 )) alien") ((enumber++)) } NO=${#OBJ[@]} # - er=${#alien[@]} # - # for (( i=0; i<$NO; i++ )); do OI=(${OBJ[$i]}); OX=${OI[0]}; OY=${OI[1]}; ((OX--)) [ $OX -lt 1 ] && { remove_obj ${i} ((enumber--)) continue } || { OBJ[$i]="$OX $OY $type"; } # for (( p=0; p<${er}; p++ )); do XY ${OX} $(($OY + $p)) "${alien[$p]}" done # for (( p=0; p<${er}; p++ )); do for (( t=0; t<${NP}; t++ )); do PI=(${PIU[$t]}); PY=${PI[0]}; PX=${PI[1]} case "$(($OY + 1)) $(($OX + $p))" in "${PIU[$t]}") remove_obj ${i} ((enumber--)) ((frags++)) remove_piu ${t} break ;; esac done # case "$(($OY + 1)) $(($OX + $p))" in "$HY $HX") remove_obj ${i} ((enumber--)) ((life--)) ((frags++)) break ;; esac done done #-----------------------{ }------------------------ XY 0 0 "${BLD}killed aliens: ${DEF}${CYN}${frags}${DEF} ${BLD}Life: ${DEF}${CYN}${life}${DEF} " [ $life -le 0 ] && { clear; echo 'Game over man!'; bye; } done
function mover () { er=${#sprite[@]} # [ ${1} = 0 ] && { ((OX--)) [ $OX -lt 0 ] && OX=0 OBJ[$i]="$OX $OY $type" } # [ $OX -lt 1 ] && { remove_obj ${i} case ${type} in "alien") ((enumber--));; esac continue } # for (( p=0; p<${er}; p++ )); do # XY ${OX} $(($OY + $p)) "${sprite[$p]}" # case ${type} in "life" ) # case "$(($OY + $p)) $OX" in "$HY $HX") ((life++)) remove_obj ${i} break;; esac;; "ammo" ) # case "$(($OY + $p)) $OX" in "$HY $HX") ((ammo+=100)) remove_obj ${i} break;; esac;; "gunup" ) # case "$(($OY + $p)) $OX" in "$HY $HX") ((G++)) remove_obj ${i} break;; esac;; "bfire" ) # case "$OY $OX" in "$HY $HX") ((life--)) remove_obj ${i} break;; esac;; "alien" ) for (( t=0; t<${NP}; t++ )); do # case "$(($OY + 1)) $(($OX + $p))" in "${PIU[$t]}") # [ $((RANDOM % $rnd)) -eq 0 ] && { OBJ+=("$OX $OY \ ${bonuses[$((RANDOM % ${#bonuses[@]}))]}") } ((frags++)) ((enumber--)) remove_obj ${i} remove_piu ${t} # OBJ+=("${OX} ${OY} boom") break;; esac done # case "$(($OY + 1)) $(($OX + $p))" in "$HY $HX") ((life--)) ((frags++)) ((enumber--)) remove_obj ${i} OBJ+=("${OX} ${OY} boom") break;; esac;; esac done }
# \\ , |------------------ NO=${#OBJ[@]} for (( i=0; i<$NO; i++ )); do OI=(${OBJ[$i]}); OX=${OI[0]}; OY=${OI[1]}; type=${OI[2]} case $type in # 1 "boom" ) er=${boomC} for part in "${boom[@]:$B:$boomC}"; do XY ${OX} ${OY} " ${part}" ((OY++)) done [ ${E} = 0 ] && { ((B+=${boomC})) [ $B -gt ${boomN} ] && { B=0 remove_obj ${i} } };; # sprite # mover # # ( ) "alien" ) sprite=("${alien[@]}"); mover 0;; "bfire" ) sprite=("${bfire[@]}"); mover 0;; "ammo" ) sprite=("${ammob[@]}"); mover 0;; "life" ) sprite=("${lifep[@]}"); mover 0;; "gunup" ) sprite=("${gunup[@]}"); mover 0;; "tree1" ) sprite=("${tree1[@]}"); mover ${Q};; "tree2" ) sprite=("${tree2[@]}"); mover ${W};; "tree3" ) sprite=("${tree3[@]}"); mover ${E};; "cloud1") sprite=("${cloud1[@]}"); mover ${Q};; "cloud2") sprite=("${cloud2[@]}"); mover ${W};; "cloud3") sprite=("${cloud3[@]}"); mover ${E};; esac done
# |----------------------------------------------------------------- if [ $frags -ge $tillboss ]; then # bar=; hp=$(( $bosshbar * $bhealth / 100 )); hm=$(( $endx - 10 )) for (( i=0 ; i<${hp}; i++ )); do bar="▒${bar}"; done for (( i=$hp; i<${hm}; i++ )); do bar="${bar} "; done XY 1 $(($endy - 1)) " ${BLD}BOSS: |${RED}${bar}${DEF}${BLD}|${DEF}" # [ $BY -lt $Y ] && { ((BY++)) } [ $BY -gt $Y ] && { ((BY--)) } [ $BX -gt $(($endx / 2)) -a "$goback" == "false" ] && { ((BX--)) } || goback=true [ $BX -lt $bossendx -a "$goback" == "true" ] { && ((BX++)) } || goback=false # for (( i=0; i<${#boss[@]}; i++ )); do XY ${BX} $(($BY + $i)) " ${boss[$i]} " done # [ $BY -eq $Y -a $K -eq 0 ] && { OBJ+=("$(($BX - 4)) $(($BY + 3)) bfire") } # [ $enumber -lt $enmax ] && { ((enumber++)) OBJ+=("$(($BX + 2)) $(($BY + 3)) alien") } else [ $enumber -lt $enmax ] && { ((enumber++)) OBJ+=("$enmyendx $(( (RANDOM % $enmyendy) + 3 )) alien") } fi
Source: https://habr.com/ru/post/335960/
All Articles