1. GAMEKART UN JUEGO DE CARROS
UTILIZANDO SHELL SCRIPTS DE LINUX
Steven Caicedo Mejillones
Escuela Superior Politécnica de Litoral
Facultad de Ingeniería en Electricidad y Computación
Cátedra: Fundamentos de Linux
skcaiced@espol.edu.ec
RESUMEN II. PLAN DE DESARROLLO
En esta documentacion se muestra el desarrollo de un
videojuego de carros utilizando scripts de Shell bajo el A. Fase de Propuesta
Sistema operativo LINUX.. Se muestra también el periodo En esta fase del proyecto se comencé a analizar
de desarrollo, los objetivos del mismo así como la razón de las dos categorías del proyecto: servicios u ocio,
ser del proyecto y las herramientas nuevas aprendidas en el
analizando el pro y los contras de elegir cada una
transcurso de elaboración del videojuego.
de las categorías, lo que por un análisis costo
ABSTRACT beneficio se decidió por el desarrollo de un juego
This paper shows the development of a car video game para el ocio en la consola. Una vez elegida la
using Shell scripts under the LINUX [1] operating system. categoría comenzó la incógnita ¿qué juego? así se
Also shown the period of development, its objectives and the comenzaron a barajar diversas propuestas de
justification of the project and the new tools learned in the juegos posibles en la consola de Linux [3], tales
course of developing the game.
como 21, Tetris, Arkadian, pero se llego
revisando en internet se concluyo que estos juegos
Índice de Términos— Atari, Bash, comandos, CLI
ya están implementados. Luego haciendo memoria
Juegos de consola, Linux, Scripts, Shell.
de esos juegos inmortales producidos por ATARI
I. INTRODUCCIÓN [4] en su época dorada, llegaban recuerdos del
videojuego que mas me divertido en la infancia, el
El Presente trabajo será presentado como proyecto famoso carito que evitaba chocar con otros carros,
final de la cátedra FUNDAMENTOS DE LINUX no recordando el nombre del juego lo bautice con
cuya propósito fue el utilizar los conocimientos GAMEKAR, y fue así como fue propuesto el
adquiridos en el transcurso del dictado de la proyecto con las siguientes especificaciones:
cátedra para desarrollar un script sea este
orientado a la prestación de servicios en un 1) Primera condición: El carro que avanza en
ambiente LINUX o el desarrollo de un juego para una carretera en la que en puntos determinados
el ocio en la consola del SO (Sistema Operativo) hay obstáculos que este debe evitar.
[2] antes mencionado. La propuesta del proyecto 2) Segunda condición: El carro se puede mover
fue presentada al iniciar la cátedra con el nombre solo en dos direcciones para evitar los obstáculos,
de “Desarrollo de un juego de carros” siendo a la izquierda o a la derecha.
aceptada días después de la propuesta por el Ing. 3) Tercera condición: El juego termina cuando
Ignacio Marín (docente de la cátedra). el carro choca con alguno de los obstáculos,
Se presenta el plan de trabajo utilizado para el siendo el puntaje en función del tiempo que
desarrollo del script así como la estrategia de permaneció sin chocarse.
programación implementada en el mismo. 4) Cuarta condición: El juego debe mostrar un
ranking de los 15 puntajes más altos almacenados
en cada juego con sus respectivos nombres.
2. B. Fase de Planificación C. Fase de Desarrollo e Implementación
En esta fase se comenzó a hacer el análisis de Esta es la fase donde se puso manos a la obra, en
las condiciones del proyecto así como las posibles nuestro caso diseñar cada una de las interfaces
soluciones y técnicas de programación que codificando y dándoles funcionalidad a cada una
usaríamos en el desarrollo. Así como planteamos de ellas.
en dividir el programa en las diversas interfaces
que mostraremos a los jugadores, de esta forma las 1) Introducción: Esta parte de la interfaz es solo
interfaces quedaron de la siguiente manera: un grupo de secuencias de salidas de pantallas, no
tiene mayor funcionalidad, solo da una
1) Introducción: Una interfaz animada que presentación agradable del juego. El efecto se
muestre el nombre del programa y le dé un toque logro con una combinación de: salidas de
de elegancia al juego. pantallas, el comando para limpiar la pantalla que
2) Menú: interfaz que muestra las diferentes en la consola de Linux es clear [5], además de una
opciones del juego, sea esta: juego nuevo, ranking, espera de 1 segundo que da la apariencia de hilos
de ejecución usando el comando sleep [6].
información del desarrollador o salir del
programa. FIG. II
3) Juego nuevo: Interfaz que muestra el juego PANTALLAZOS DE LA INTRODUCCIÓN DEL PROGRAMA
propiamente dicho, es en esta interfaz donde se
pondrá mas énfasis en el desarrollo.
4) Ranking: Interfaz que muestra un listado de
los 15 mejores puntajes, cada puntaje con sus
respectivos nombres.
5) Acerca: interfaz que muestra información
acerca del desarrollador del juego
Haciendo un diagrama de flujo del programa con
respecto a las interfaces antes mencionada queda
de la siguiente manera
FIG. I
DIAGRAMA DE FLUJO DEL PROGRAMA
El tiempo entre un pantallazo y otro es de 1 segundo
2) Menú: Esta parte del programa está dominada
por un lazo infinito de ejecución que
constantemente pregunta por teclado la opción a
escoger sea esta: nuevo juego, ranking, acerca, o
Sel es la variable usada en el Menú para hacer las veces de
salir del programa. El proceso de selección esta
Seleccionador. programado por la instrucción case [7] de los
sistemas Linux. La opción salir está definida por
la instrucción exit 1 [8]. A continuación se
muestra un pantallazo del menú de la aplicación:
3. Lo interesante de este bloque es que imprime
FIG. III
PANTALLAZO DEL MENÚ
solo los 15 mejores puntajes en orden descendente
usando las instrucciones sort [9] y sed [10], es por
esto que me presto a mostrar este bello código:
for n in {1..15}
do
echo "${n})$(sort -r rank.txt | sed -n ${n},${n}p) "
done
5) Acerca: Esta parte del programa es la más
sencilla, solo muestra información del
desarrollador. A continuación un pantallazo de la
interfaz:
FIG. V
PANTALLAZO DE ACERCA
3) Ranking: Esta parte del programa lee un
archivo que almacena los puntajes de los
jugadores así como el nombre de los mismos, este
archivo es previamente modificado cada vez que
un usuario juega, esto se explicara en un literal
posterior.
FIG. IV
PANTALLAZO DEL RANKING
4) Juego: Esta es la parte del proyecto más
compleja ya que es la que implementa el juego
propiamente dicho, es así que esta interfaz o
bloque la hemos subdividido en bloques:
FIG. VI
DIAGRAMA DE FLUJO DE JUEGO
4. 1) Detección del teclado: Esta es una parte tiempo que se mantuvo sin chocar con ningún
importante del script ya que hace la captura del obstáculo, además pide que escriba el nombre del
teclado, y fue quizá la parte más complicada del jugador y luego añade esta información a un
proyecto ya que para capturar el teclado usamos el archivo de texto denominado rank.txt contendrá
comando read [11], el cual necesita siempre un enter todos los puntajes de todas las personas que han
después de haber escrito lo que queremos enviarle al jugado. A continuación se muestran unos
programa. Esto sería molestoso, ya que por ejemplo pantallazos de la interfaz Juego y Game Over
cada vez que quisiéramos movernos a la derecha luego
de presionar la tecla d tendríamos que presionar luego
respectivamente:
FIG. VI
un enter. Debido a este problema se decidió darle un PANTALLAZO DE JUEGO
tiempo determinado de lectura al teclado en cada
interacción, para esto podíamos utilizar la bandera –t
del comando read que da un tiempo de lectura al
teclado, pero esta opción no funciona correctamente
en algunas versiones de intérpretes de comandos en
Linux [12]. En el caso de la versión de mi intérprete no
funcionaba correctamente esta opción, así que decidí
buscar alternativas en internet, y pensé “alguien en
algún lugar alguna ocasión tuvo q haber necesitado
algo parecido”. Es así como encontré una hermosa
función que realizaba exactamente como lo necesitaba,
aquí se los muestro:
timedout_read() {
timeout=$1
varname=$2
old_tty_settings=`stty -g`
stty -icanon min 0 time ${timeout}0
eval read $varname # or just read $varname
stty "$old_tty_settings"
} [13]
2) Movimiento del carro: Esta parte de la
interfaz o bloque juego es la que efectúa el FIG. VII
movimiento del carro hacia la derecha si el Pantallazo de Game Over
usuario presiono d y hacia la izquierda si el
usuario presiono a.
3) Generación de obstáculos aleatorio: Esta
parte del bloque juego es la que genera que los
obstáculos vayan apareciendo de forma aleatoria
usando la instrucción RANDOM [14].
4) Caída de obstáculos: Esta parte es una
función que hace que los obstáculos vayan
cayendo, haciendo una modificación en los
arreglos ya que cada línea de la interfaz está
definida como un arreglo de tamaño 17.
5) Muestra de Pantalla: Esta es la parte del
bloque juego que imprime en pantalla el juego
propiamente dicho.
6) Game Over: Es una interfaz que se muestra
cuando el jugador ha perdido la partida, mostrado
un mensaje que dice GAME OVER, además
muestra la puntuación obtenida basada en el
5. III. CONCLUSIONES APÉNDICE C
PROCESO DE CARGA DE UN PROGRAMA
Es necesario antes de insertarse en la
programación de programas, sean estos scripts o
programas en cualquier tipo de lenguaje, analizar
las condiciones del programa objetivo y realizar
un diseño conceptual de la solución del mismo,
para facilitar la programación, además de hacerla
de una forma pulcra y ordenada.
Los script son archivos de texto que
pueden ser ejecutados por un intérprete de
comandos, que sirven para automatizar procesos
en los dispositivos electrónicos, además de poder
crear programas que emulen juegos para el ocio en
la consola de Linux.
Los scripts no son compilados, son
interpretados por el intérprete de comandos cada
vez que uno ejecute el mismo.
APÉNDICE
APÉNDICE A APÉNDICE D
KERNEL- SHELL- COMMANDS
LENGUAJE COMPILADO E INTERPRETADO
APÉNDICE B
DIAGRAMA DE BLOQUES DEL LENGUAJE INTERPRETADO
RECONOCIMIENTOS
Agradecimientos Ing. Ignacio Marín García
docente de la cátedra de Fundamentos de Linux y
tutor de este proyecto, por ser el facilitador de
aprendizaje de este Sistema Operativo.
6. REFERENCIAS AUTOR
[1] Anónimo (2012), “Linux”, [online] Wikipedia la Steven Caicedo Mejillones Ingreso a la Facultad de
enciclopedia libre Ingeniera en Electricidad y Computación (FIEC) de la
Disponible en: http://es.wikipedia.org/wiki/Linux Escuela Superior Politécnica del Litoral (ESPOL) en 2008
. cursando una Ingeniería en Telemática, su principal interés
[2] Anónimo (2012), “SO”, [online] Wikipedia la son los sistemas de comunicación digital, además del diseño
enciclopedia libre de circuitos digitales de control.
Disponible en:
http://es.wikipedia.org/wiki/Sistema_operativo
[3] Anónimo (2012), “La consola de Linux”,
[online] Wikipedia la enciclopedia libre
Disponible en:
http://www.linuxadictos.com/la-consola-de-linux-
%C2%BFla-pantalla-negra-de-la-muerte.html
[4] Anónimo (2012), “Atari”, [online] Wikipedia la
enciclopedia libre
Disponible en: http://es.wikipedia.org/wiki/Atari
[5] Anónimo (2012), “clear”, [online] Linux Documentation
Disponible en: http://linux.die.net/man/1/clear
[6] Anónimo(2012), “sleep”, [online] Linux Documentation
Disponible en: http://linux.die.net/man/3/sleep
[7] Anónimo (2012), “clear”, [online] Linux Documentation
Disponible en: http://linux.die.net/man/1/case
[8] Anónimo (2012), “exit”, [online] Linux Documentation
Disponible en:http://linux.die.net/man/1/exit.
[9] Anónimo (2012), “sort”, [online] Linux Documentation
Disponible en: http://linux.die.net/man/1/sort.
[10] Anónimo (2012), “set”, [online] Linux Documentation
Disponible en: http://linux.die.net/man/1/sed
[11] Anónimo (2012), “read”, [online] Linux Documentation
Disponible en: http://linux.die.net/man/2/read.
[12] Anónimo (2012), “Interprete de comandos”,
[online] Wikipedia la enciclopedia libre
Disponible en:
http://es.wikipedia.org/wiki/Int%C3%A9rprete_de_com
andos.
[13] Anónimo (2012), “Advanced Bash-Scripting Guide”,
[online] Linux Documentation Proyect Guides
Disponible en:
http://www.tldp.org/LDP/abs/html/internalvariables.htm
l#TIMEOUT
[14] Anónimo (2012), “random”, [online] Linux
Documentation
Disponible en: http://linux.die.net/man/1/random