Fuga da Mina
Publicado por Xerxes (última atualização em 11/08/2016)
[ Hits: 3.355 ]
Homepage: -
O script é um minigame que fiz para tentar usar "matriz" em BASH. Sendo que bash só tem vetor. Descrição do jogo está no começo do script. Pode ser útil para alguém que está começando no mundo dos scripts como eu.
#!/bin/bash
# Fuga da Mina v1.0b
#
# Neste joguinho você controla um mineiro representado pela "@".
# A mina está prestes a desabar. Você tem um tempo para fugir.
# Você deve levar o mineiro até a saída "s".
#
# Quando estiver sem caminho, pode usar a picareta e quebrar as
# paredes. Mas elas possuem uma "resistência" e a cada tentativa
# o tempo corre.
#
# Caso encontre algum "T" no caminho, você ganha um tempinho extra.
#
# Autor: Xerxes Lins (xerxeslins@gmail.com)
# www.vivaolinux.com.br/~xerxeslins
function _cria_mapa {
for i in {0..9} #linhas
do
for j in {0..14} #colunas
do
SORT=$(( ( RANDOM % 2 ) ))
if [ $SORT -eq 0 ]
then
TILE="#"
else
TILE="."
fi
if [ $j = 0 ] || [ $i = 0 ] || [ $j = 14 ] || [ $i = 9 ]
then
TILE="x"
fi
eval LINHA$i[$j]=$TILE
done
done
}
function _nasce_personagem {
x=1
y=$(( ( RANDOM % 8 ) + 1 ))
eval LINHA$y[$x]="@"
TEMPO=20
}
function _tempo_extra {
x=$(( ( RANDOM % 12 ) + 1 ))
y=$(( ( RANDOM % 8 ) + 1 ))
eval LINHA$y[$x]="T"
TEMPO=20
}
function _saida {
xs=14
ys=$(( ( RANDOM % 8 ) + 1 ))
eval LINHA$ys[$xs]="S"
}
function _desenha_mapa {
clear
echo "Tempo restante: $TEMPO"
echo ""
echo "$MSG"
echo ""
for i in {0..9}
do
VAR=$(eval echo LINHA$i[@])
echo -ne "${!VAR}\n"
done
}
function _pick_crock {
SORT=$(( ( RANDOM % 5 ) ))
if [[ $SORT -le 0 ]]
then
echo 0
else
echo 1
fi
}
function _sorteia_pedra {
SORT=$(( ( RANDOM % 10 ) ))
if [[ $SORT -le 0 ]]
then
SURPRESA="T"
else
SURPRESA="."
fi
}
function _desmorona {
for i in {0..9}
do
for j in {0..14}
do
eval LINHA$i[$j]="#"
done
done
}
function _gameover {
_desmorona
MSG="MORREU SOTERRADO!"
_desenha_mapa
sleep 2
tput cnorm
exit
}
function _vitoria {
MSG="VOCÊ CONSEGUIU!"
_desenha_mapa
exit
}
function _play {
while [ "$INPUT" != "x" ]
do
if [ $TEMPO -lt 0 ]
then
TEMPO=0
_gameover
fi
TEMPO=$(( $TEMPO - 1))
MSG=""
read -n1 -s INPUT
if [ $INPUT = a ]
then
VAR=$(eval echo LINHA$y[$(( $x - 1 ))])
if [ "${!VAR}" = "." ]
then
eval LINHA$y[$x]="."
x=$(( $x - 1 ))
y=$y
eval LINHA$y[$x]="@"
elif [ "${!VAR}" = "#" ]
then
if [ $(_pick_crock) = 0 ]
then
_sorteia_pedra
eval LINHA$y[$x - 1]="$SURPRESA"
MSG="Crock!"
_desenha_mapa
else
MSG="Pick!"
_desenha_mapa
fi
elif [ "${!VAR}" = "S" ]
then
eval LINHA$y[$x]="."
x=$(( $x - 1 ))
y=$y
eval LINHA$y[$x]="@"
_desenha_mapa
_vitoria
elif [ "${!VAR}" = "T" ]
then
eval LINHA$y[$x]="."
x=$(( $x - 1 ))
y=$y
eval LINHA$y[$x]="@"
TEMPO=$(( $TEMPO + 5 ))
MSG="Tempo +5"
_desenha_mapa
fi
fi
if [ $INPUT = d ]
then
VAR=$(eval echo LINHA$y[$(( $x + 1 ))])
if [ "${!VAR}" = "." ]
then
eval LINHA$y[$x]="."
x=$(( $x + 1 ))
y=$y
eval LINHA$y[$x]="@"
elif [ "${!VAR}" = "#" ]
then
if [ $(_pick_crock) = 0 ]
then
_sorteia_pedra
eval LINHA$y[$x + 1]="$SURPRESA"
MSG="Crock!"
_desenha_mapa
else
MSG="Pick!"
_desenha_mapa
fi
elif [ "${!VAR}" = "S" ]
then
eval LINHA$y[$x]="."
x=$(( $x + 1 ))
y=$y
eval LINHA$y[$x]="@"
_desenha_mapa
_vitoria
elif [ "${!VAR}" = "T" ]
then
eval LINHA$y[$x]="."
x=$(( $x + 1 ))
y=$y
eval LINHA$y[$x]="@"
TEMPO=$(( $TEMPO + 5 ))
MSG="Tempo +5"
_desenha_mapa
fi
fi
if [ $INPUT = w ]
then
VAR=$(eval echo LINHA$(( $y - 1))[$x])
if [ "${!VAR}" = "." ]
then
eval LINHA$y[$x]="."
x=$x
y=$(( $y - 1 ))
eval LINHA$y[$x]="@"
elif [ "${!VAR}" = "#" ]
then
if [ $(_pick_crock) = 0 ]
then
_sorteia_pedra
eval LINHA$(( $y - 1))[$x]="$SURPRESA"
MSG="Crock!"
_desenha_mapa
else
MSG="Pick!"
_desenha_mapa
fi
elif [ "${!VAR}" = "S" ]
then
eval LINHA$y[$x]="."
x=$x
y=$(( $y - 1 ))
eval LINHA$y[$x]="@"
_desenha_mapa
_vitoria
elif [ "${!VAR}" = "T" ]
then
eval LINHA$y[$x]="."
x=$x
y=$(( $y - 1 ))
eval LINHA$y[$x]="@"
TEMPO=$(( $TEMPO + 5 ))
MSG="Tempo +5"
_desenha_mapa
fi
fi
if [ $INPUT = s ]
then
VAR=$(eval echo LINHA$(( $y + 1))[$x])
if [ "${!VAR}" = "." ]
then
eval LINHA$y[$x]="."
x=$x
y=$(( $y + 1 ))
eval LINHA$y[$x]="@"
elif [ "${!VAR}" = "#" ]
then
if [ $(_pick_crock) = 0 ]
then
_sorteia_pedra
eval LINHA$(( $y + 1))[$x]="$SURPRESA"
MSG="Crock!"
_desenha_mapa
else
MSG="Pick!"
_desenha_mapa
fi
elif [ "${!VAR}" = "S" ]
then
eval LINHA$y[$x]="."
x=$x
y=$(( $y + 1 ))
eval LINHA$y[$x]="@"
_desenha_mapa
_vitoria
elif [ "${!VAR}" = "T" ]
then
eval LINHA$y[$x]="."
x=$x
y=$(( $y + 1 ))
eval LINHA$y[$x]="@"
TEMPO=$(( $TEMPO + 5 ))
MSG="Tempo +5"
_desenha_mapa
fi
fi
clear
_desenha_mapa
done
}
tput civis
_cria_mapa
for i in {1..3}
do
_tempo_extra
done
_nasce_personagem
_saida
MSG="Mova o @ até a saída (S) usando A D W S"
_desenha_mapa
_play
Compilação do kernel linux-libre 4.4.6 com cflags -march=native + -Ofast
Monitorar pppe-server, radius e proxy (estilo fastfood)
Arch Linux - remover dependências obsoletas
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
VOL já não é mais como antes? (3)
É normal não gostar de KDE? (12)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









