Fuga da Mina
Publicado por Xerxes (última atualização em 11/08/2016)
[ Hits: 3.167 ]
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
GETDOWN - Baixa arquivos e descompacta
Organizar seus arquivos por pastas
arcade.sh - front-end para AdvanceMAME
zswaplig.sh - Um "Ligador" de ZSWAP, SWAP em RAM para Sabayon Linux
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado