Bash RPG

Publicado por Xerxes Lins (última atualização em 09/04/2017)

[ Hits: 1.813 ]

Homepage: https://voidlinux.org/

Download bash_rpg_v1b.sh




Jogo de RPG muito simples.

  



Esconder código-fonte

#!/bin/bash
#
#
# Simples RPG em bash v1.0
#
# Criado em alguma horas no dia 27/2/2017
#
# por xerxeslins (xerxeslins@gmail.com)
# www.vivaolinux.com.br/~xerxeslins
#
# GPL
#
###########################################

NIVEL=1
EXP=0
NEXT=10
DUNGEON=1
POTION=1
KILL=0
COMBATE=0
ESCADA=0
SAUDE_ID=0
SAUDE=("saudável" "com arranhões" "com cortes" "com cortes profundos e ematomas" "mal consegue andar")

function _comandos () {
   echo "Comandos:"
   echo "(a)tacar (b)eber (c)omandos (d)escer (e)xplorar (f)ugir (p)ersonagem (s)air"
   _menu
}

function _personagem () {
   echo "$NOME [${SAUDE[SAUDE_ID]}] nível $NIVEL, experiência $EXP/$NEXT, dungeon $DUNGEON, poções $POTION, matou $KILL."
   _menu
}

function _sair () {
   echo "$NOME se perdeu na dungeon e nunca mais retornou..."
   exit 0
}

function _dado {
   DT=$(( ( RANDOM % 6) + 1 ))
}

function _testa_morte_personagem () {
   if [ $SAUDE_ID -gt 4 ]
      then
         echo "$NOME morreu!!!
         
R.I.P.

Nível: $NIVEL
Dungeon: $DUNGEON
Poções: $POTION
Matou: $KILL"
      exit 0
   fi
}

function _monstro_ataca () {
   _dado
   if [ $DT -lt 5 ]
      then
         echo "$NOME se desviou do ataque do monstro!"
   else
      echo "$NOME sofreu o ataque do monstro!"
      SAUDE_ID=$(( $SAUDE_ID + 1 ))
      _testa_morte_personagem
   fi
   _menu   
}

function _testa_evolucao () {
   if [ $EXP -ge $NEXT ]
      then
         NIVEL=$(( $NIVEL + 1 ))
         NEXT=$(( $NEXT + (( 1 + $NIVEL ) * 5) ))
         echo "$NOME se sente mais forte!"
   fi   
}

function _personagem_acerta {
   echo "$NOME atingiu o monstro!"
   _dado
   DIFICULDADE=$(( 3 + $NIVEL - $DUNGEON ))   
   if [ $DT -le $DIFICULDADE ] || [ $DT -eq 1 ]
      then
         echo "$NOME matou o monstro!"
         COMBATE=0
         KILL=$(( $KILL + 1 ))
         EXP=$(( $EXP + ( RANDOM % 4) + $DUNGEON ))
         _testa_evolucao
   else
      _monstro_ataca
   fi
}

function _atacar () {
   if [ $COMBATE -eq 0 ]
      then
         echo "$NOME desfere um golpe com a espada, cortando o ar!"
   else
      _dado
      if [ $DT -lt 5 ]
         then
            _personagem_acerta
         else
            echo "$NOME errou o ataque!"
            _monstro_ataca   
      fi
   fi
   _menu
}

function _beber () {
   if [ $POTION -gt 0 ]
      then
         echo "$NOME bebe uma poção e se sente muito bem!"
         POTION=$(( $POTION - 1 ))
         SAUDE_ID=0
      else
         echo "$NOME procura uma poção na mochila, mas não encontra."
   fi
   _menu
}

function _explorar () {
   if [ $COMBATE -eq 0 ]
      then
         _dado
         if [ $DT -gt 4 ]
            then
               echo "$NOME encontrou um monstro!"
               COMBATE=1
         elif [ $DT -lt 2 ]
            then
               if [ $ESCADA -eq 0 ]
                  then
                     echo "$NOME encontrou escadas que levam para o próximo nível da dungeon."
                     ESCADA=1
                  else
                     echo "$NOME encontrou uma poção e guardou na mochila."
                     POTION=$(( $POTION + 1 ))
               fi
         else
            echo "$NOME explora o interior da dungeon..."
         fi      
      else
         echo "$NOME está no meio do combate e não pode explorar agora!"
   fi
   _menu
}

function _descer () {
   if [ $ESCADA -eq 1 ]
      then
         echo "$NOME desceu as escadas."
         DUNGEON=$(( $DUNGEON + 1 ))
         ESCADA=0
      else
         echo "$NOME olha em volta, mas não vê por onde descer."
   fi
   _menu
}

function _fugir () {
   if [ $COMBATE -eq 1 ]
      then
         _dado
         if [ $DT -lt 3 ]
            then
               echo "$NOME fugiu do monstro como uma garotinha assustada!"
               COMBATE=0
            else
               echo "$NOME procurou uma oportunidade para fugir, mas não encontrou!"
               _monstro_ataca
         fi
      else
         echo "$NOME não tem do que fugir no momento."
   fi
   _menu
}

function _menu () {
   read -p "> " OPT
   
   #Se quiser idle de 5 segundos descomente o trecho abaixo e comente o read acima
   #read -t 5 -p "> " OPT
   #if [ -z "$OPT" ]
   #   then
   #      if [ $COMBATE -eq 1 ]
   #         then
   #            OPT="a"
   #      else
   #         OPT="e"
   #      fi
   #   echo ""
   #fi
   
   case $OPT in
      c|comandos) _comandos;;
      p|personagem) _personagem;;
      s|sair) _sair;;
      a|ataque|atacar) _atacar;;
      b|beber) _beber;;
      e|explorar) _explorar;;
      d|descer) _descer;;
      f|fugir) _fugir;;
      *) echo "$NOME não entendeu o seu comando. (digite c para ver os comandos)"; _menu;;
   esac
}
function _start () {
   echo "Qual o nome do seu personagem?"
   read -p "> " NOME
   echo "(digite c para ver os comandos)
   
$NOME entrou na dungeon para eliminar os monstros."
   _menu
}
_start

Scripts recomendados

Sysinfo 2.0 - Info do sistema

Script Iptables para servidor DNS e SSH

Pesquisar extensões 3

keepconnection

Pequeno gerador de relatório da rede (CSV)


  

Comentários
[1] Comentário enviado por Lunovox em 09/06/2017 - 11:12h

Como seu script está sobre licença GPL, eu resolvi melhorá-lo para deixá-lo mais divertido.

Download: https://cloud.disroot.org/s/uvZOTNxRnlWffR2

Adicionei:
* Menu de Load para carregar salves (e poder continuar o jogo depois).
* Texto Capitular
* E som de Combate e de UpLevel baseado nos áudio OGG que já vem no meu linux mint.

Ainda pretendo adicionar:
* Menu de configuração. (se quer som ou não, e qual o nível de dificuldade do jogo)
* Nomes para alguns tipos de monstros.
* Barra de HP

Espero que eu não tenha sido muito atrevido em modificar seu código.

[2] Comentário enviado por xerxeslins em 09/06/2017 - 13:35h


[1] Comentário enviado por Lunovox em 09/06/2017 - 11:12h

Como seu script está sobre licença GPL, eu resolvi melhorá-lo para deixá-lo mais divertido.

Download: https://cloud.disroot.org/s/uvZOTNxRnlWffR2

Adicionei:
* Menu de Load para carregar salves (e poder continuar o jogo depois).
* Texto Capitular
* E som de Combate e de UpLevel baseado nos áudio OGG que já vem no meu linux mint.

Ainda pretendo adicionar:
* Menu de configuração. (se quer som ou não, e qual o nível de dificuldade do jogo)
* Nomes para alguns tipos de monstros.
* Barra de HP

Espero que eu não tenha sido muito atrevido em modificar seu código.


Que massa! Vou testar assim que possível e dizer o que achei. :D

[3] Comentário enviado por xerxeslins em 09/06/2017 - 15:18h

Eu diria que é um belo "fork" rsrs!

Gostei dos textos com figlet. Dá um tcham! Principalmente no level up. A opção de save é muito legal também. A opção de dar comandos sem Enter agiliza muito. Não gostei muuuito do lance do HP em %, mas isso é detalhe e gosto pessoal. Efeitos sonoros, pelo menos para mim, nesse script, é dispensável.

Se eu fosse fazer uma versão nova (deu até vontade hahaha), eu colocaria textos capitulares (sem figlet mesmo) como os seus, opção de save (como você fez), comandos sem enter (igual a você) e talvez mais algumas modificações como tipos diferentes de monstros... não sei. Mas não colocaria sons nem HP em %.

Foi muito massa suas modificações. Curti!

Abraço!

[4] Comentário enviado por danielns em 21/06/2019 - 05:38h


[1] Comentário enviado por Lunovox em 09/06/2017 - 11:12h

Como seu script está sobre licença GPL, eu resolvi melhorá-lo para deixá-lo mais divertido.

Download: https://cloud.disroot.org/s/uvZOTNxRnlWffR2

Adicionei:
* Menu de Load para carregar salves (e poder continuar o jogo depois).
* Texto Capitular
* E som de Combate e de UpLevel baseado nos áudio OGG que já vem no meu linux mint.

Ainda pretendo adicionar:
* Menu de configuração. (se quer som ou não, e qual o nível de dificuldade do jogo)
* Nomes para alguns tipos de monstros.
* Barra de HP

Espero que eu não tenha sido muito atrevido em modificar seu código.


Ainda tem essa versão disponível?
O link está fora.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts