bash-exercises/rps.sh

138 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# Definimos los jugadores y su puntuación
declare JUGADOR1
declare JUGADOR2
declare JUGADOR1_PUNTOS=0
declare JUGADOR2_PUNTOS=0
# Definimos las opciones disponibles para cada jugador
OPCIONES_DISPONIBLES=("piedra" "papel" "tijera")
# Función utilizada para comprobar que la entrada de usuario
# sea válida acorde al array anterior
checkAnswer() {
ESVALIDA=false
for respuesta in "${OPCIONES_DISPONIBLES[@]}"; do
if [[ "$1" == "$respuesta" ]]; then
ESVALIDA=true
fi
done
echo $ESVALIDA
}
# Función que comprueba el ganador de la ronda a partir de
# dos argumentos
checkWinner() {
case "$2" in
"piedra")
if [[ "$1" == "piedra" ]]; then
echo "EMPATE"
fi
if [[ "$1" == "papel" ]]; then
echo "$JUGADOR1"
fi
if [[ "$1" == "tijera" ]]; then
echo "$JUGADOR2"
fi
;;
"papel")
if [[ "$1" == "piedra" ]]; then
echo "$JUGADOR2"
fi
if [[ "$1" == "papel" ]]; then
echo "EMPATE"
fi
if [[ "$1" == "tijera" ]]; then
echo "$JUGADOR1"
fi
;;
"tijera")
if [[ "$1" == "piedra" ]]; then
echo "$JUGADOR1"
fi
if [[ "$1" == "papel" ]]; then
echo "$JUGADOR2"
fi
if [[ "$1" == "tijera" ]]; then
echo "EMPATE"
fi
;;
esac
}
# Función encargada de limpiar la pantalla y mostrar la puntuación
# actual
status() {
clear
echo -e "
Puntos de $JUGADOR1: $JUGADOR1_PUNTOS / $PUNTOS_LIMITE
Puntos de $JUGADOR2: $JUGADOR2_PUNTOS / $PUNTOS_LIMITE
"
}
# Función principal
main() {
clear
echo "Bienvenido!"
read -p "Número de puntos límite: " PUNTOS_LIMITE
read -p "Nombre del Jugador 1: " JUGADOR1
read -p "Nombre del Jugador 2: " JUGADOR2
while true; do
while true; do
status
if [[ "$PUNTOS_LIMITE" == "$JUGADOR1_PUNTOS" ]]; then
echo -e "JUGADOR 1 GANA"
exit
elif [[ "$PUNTOS_LIMITE" == "$JUGADOR2_PUNTOS" ]]; then
echo -e "JUGADOR 2 GANA\n"
exit
fi
read -sp "$JUGADOR1: " ELEC1
T=$(checkAnswer "$ELEC1")
if [[ "$T" == false ]]; then
echo "ENTRADA INVALIDA"
sleep 0.5s
break
fi
echo
read -sp "$JUGADOR2: " ELEC2
T=$(checkAnswer "$ELEC2")
if [[ "$T" == false ]]; then
echo "ENTRADA INVALIDA"
sleep 0.5s
break
fi
RESULTADO=$(checkWinner "$ELEC1" "$ELEC2")
if [[ "$RESULTADO" == "EMPATE" ]]; then
echo -e "\nResultado de la partida: $RESULTADO"
else
echo -e "\nResultado de la partida: $RESULTADO GANA!"
fi
case "$RESULTADO" in
"$JUGADOR1")
JUGADOR1_PUNTOS=$(($JUGADOR1_PUNTOS + 1))
;;
"$JUGADOR2")
JUGADOR2_PUNTOS=$(($JUGADOR2_PUNTOS + 1))
;;
esac
read -sp "Pulse enter para continuar: " lol
done
done
}
# Ejecuta la función principal
main