› Foros › PC › Software libre
read -n 1 -s mov
mensaje=" "
#Para borrar la posición actual del personaje, y moverlo a otra posición
tput cup $xJ1 $yJ1
echo " "
#Comprueba que se le ha dado a W, A, S o D, si no suelta un mensaje que se imprimirá en pantalla
case $mov in
[Ww])
xJ1=$(( $xJ1 - 1 ))
;;
[Ss])
xJ1=$(( $xJ1 + 1 ))
;;
[Aa])
yJ1=$(( $yJ1 - 1 ))
;;
[Dd]) yJ1=$(( $yJ1 + 1 ))
;;
*)
mensaje="Pulsa W, D, A o S para mover al Indi Go-Yons."
;;
esac
jorchube escribió:Las teclas direccionales, si no me equivoco, suelen ser tratadas como secuencias ANSI por los terminales, y en este caso, son secuencias multibyte.
`read` , con el -n 1, está capturando el primero de los bytes, pero el segundo no.
Mira:
Las teclas s y w las captura bien, pero las flechas up y down captura el primer byte (el mismo en ambos casos, 0x1b), y el segundo byte, que es el que realmente es diferente, como escrito en el terminal (esos [A y [B, que por cierto, para que apareciesen en la imagen simplemente he pulsado enter, por eso el "command not found")
Parece que ir caracter a caracter no es suficiente. O mejoras/haces más compleja esa detección de teclas tu mismo, o quizá podrías echarle un ojo a la librería ncurses o alguna otra, que te resolvería el problema.
PS: Quizá sea posible configurar el terminal de alguna manera concreta que te ayude al arrancar el juego, pero eso no lo tengo controlado. Pero si lo haces acuérdate de volver a restaurar la configuración al salir