Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: BlacKGilgamesH en 31 Julio 2010, 03:03 am



Título: [Bash] Motor Físico (Sencillo) [BETA 1]
Publicado por: BlacKGilgamesH en 31 Julio 2010, 03:03 am
Bueno, estos dias e estado trabajando en bash para poder hacer un juego más o menos desente, asi que me puse a hacer el "motor" (por asi llamarlo) fisico  :o , osea, que el personaje, valla cayendo y que alla distintos niveles de suelo (osea plataformas, etc), y objetos moviles (que no he incorporado en esta version pero ya trabajo en ellos), que el personaje salte y enemigos (lo mismo que los objetos).

La verdad es muy sencillo, pero puede servir de algo.

Les dejo el code y les explico como funciona:
Código
  1. #!/bin/bash
  2. #################
  3. ##Proyecto MFG1##
  4. #################
  5. #By GilgamesH Co#
  6. #######2010######
  7. #################
  8. py=0
  9. px=0
  10. mov(){
  11. tput cup $1 $2
  12. }
  13. key(){
  14. read -t 1 -n 1 $1
  15. }
  16. lim=("6 0" "6 1" "4 2" "6 2" "6 3")
  17. llen="5"
  18. while [ 1 = 1 ]
  19. do
  20. clear
  21. mov 4 2
  22. echo -n "X"
  23. mov 6 0
  24. echo -n "XXXX"
  25. mov $py $px
  26. echo -n "M"
  27. key err
  28. py=$(($py+1))
  29. if [ $err = d ]
  30. then
  31. px=$(($px+1))
  32. fi
  33. if [ $err = w ]
  34. then
  35. py=$(($py-3))
  36. fi
  37. if [ $err = a ]
  38. then
  39. px=$(($px-1))
  40. fi
  41. while [ $px -lt 0 ]
  42. do
  43. px=$(($px+1))
  44. done
  45. while [ $px -ge $(($llen-1)) ]
  46. do
  47. px=$(($px-1))
  48. done
  49. for i in `seq 0 $llen`
  50. do
  51. if [ "$py $px" = "${lim[$i]}" ]
  52. then
  53. py=$(($py-1))
  54. fi
  55. done
  56. done

Solo voy a explicar unas cuantas cosas, primero que nada, las cordenadas:

Código:
lim=("6 0" "6 1" "4 2" "6 2" "6 3")
llen="5"

Aqui lo que hago es especificar donde va a estar el territorio por el que puede caminar nuestro personaje y guardarlo en un array (lim), aparte de que defino la variable llen, que es la cantidad de cordenadas que hay en lim, osea:

Citar
     X
M
XXXXXX

Digamos que la M es el personaje y las X los lugares por los que puede caminar, entonces eso define los lugares (se ve en el code).

Código:
for i in `seq 0 $llen`
do
if [ "$py $px" = "${lim[$i]}" ]
then
py=$(($py-1))
fi
done

Ahora bien, esto lo que hace es comparar las cordenadas en las que se encuentra el personaje con las que se especificaron en el array lim.

Y lo demas es bash puro y sencillo.

Solo quiero dar un enfasis en la funcion "key" (que hice, mas no descubri), que lo que hace es esperar un segundo para que se pulse una tecla, y guardar la tecla presionada en la variable que se le pase como parametro, (en este caso siempre le paso err como parametro).

Bueno eso es todo, si prueban el code, estos son los controles:
A - Mover hacia la izquierda
D - Mover hacia la Derecha
W - Saltar

Ire actualizando en cuanto las demás cosas esten listas.

Puede que tenga algun error o bug (como que puedes saltar en el aire), pero los ire corrigiendo a la vez que saque las versiones, y si notan algun error o bug, porfavor informenme para tratar de corregirlo.

Saludos.


Título: Re: [Bash] Motor Físico (Sencillo) [BETA 1]
Publicado por: leogtz en 31 Julio 2010, 03:05 am
Mejora la indentación de tu código, es una buena costumbre.