Better handle user input
This commit is contained in:
parent
b5c1d62c29
commit
ad249106cf
|
@ -4,6 +4,7 @@ ATTEMPTS_NUM=7
|
|||
POOL_NUM=100
|
||||
RE='^[0-9]+$'
|
||||
|
||||
# Muestra la ayuda y sale del programa
|
||||
usage ()
|
||||
{
|
||||
echo "Usage: ./guess_number.sh -p 50 -a 30"
|
||||
|
@ -15,6 +16,7 @@ usage ()
|
|||
exit
|
||||
}
|
||||
|
||||
# Recoge parámetros al ejecutar el script
|
||||
while getopts a:p:h flag; do
|
||||
case "${flag}" in
|
||||
a) ATTEMPTS_NUM=${OPTARG};;
|
||||
|
@ -23,6 +25,7 @@ while getopts a:p:h flag; do
|
|||
esac
|
||||
done
|
||||
|
||||
# Muestra la cantidad actual de números y vidas restantes
|
||||
status() {
|
||||
clear
|
||||
cat <<'END_CAT'
|
||||
|
@ -39,6 +42,9 @@ END_CAT
|
|||
echo "Intentos restantes: $ATTEMPTS_NUM"
|
||||
}
|
||||
|
||||
# Comprueba si el número introducido es correcto,
|
||||
# si no es correcto, comprueba si es mayor o menos antes
|
||||
# de devolver el resultado
|
||||
checkWin() {
|
||||
if [[ "$1" == "$RANDOM_NUM" ]]; then
|
||||
echo "Enhorabuena! El número era $RANDOM_NUM!"
|
||||
|
@ -51,6 +57,11 @@ checkWin() {
|
|||
ATTEMPTS_NUM=$((ATTEMPTS_NUM - 1))
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Ya se que este código podría ser considerablemente
|
||||
# acortado, pero prefiero Bash lo más explícito posible
|
||||
# para evitar posibles complicaciones
|
||||
|
||||
if [[ $1 -lt $RANDOM_NUM ]]; then
|
||||
echo "El número es demasiado bajo!"
|
||||
ATTEMPTS_NUM=$((ATTEMPTS_NUM - 1))
|
||||
|
@ -59,6 +70,8 @@ checkWin() {
|
|||
fi
|
||||
}
|
||||
|
||||
# Comprueba si el número de intentos es igual a cero
|
||||
# para terminar la partida
|
||||
checkLose() {
|
||||
if [[ $ATTEMPTS_NUM == 0 ]]; then
|
||||
echo "Pierdes! El número era $RANDOM_NUM :/"
|
||||
|
@ -66,17 +79,23 @@ checkLose() {
|
|||
fi
|
||||
}
|
||||
|
||||
# Función principal
|
||||
main() {
|
||||
# Genera un número aleatorio desde 0 hasta el número máximo
|
||||
# configurado por el usuario
|
||||
RANDOM_NUM=$(seq 0 $POOL_NUM | tr " " "\n" | shuf -n1)
|
||||
for (( ; ; )); do
|
||||
|
||||
for (( ; ; )); do
|
||||
status
|
||||
checkLose
|
||||
|
||||
|
||||
num_attempt="-1"
|
||||
while [[ ! $num_attempt =~ $RE || $num_attempt > $POOL_NUM ]]; do
|
||||
# Comprobación de entrada de usuario:
|
||||
# Prohíbe cualquier entrada que no sea un número y que sea mayor al límite
|
||||
while true; do
|
||||
read -p "Número: " num_attempt
|
||||
if [[ $num_attempt =~ $RE ]] && (( $num_attempt <= $POOL_NUM )); then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
checkWin $num_attempt
|
||||
|
|
Loading…
Reference in New Issue