Baralho de cartas indicadoras de progresso (Falling) (Bash)

5

Codifiquei um indicador de progresso na forma de um baralho de cartas (a ideia da minha esposa).

Ainda não está na sua forma final. Aqui está o código:

vdeck="| | | | | "
hdeck[1]="__ | | | |"
hdeck[2]="__ __ | | |"
hdeck[3]="__ __ __ | |"
hdeck[4]="__ __ __ __ |"
hdeck[5]="__ __ __ __ __"

while true
do
    clear
    echo -n -e "\r$vdeck"
    sleep 0.8

    for i in 1 2 3 4 5
    do
        echo -n -e "\r${hdeck[$i]}"
        sleep 0.2
    done
    clear
done

É possível otimizar este código sem ter uma matriz hdeck e obter o mesmo efeito? Aumentando '|' significa aumentar as combinações de array 'hdeck', o que não é bom.

    
por smokinguns 11.05.2011 / 06:58

2 respostas

3

Algo parecido com isto?

#!/bin/bash
LEN=5
echo 'start';
for (( i=0; i<((${LEN}+1)); i++ )); do
echo -ne '\r' 
        for (( j=0; j<${i}; j++ )); do
                 echo -n '_'
        done
        for (( j=${i}; j<${LEN}; j++ )); do
                 echo -n '|'
        done
sleep 0.5
done
echo -e '\ndone'
    
por 11.05.2011 / 10:53
1

Bem, por que você não tem uma única string (all '|') e tente substituir o (primeiro) '|' com '-' em todas as iterações do loop?

Exemplo de substituição de string:

stringZ=abcABC123ABCabc

echo ${stringZ/abc/xyz}       # xyzABC123ABCabc
                              # Replaces first match of 'abc' with 'xyz'.

Dessa forma, você não precisa de várias strings sem o array hdeck.

Tente isto:

deck="| | | | | "

while true
do
    clear
    echo -n -e "\r$deck"
    sleep 0.8

    for ((i=1; i<='expr length $deck'; i++))
    do
        echo -n -e "\r${deck/|/-}"
        sleep 0.2
    done
    clear
done

O script acima deve fazê-lo. Este é apenas um script indicativo e eu mesmo não o executei .. Por favor, verifique os erros de sintaxe ..

Mais informações sobre a manipulação de strings no bash estão aqui - link

    
por 11.05.2011 / 10:58