Jueguecillo en Bash

Forums: 

Les agradeceria muxo si me ayudaran con el siguiente script:
Un jueguecillo en el que hay 2 jugadores, 1º el script pide un numero al jugador1, este lo introduce sin que se muestre por pantalla, y el jugador2 tiene q adivinar el numero, asique el script le pedira el nº, si acierta el nº, q vuelva al principio para pedirle de nuevo al jugador1 un numero (un bucle), y si el jugador2 falla, es decir, no acierta, que le vuelva a pedir el nº hasta que acierte. Yo e estado pensandolo con un while x supuesto y dentro case, pero nada, no llego a la solucion final. Si me podeis hechar una mano os lo agradeceria.. Un saludo

Resuelto

Imagen de Monkito

Estoy conciente que lo debiste haber hecho tu, pero te voy a dar una mano por ser primera vez..


#!/bin/bash
X=0
Y=0
Z=0
while [ 1 -le 1 ]; do
clear
echo ""
echo "-----------------------------------------------------------------------"
echo "*Jugador 1"
read -s -p "Ingrese un número: " X
echo ""
echo ""

Z=0
while [ $Z -le 0 ]; do
echo "*Jugador 2"
read -e -p "Ingrese un número: " Y
if [ "$X" = "$Y" ]
then
Z=1
echo " Bien...!"
sleep 2
else
echo " Error..!"
sleep 1
fi
echo ""
done
done

Cogito Ergo Sum

------------
counter.li.org

Cogito Ergo Sum

Muchiusimas gracias por

Muchiusimas gracias por aberme ayudado. Pero no entiendo que son los Z=0 Y=0 etc. Y otra cosa que no entiendo es el while del principio el "1 -le 1" . Y el echo de pedir numero no seria antes del while? El resto del codigo lo entiendo. UN saludo

*EDITO* = Lo e codificado y no funciona, me sale directamente x pantalla Jugador uno ingrese numero: read: 27: arg count
Jugador 2 ingrese numero: read: 27_ arg count.

UN saludo

X=0 es para almacenar el

Imagen de Monkito

X=0 es para almacenar el número del primer jugador, Y=0 es para almacenar el número del segundo jugador, Z=0 es un "flag" o banderin para poder controlar cuando salir o no del while que le pido el número al segundo jugador, ya que únicamente debe terminarse cuando éste haya ingresado el número correctamente, por eso "if [ "$X" = "$Y" ]" entonces "Z=1" y como "while [ $Z -le 0 ]; do" entonces se sale del bucle..

Lo de "while [ 1 -le 1 ]; do" es un bucle infinito para que el juego sólo se acabe al presionar ctrl+c

Ahora lo del error en el read creo que depende de la versión de tu shell, en tal caso averigua como usarlo "read -h" te ha de salir algo como:


read: usage: read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...]

Cualquier adelanto me avisas...

Cogito Ergo Sum

------------
counter.li.org

Cogito Ergo Sum

Si, el while se que es un

Si, el while se que es un bucle, pero entiendo porqe [1 -le 1] q pintan los 1.. Gracias por la ayuda. Un saludo.

EDITO: Lo e modificao un poco a mi manera pero me sigue fallando. Me dice: /home/minombre/nombredearchivo/ : 1 : not found. y asi con todas las lineas :S

#!/bin/bash

echo "Quiere comenzar con el juego"
read $respuesta

if [ $respuesta == "si" ]
then
echo "Jugador 1"
echo "Ingrese un número: "
read $num1
while [ -n "num1 ]
do
echo "Jugador 2"
echo "Ingrese un número: "
read $num2
if [ "$num1" = "$num2" ]
then
echo " Bien...!"
sleep 2
else
echo " Error..!"
sleep 1
fi
else
done

PD: Abria alguna manera de limitar los intentos que tiene el JUGADOR2 para acertar? Es decir que si fallo me pida otro intento y asi 3 veces por ejemplo. Un saludo

Primeramente en el read, tu

Imagen de Monkito

Primeramente en el read, tu tienes

read $num1

y me parece que es

read num1

Además la opción "-s" es para que no muestre los caracteres ingresados así:

read -s num1


#!/bin/bash
X=0
Y=0
Z=0

clear
echo ""
echo "-----------------------------------------------------------------------"
echo "*Jugador 1"
read -s -p "Ingrese un número: " X
echo ""
echo ""

while [ $Z -le 2 ]; do # de 0 a 2 son 3 oportunidades
echo "*Jugador 2"
read -e -p "Ingrese un número: " Y
if [ "$X" = "$Y" ]
then
Z=2
echo " Bien...!"
sleep 2
else
let Z=$Z+1
echo " Error..!"
sleep 1
fi
echo ""
done

Cogito Ergo Sum

------------
counter.li.org

Cogito Ergo Sum

En cuanto a los 1 en el

Imagen de Monkito

En cuanto a los 1 en el while es una condición "hágase mientras 1 sea igual a 1", puedes poner lo que quieras... por ejemplo "hágase mientras a < 1 o a = b", etc, etc

cualquier inquietud me avisas..

Cogito Ergo Sum

------------
counter.li.org

Cogito Ergo Sum

Pero aciendolo de mi manera,

Conseguido, solo me falta lo de que no se vea cuandoe scribo ya que el -s me da error y que solo me deje intentarlo 2 veces si fallo, otro problema esq al pedir el primer numero solo puedo meter numeros de 1 cifra, sino ace un exit el programa:

clear
echo ""
echo "-----------------------------------------------------------------------"
echo "Jugador 1"
echo " Ingrese un número: "
read num1
echo ""
echo ""

while [ $num1 -le 2 ]
do
echo "Jugador 2"
echo "Ingrese un número: "
read num2
if [ "$num1" = "$num2" ]
then

echo " Bien...!"
sleep 3
exit 1
else

echo " Error..Pruebe de nuevo!"

fi
echo ""
done

Gracias por contestar y por la ayuda un saludo

Pues...

Imagen de Monkito

No se lo que podría estar pasando,... postea lo que te sale al escribir "read -h"

Cogito Ergo Sum

------------
counter.li.org

Cogito Ergo Sum

Me dice: -s: Ilegall option,

Me dice: -s: Ilegall option, y si pongo mens -h me sale lo mismo, quizas es la shell? Para el problema de que solo tenga 3 oportunidades se me a ocurrido poner un for en vez de un while pero no lo tengo muy claro, he probado con esto y da error:
clear

echo ""
echo "-----------------------------------------------------------------------"
echo "Jugador 1"
echo "Introduzca un número: "
read num1
clear

for $num1 in 0 1 2
do
echo "Jugador 2"
echo "Adivine el número: "
read num2
if [ "$num1" = "$num2" ]
then

echo " Acertaste...!"
sleep 2
exit 1
else
echo " Error..Pruebe de nuevo!"
fi
done
clear
echo Error,ejecute de nuevo el programa e introduzca un numero..!

Gracias UN saludo!

Páginas