Nombre: Ahorcado.bash
Autor: blackman
Descripción: Script que permite jugar "Ahorcado" en la terminal
Visto en
Espacio Linux
El script hace uso de un archivo de texto donde va sacando las palabras a adivinar
#!/bin/bash
function message() {
case $mensage in
game_banner) #tput cup 1 $cols
echo
tput rev
echo "$(tput setaf 4)EL JUEGO DEL AHORCADO EN BASH SCRIPT$(tput sgr0)"
echo
echo "$(tput setaf 7)$(tput bold)Contiene $(tput setaf 1)$(( $long_palabra-$espacios ))$(tput setaf 7) caracteres sin contar los espacios"
echo "$(tput setaf 7)Puedes usar los comodines. Dispones de $(tput setaf 1)$comodines$(tput setaf 7). Para usarlos pulsa $(tput setaf 1)+"
[[ $(( 6-intentos )) -lt 2 ]] && vida="vida" || vida="vidas"
echo "$(tput setaf 7)Dispones de $(tput setaf 1)$(( 6-intentos )) $vida"
#echo "$(tput setaf 7)El nombre de este país es $(tput setaf 1)$palabra"¡
echo
echo "$(tput setaf 7)El nombre de este país es: $(tput setaf 1)$word"
echo -n "$(tput setaf 7)Vidas: $(tput setaf 1)"
for (( i=1; i<=$(( 6-intentos )); i++ )); do echo -n $'\342\231\245'; done; echo
echo -n "$(tput setaf 7)Comodines: $(tput setaf 1)"
for (( i=1; i<=$comodines; i++ )); do echo -n $'\342\230\245'; done; echo
echo "$(tput setaf 7)Caracteres restantes: $(tput setaf 1)$(( ($long_palabra-$espacios)-$aciertos ))"
echo "$(tput setaf 7)Puntuación: $(tput setaf 1)$score";;
game_over) echo "$(tput setaf 2)Fenomenal, eres un crack";;
game_read) read -n1 -p "$(tput setaf 7)Vida $(tput setaf 1)$intentos $(tput setaf 7)de $(tput setaf 1)5$(tput setaf 7). Introduce una letra: $(tput setaf 1)" caracter
echo;;
salir) echo
tput rev
echo "$(tput setaf 1)GameOver$(tput sgr0)"
echo "$(tput setaf 7)$(tput bold)Tu mejor puntuación es: $(tput setaf 1)$best_score"
echo "$(tput setaf 7)Tu puntuación acumulada es: $(tput setaf 1)$acumulado"
echo
echo "$(tput setaf 7)La solución es: $(tput setaf 1)$palabra"
echo "$(tput setaf 7)Que deseas hacer?"
read -n1 -p "$(tput setaf 7)Pulsa $(tput setaf 1)Q $(tput setaf 7)para $(tput setaf 1)salir $(tput setaf 7)o $(tput setaf 1)G $(tput setaf 7)para $(tput setaf 1)volver a jugar$(tput setaf 7). Introduce una letra: $(tput setaf 1)" caracter
echo "$(tput setaf 7)";;
comodines_restantes) echo "$(tput setaf 4)Te dispones a usar un comodín. Suerte, sólo dispones de $(tput setaf 1)$comodines"
echo "$(tput setaf 2)Comodín = $(tput setaf 1)$caracter";;
comodines_finalizados) echo "$(tput setaf 4)Ups, has gastado todos los comodines";;
continuar) read -n1 -p "$(tput setaf 1)Pulsar cualquier tecla para continuar$(tput setaf 7)";;
acierto_mal) echo "$(tput setaf 4)Has fallado, ahora tienes un intento menos";;
#acierto_letra) echo "$(tput setaf 7)Letra introducida: $(tput setaf 1)$letra";;
acierto_bien) echo "$(tput setaf 2)Muy bien, ya casi lo tienes";;
acierto_repetido) echo "$(tput setaf 3)Upps, Esa letra ya la has introducido";;
esac
}
function init {
#file="diccionario"
file="paises"
max=$(cat $file | wc -l)
num=$(( $RANDOM%$max ))
palabra=$(head -$num $file | tail -1)
aciertos=0
#diccionario
#palabra=$(echo ${palabra%% *,,} | sed 's/á/a/g;s/é/e/g;s/í/i/g;s/ó/o/g;s/ú/u/g')
palabra=$(echo ${palabra,,} | sed 's/á/a/g;s/é/e/g;s/í/i/g;s/ó/o/g;s/ú/u/g;s/-/ /g;s/Á/a/g')
long_palabra=${#palabra}
comodines=$(( long_palabra/4 ))
score=$(( (comodines*50)+500 ))
#PROVISIONAL
###########################
#[[ $long_palabra -lt 15 ]] && main;
###########################
unset array[*]
i=0; espacios=0; unset word
while [[ $i -le $(( $long_palabra-1 )) ]]
do
caracter="${palabra:$i:1}"
if [[ $caracter = " " ]]
then
(( espacios++ ))
caracter=" "
else
array=( ${array[*]} $caracter )
caracter="-"
fi
word="$word $caracter"
(( i++ ))
done
}
function comodin {
if [[ $comodines -gt 0 ]]
then
long_array=$(( ${#array[*]}-1 ))
index=$(( $RANDOM%${#array[*]} ))
caracter=${array[$index]}
i=0
while [[ $i -le $long_array ]]
do
if [[ ${array[$i]} = $caracter ]]
then
unset array[$i]
array2=( ${array2[*]} $caracter )
(( aciertos++ ))
score=$(( score+50 ))
fi
(( i++ ))
done
array=( ${array[*]} )
array2=( ${array2[*]} )
(( comodines-- ))
(( intentos-- ))
mensage="comodines_restantes"; message mensage
else
(( intentos-- ))
mensage="comodines_finalizados"; message mensage
fi
mensage="continuar"; message mensage
game
}
function acierto {
unset find
long_array=$(( ${#array[*]}-1 ))
i=0
while [[ $i -le $long_array ]]
do
if [[ ${array[$i]} = $caracter ]]
then
unset array[$i]
find="true"
array2=( ${array2[*]} $caracter )
(( aciertos++ ))
score=$(( score+100 ))
fi
(( i++ ))
done
if [[ $find = "true" ]]
then
mensage="acierto_bien"; message mensage
(( intentos-- ))
else
long_array2=$(( ${#array2[*]}-1 ))
i=0
while [[ $i -le $long_array2 ]]
do
if [[ ${array2[$i]} = $caracter ]]
then
find="true"
fi
(( i++ ))
done
if [[ $find = "true" ]]
then
mensage="acierto_repetido"; message mensage
(( intentos-- ))
score=$(( score-10 ))
else
mensage="acierto_mal"; message mensage
score=$(( score-50 ))
fi
fi
array=( ${array[*]} )
array2=( ${array2[*]} )
mensage="continuar"; message mensage
game
}
function game {
clear
lines=$(( $(tput lines)/10 ))
cols=$(( $(tput cols)/10 ))
i=0; unset word;
while [[ $i -le $(( $long_palabra-1 )) ]]
do
letra="${palabra:$i:1}"
if [[ $letra = " " ]]
then
letra=" "
else
unset letra_acertada
for x in ${array2[*]}
do
if [[ $x = $letra ]]
then
letra_acertada="true"
fi
done
if [[ $letra_acertada != "true" ]]
then
letra="-"
fi
fi
word="$word $letra"
(( i++ ))
done
(( intentos++ ))
mensage="game_banner"; message mensage
dibujo
if [[ $intentos -gt 5 ]]
then
[[ $best_score -eq 0 ]] && best_score=0
[[ $acumulado -eq 0 ]] && acumulado=0
salir
fi
if [[ -z ${array[*]} ]]
then
[[ $score -gt $best_score ]] && best_score=$score
acumulado=$(( acumulado+score ))
mensage="game_over"; message mensage
salir
fi
mensage="game_read"; message mensage
if [[ $caracter = "+" ]]
then
comodin
fi
acierto
}
function dibujo {
case $intentos in
1) echo "________________ "
echo " | "
echo " | "
echo " O "
echo;;
2) echo "________________ "
echo " | "
echo " | "
echo " O "
echo " | "
echo " | "
echo;;
3) echo "________________ "
echo " | "
echo " | "
echo " O "
echo " \| "
echo " | "
echo;;
4) echo "________________ "
echo " | "
echo " | "
echo " O "
echo " \|/"
echo " | "
echo;;
5) echo "________________ "
echo " | "
echo " | "
echo " O "
echo " \|/"
echo " | "
echo " / "
echo;;
*) echo "________________ "
echo " | "
echo " | "
echo " O "
echo " \|/"
echo " | "
echo " / \\"
echo;;
esac
}
function salir {
mensage="salir"; message mensage
case $caracter in
q) clear;exit;;
g) unset word; unset intentos; unset comodines; unset aciertos; unset score; unset array[*]; unset array2[*];main;;
*) clear; mensage="game_banner"; message mensage; dibujo; salir;;
esac
clear
}
function main {
init
game
}
main
Permisos: chmod 700 ahorcado.bash
Ejecución: ./ahorcado.bash
Y a jugar! :D
0 comentarios:
Publicar un comentario