Caicedo_Juego_consola_Linux

6
RESUMEN En esta documentacion se muestra el desarrollo de un videojuego de carros utilizando scripts de Shell bajo el Sistema operativo LINUX.. Se muestra también el periodo de desarrollo, los objetivos del mismo así como la razón de ser del proyecto y las herramientas nuevas aprendidas en el transcurso de elaboración del videojuego. ABSTRACT This paper shows the development of a car video game using Shell scripts under the LINUX [1] operating system. Also shown the period of development, its objectives and the justification of the project and the new tools learned in the course of developing the game. Índice de TérminosAtari, Bash, comandos, CLI Juegos de consola, Linux, Scripts, Shell. I. INTRODUCCIÓN El Presente trabajo será presentado como proyecto final de la cátedra FUNDAMENTOS DE LINUX cuya propósito fue el utilizar los conocimientos adquiridos en el transcurso del dictado de la cátedra para desarrollar un script sea este orientado a la prestación de servicios en un ambiente LINUX o el desarrollo de un juego para el ocio en la consola del SO (Sistema Operativo) [2] antes mencionado. La propuesta del proyecto fue presentada al iniciar la cátedra con el nombre de “Desarrollo de un juego de carros” siendo aceptada días después de la propuesta por el Ing. Ignacio Marín (docente de la cátedra). Se presenta el plan de trabajo utilizado para el desarrollo del script así como la estrategia de programación implementada en el mismo. II. PLAN DE DESARROLLO A. Fase de Propuesta En esta fase del proyecto se comencé a analizar las dos categorías del proyecto: servicios u ocio, analizando el pro y los contras de elegir cada una de las categorías, lo que por un análisis costo beneficio se decidió por el desarrollo de un juego para el ocio en la consola. Una vez elegida la categoría comenzó la incógnita ¿qué juego? así se comenzaron a barajar diversas propuestas de juegos posibles en la consola de Linux [3], tales como 21, Tetris, Arkadian, pero se llego revisando en internet se concluyo que estos juegos ya están implementados. Luego haciendo memoria de esos juegos inmortales producidos por ATARI [4] en su época dorada, llegaban recuerdos del videojuego que mas me divertido en la infancia, el famoso carito que evitaba chocar con otros carros, no recordando el nombre del juego lo bautice con GAMEKAR, y fue así como fue propuesto el proyecto con las siguientes especificaciones: 1) Primera condición: El carro que avanza en una carretera en la que en puntos determinados hay obstáculos que este debe evitar. 2) Segunda condición: El carro se puede mover solo en dos direcciones para evitar los obstáculos, a la izquierda o a la derecha. 3) Tercera condición: El juego termina cuando el carro choca con alguno de los obstáculos, siendo el puntaje en función del tiempo que permaneció sin chocarse. 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. 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 [email protected]

description

Documentacion del desarrolllo de un juego de carros utilizando scripts e Shell bajo el sistema operativo Linux

Transcript of Caicedo_Juego_consola_Linux

Page 1: Caicedo_Juego_consola_Linux

RESUMEN En esta documentacion se muestra el desarrollo de un

videojuego de carros utilizando scripts de Shell bajo el

Sistema operativo LINUX.. Se muestra también el periodo

de desarrollo, los objetivos del mismo así como la razón de

ser del proyecto y las herramientas nuevas aprendidas en el

transcurso de elaboración del videojuego.

ABSTRACT This paper shows the development of a car video game

using Shell scripts under the LINUX [1] operating system.

Also shown the period of development, its objectives and the

justification of the project and the new tools learned in the

course of developing the game.

Índice de Términos— Atari, Bash, comandos, CLI

Juegos de consola, Linux, Scripts, Shell.

I. INTRODUCCIÓN

El Presente trabajo será presentado como proyecto

final de la cátedra FUNDAMENTOS DE LINUX

cuya propósito fue el utilizar los conocimientos

adquiridos en el transcurso del dictado de la

cátedra para desarrollar un script sea este

orientado a la prestación de servicios en un

ambiente LINUX o el desarrollo de un juego para

el ocio en la consola del SO (Sistema Operativo)

[2] antes mencionado. La propuesta del proyecto

fue presentada al iniciar la cátedra con el nombre

de “Desarrollo de un juego de carros” siendo

aceptada días después de la propuesta por el Ing.

Ignacio Marín (docente de la cátedra).

Se presenta el plan de trabajo utilizado para el

desarrollo del script así como la estrategia de

programación implementada en el mismo.

II. PLAN DE DESARROLLO

A. Fase de Propuesta

En esta fase del proyecto se comencé a analizar

las dos categorías del proyecto: servicios u ocio,

analizando el pro y los contras de elegir cada una

de las categorías, lo que por un análisis costo

beneficio se decidió por el desarrollo de un juego

para el ocio en la consola. Una vez elegida la

categoría comenzó la incógnita ¿qué juego? así se

comenzaron a barajar diversas propuestas de

juegos posibles en la consola de Linux [3], tales

como 21, Tetris, Arkadian, pero se llego

revisando en internet se concluyo que estos juegos

ya están implementados. Luego haciendo memoria

de esos juegos inmortales producidos por ATARI

[4] en su época dorada, llegaban recuerdos del

videojuego que mas me divertido en la infancia, el

famoso carito que evitaba chocar con otros carros,

no recordando el nombre del juego lo bautice con

GAMEKAR, y fue así como fue propuesto el

proyecto con las siguientes especificaciones:

1) Primera condición: El carro que avanza en

una carretera en la que en puntos determinados

hay obstáculos que este debe evitar.

2) Segunda condición: El carro se puede mover

solo en dos direcciones para evitar los obstáculos,

a la izquierda o a la derecha.

3) Tercera condición: El juego termina cuando

el carro choca con alguno de los obstáculos,

siendo el puntaje en función del tiempo que

permaneció sin chocarse.

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.

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

[email protected]

Page 2: Caicedo_Juego_consola_Linux

B. Fase de Planificación

En esta fase se comenzó a hacer el análisis de

las condiciones del proyecto así como las posibles

soluciones y técnicas de programación que

usaríamos en el desarrollo. Así como planteamos

en dividir el programa en las diversas interfaces

que mostraremos a los jugadores, de esta forma las

interfaces quedaron de la siguiente manera:

1) Introducción: Una interfaz animada que

muestre el nombre del programa y le dé un toque

de elegancia al juego.

2) Menú: interfaz que muestra las diferentes

opciones del juego, sea esta: juego nuevo, ranking,

información del desarrollador o salir del

programa.

3) Juego nuevo: Interfaz que muestra el juego

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

Sel es la variable usada en el Menú para hacer las veces de

Seleccionador.

C. Fase de Desarrollo e Implementación

Esta es la fase donde se puso manos a la obra, en

nuestro caso diseñar cada una de las interfaces

codificando y dándoles funcionalidad a cada una

de ellas.

1) Introducción: Esta parte de la interfaz es solo

un grupo de secuencias de salidas de pantallas, no

tiene mayor funcionalidad, solo da una

presentación agradable del juego. El efecto se

logro con una combinación de: salidas de

pantallas, el comando para limpiar la pantalla que

en la consola de Linux es clear [5], además de una

espera de 1 segundo que da la apariencia de hilos

de ejecución usando el comando sleep [6].

FIG. II

PANTALLAZOS DE LA INTRODUCCIÓN 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

salir del programa. El proceso de selección esta

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:

Page 3: Caicedo_Juego_consola_Linux

FIG. III

PANTALLAZO DEL MENÚ

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

Lo interesante de este bloque es que imprime

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

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

Page 4: Caicedo_Juego_consola_Linux

1) Detección del teclado: Esta es una parte

importante del script ya que hace la captura del

teclado, y fue quizá la parte más complicada del

proyecto ya que para capturar el teclado usamos el

comando read [11], el cual necesita siempre un enter

después de haber escrito lo que queremos enviarle al

programa. Esto sería molestoso, ya que por ejemplo

cada vez que quisiéramos movernos a la derecha luego

de presionar la tecla d tendríamos que presionar luego un enter. Debido a este problema se decidió darle un

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

movimiento del carro hacia la derecha si el

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

tiempo que se mantuvo sin chocar con ningún

obstáculo, además pide que escriba el nombre del

jugador y luego añade esta información a un

archivo de texto denominado rank.txt contendrá

todos los puntajes de todas las personas que han

jugado. A continuación se muestran unos

pantallazos de la interfaz Juego y Game Over

respectivamente: FIG. VI

PANTALLAZO DE JUEGO

FIG. VII

Pantallazo de Game Over

Page 5: Caicedo_Juego_consola_Linux

III. CONCLUSIONES

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

LENGUAJE COMPILADO E INTERPRETADO

APÉNDICE B

DIAGRAMA DE BLOQUES DEL LENGUAJE INTERPRETADO

APÉNDICE C

PROCESO DE CARGA DE UN PROGRAMA

APÉNDICE D

KERNEL- SHELL- COMMANDS

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.

Page 6: Caicedo_Juego_consola_Linux

REFERENCIAS

[1] Anónimo (2012), “Linux”, [online] Wikipedia la

enciclopedia libre

Disponible en: http://es.wikipedia.org/wiki/Linux

.

[2] Anónimo (2012), “SO”, [online] Wikipedia la

enciclopedia libre

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

AUTOR

Steven Caicedo Mejillones Ingreso a la Facultad de

Ingeniera en Electricidad y Computación (FIEC) de la

Escuela Superior Politécnica del Litoral (ESPOL) en 2008

cursando una Ingeniería en Telemática, su principal interés

son los sistemas de comunicación digital, además del diseño

de circuitos digitales de control.