Juego Ahorcado v.1.1 [Bash]

Iniciado por leogtz, 4 Mayo 2009, 06:57 AM

0 Miembros y 1 Visitante están viendo este tema.

leogtz

Hola, hoy hice el juego del Ahorcado en Bash:


Solo hice el motor basico, luego dibujo el monito.
Código (bash) [Seleccionar]
#!/usr/bin/bash
# Juego de ahorcado
# Leo Gutierrez R
# leorocko13@hotmail.com

# Declarar seguir_o_no
intentos=0
contador=0
function pause()  # Funcion pause, ya que no existe en linux
{
read -p "$*"
}
function limpiar()
{
clear
}
limpiar
echo; echo Ahorcado v1.1, Leo Gutierrez Ramirez.; echo
pause 'Presione una tecla para iniciar'.
declare -a palabra_user[20];
echo;
read -p "Palabra : " palabra_user2                # Se lee la palabra
let longitud=`expr length "$palabra_user2"`-1     # Sacar la longitud de la palabra:
# echo $longitud
for i in $(seq 0 $longitud);
do
palabra_user[$i]=${palabra_user2:$i:1}            # Se mete cada caracter en un subindice, en el array palabra_user[x]
# echo palabra_user[$i] = ${palabra_user[$i]}
done
read -p "Defina el numero de intentos : " intentos       # No. de intentos que puede cometer el usuario.
declare -a palabra_adivinar[$longitud];
for i in $(seq 0 $longitud);
do
palabra_adivinar[$i]=_                            # Se meten guiones en cada subindice de palabra_adivinar[x]
echo ${palabra_adivinar[$i]};
done
limpiar;
# Mostrar guiones :
while test $contador -le $intentos
do
echo;echo;
for i in $(seq 0 $longitud);
do
echo -n "${palabra_adivinar[$i]} ";
done
echo;
echo "Letra :                                                      Intentos: $contador de $intentos"
read letra
echo $palabra_user2 | grep "$letra" > nul 2>&1 || let contador+=1
# Busqueda secuencial :
for i in $(seq 0 $longitud);
do
if [ ${palabra_user[$i]} = "$letra" ];then
palabra_adivinar[$i]=$letra
fi
done
# Mostrar los guiones :
echo;echo;
for i in $(seq 0 $longitud);
do
echo -n "${palabra_adivinar[$i]} ";
done
echo;echo;
limpiar
# Aqui va el IF y el break:
if [ "$contador" -ge "$intentos" ];
then
break
fi
i=0
cadena_final=`while test $i -le $longitud; do echo -n ${palabra_adivinar[$i]}; let i+=1; done`
# echo Cadena final : $cadena_final
if [ "$cadena_final" == "$palabra_user2" ];
then
break;
fi
done
if [ "$cadena_final" == "$palabra_user2" ];
then
echo Felicidades, has ganado.
echo Ahorcado v1.1
echo Leo Gutierrez R.
elif [ "$cadena_final" -ne "$palabra_user2" ];
then
echo Lo siento, has perdido.
echo Ahorcado v1.1
echo Leo Gutierrez R.
fi
exit 0


Si alguien me pudiera hacer el favor de decirme como dibujar el monito, se me hace demasiado tedioso hacerlo a mano.

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

0x0309

#1
Está bueno Leo, yo no conozco bash, pero lo del "monito" se me ocurriría hacerlo así:

Que no pidas cuántos intentos hacer, sino que definas una cantidad que no cambie, ejemplo 10.

y que tengas 3 arreglos así:

parteUno[0]=   O

parteDos[0]=  |
parteDos[1]= -|
parteDos[2]= -|-
parteDos[3]=o-|-
parteDos[4]=o-|-o

parteTres[0]=  /
parteTres[1]=  /\
parteTres[2]= _/\
parteTres[3]= _/\_

y declaras 3 variables:
así:
int indiceParteUno=0;
int indiceParteDos=4;
int indiceParteTres=3;

Entonces haces:
formato java:

/* mostrar el monito completo por primera vez */
System.out.println(parteUno[indiceParteUno]);
System.out.println(parteDos[indiceParteDos]);
System.out.println(parteTres[indiceParteTres]);

/*pregunta por letra */

if (laLetraNoExiste)
{
     if (indiceParteTres >=0)
     {
         --indiceParteTres;
     }
     else if (indiceParteDos >=0)
     {
         --indiceParteDos;
      }
     else if (indiceParteUno >=0)
     {
         --indiceParteUno;
     }

     /* limpiar la pantalla */
    if (indiceParteUno >=0)
    {
        System.out.println(parteUno[indiceParteUno]);
        if (indiceParteDos >=0)
        {
             System.out.println(parteDos[indiceParteDos]);
             if (indiceParteTres >=0)
             {
                 System.out.println(parteTres[indiceParteTres]);
             }
        }
   }
   else
   {
      /* perdió la cabeza, perdió, hacer algo */
   }
}





rockernault





leogtz

Cita de: rockernault en  4 Mayo 2009, 18:22 PM
como lo corres???
Lo guardas con extensión .sh y lo corres:
bash ahorcado.sh
Gracias por la sugerencia, 0x0309, voy a tenerlo en cuenta, a ver si puedo acabarlo hoy.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

rockernault





leogtz

#5
Pongo una nueva versión, más actualizada, ahora si se ve el monito, se ve feo, pero se ve  :P
Código (bash) [Seleccionar]
#!/usr/bin/bash
# Juego de ahorcado
# Leo Gutierrez R
# leorocko13@hotmail.com
intentos=0
contador=0
function cabeza()
{
echo "                                                    ______________"
echo "                                                    |             |"
echo "                                                  |._.|           |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                 |________________|"
}
function torso()
{
echo "                                                    ______________"
echo "                                                    |             |"
echo "                                                  |._.|           |"
echo "                                                    |             |"
echo "                                                    |             |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                 |________________|"
}
function torso_brazos()
{
echo "                                                    ______________"
echo "                                                    |             |"
echo "                                                  |._.|           |"
echo "                                                    |             |"
echo "                                                  --|--           |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                 |________________|"
}
function piernas()
{
echo "                                                    ______________"
echo "                                                    |             |"
echo "                                                  |._.|           |"
echo "                                                    |             |"
echo "                                                  --|--           |"
echo "                                                  __|__           |"
echo "                                                  |    |          |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                 |________________|"
}
function completo()
{
echo "                                                    ______________"
echo "                                                    |             |"
echo "                                                 -|._.|-          |"
echo "                                                    |             |"
echo "                                                  --|--           |"
echo "                                                  __|__           |"
echo "                                                 _|    |_         |"
echo "                                                                  |"
echo "                                                                  |"
echo "                                                 |________________|"
}
cabeza
torso
torso_brazos
piernas
completo
function pause()  # Funcion pause, ya que no existe en linux
{
read -p "$*"
}
function limpiar()
{
clear
}
limpiar
echo; echo Ahorcado v1.1, Leo Gutierrez Ramirez.; echo
pause 'Presione una tecla para iniciar'.
declare -a palabra_user[20];
echo;
read -p "Palabra : " palabra_user2                # Se lee la palabra
let longitud=`expr length "$palabra_user2"`-1     # Sacar la longitud de la palabra:
# echo $longitud
for i in $(seq 0 $longitud);
do
palabra_user[$i]=${palabra_user2:$i:1}            # Se mete cada caracter en un subindice, en el array palabra_user[x]
# echo palabra_user[$i] = ${palabra_user[$i]}
done
read -p "Defina el numero de intentos : " intentos       # No. de intentos que puede cometer el usuario.
declare -a palabra_adivinar[$longitud];
for i in $(seq 0 $longitud);
do
palabra_adivinar[$i]=_                            # Se meten guiones en cada subindice de palabra_adivinar[x]
echo ${palabra_adivinar[$i]};
done
limpiar;
# Mostrar guiones :
while test $contador -le $intentos
do
if [ $contador -eq 1 ]
then
cabeza
elif [ $contador -eq 2 ]
then
torso
elif [ $contador -eq 3 ]
then
torso_brazos
elif [ $contador -eq 4 ]
then
piernas
elif [ $contador -ge 5 ]
then
completo
fi
echo;echo;
for i in $(seq 0 $longitud);
do
echo -n "${palabra_adivinar[$i]} ";
done
echo;
echo "Letra :                                                      Intentos: $contador de $intentos"
read letra
echo $palabra_user2 | grep "$letra" > nul 2>&1 || let contador+=1
# Busqueda secuencial :
for i in $(seq 0 $longitud);
do
if [ ${palabra_user[$i]} = "$letra" ];then
palabra_adivinar[$i]=$letra
fi
done
echo;echo;
for i in $(seq 0 $longitud);
do
echo -n "${palabra_adivinar[$i]} ";
done
echo;echo;
limpiar
if [ "$contador" -ge "$intentos" ];
then
break
fi
i=0
cadena_final=`while test $i -le $longitud; do echo -n ${palabra_adivinar[$i]}; let i+=1; done`
if [ "$cadena_final" == "$palabra_user2" ];
then
break;
fi
done
if [ "$cadena_final" == "$palabra_user2" ];
then
echo Felicidades, has ganado.
echo Ahorcado v1.1
echo Leo Gutierrez R.
else
echo Lo siento, has perdido.
echo Ahorcado v1.1
echo Leo Gutierrez R.
fi
exit 0
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Darioxhcx

jajajaaaaaaaa

cuando reinicie lo pruebo
que bueno se ve che :P

un saludo