Вы находитесь на странице: 1из 8

Informe tarea n2: Programacin de hebras Departamento de ingeniera en informtica y ciencias de la computacin

TAREA N2: PROGRAMACION DE HEBRAS Cesar Albornoz, Francisco Leiva, Maximiliano Muoz 10 de Diciembre de 2010 RESUMEN En un sistema operativo un proceso se define por los recursos que usa y por el lugar donde se ejecuta. Sin embargo, hay muchos casos en los que seria til compartir los recursos y acceder a ellos de forma concurrente. Esta situacin es posible mediante la realizacin de un nuevo contador de programa, o hilo de control. Un hilo puede operar en uno o varios estados: listo, bloqueado, en ejecucin o terminado y para lograr esta sincronizacin entre ellos es necesario recurrir a los denominados semforos y as coordinar la ejecucin de todos los procesos concurrentes. El presente informe muestra la creacin de un videojuego en modo consola, aplicando el uso de hilos y semforos para la ejecucin en si, en este caso el videojuego a representar es el galaxian, el cual bsicamente es una nave como jugador y naves enemigas las cuales se deben eliminar, siempre en un espacio determinado.

1.1 Introduccin En un sistema operativo un proceso se define por los recursos que usa y por el lugar donde se ejecuta. Estos recursos pueden ser de diversa ndole y para este caso en particular, se requiere compartir los recursos y acceder a ellos de forma concurrente para la generacin de un videojuego. El juego a desarrollar es una copia del juego galaxian; juego que se basa en una nave que se mueve solo de manera horizontal y naves enemigas las cuales pueden moverse de manera horizontal y vertical, algo importante de destacar es que la nave del jugador tiene la capacidad de disparar y con ello poder ir eliminando naves enemigas. El desarrollo del videojuego implica el uso de hebras y semforos para la generacin de naves y generacin de disparos; en trminos simples, cada nave generada en pantalla y cada disparo es una hebra generada para que pueda trabajar de manera concurrente. La programacin del videojuego esta hecha en lenguaje C, bajo la plataforma Linux mediante la maquina virtual Qemu. Objetivo general: o El objetivo de este segundo trabajo es el desarrollo, generacin y aplicacin de hebras y semforos para la coordinacin de estos dentro de un proceso, el cual es un videojuego.

UNIVERSIDAD DE ATACAMA DEPARTAMENTO DE INGENIERIA EN INFORMATICA Y CIENCIAS DE LA COMPUTACION

Informe tarea n2: Programacin de hebras Departamento de ingeniera en informtica y ciencias de la computacin

Objetivos especficos: o Generacin y uso de hebras en lenguaje C, bajo plataforma Linux. o Generacin y uso de semforos en lenguaje C, bajo plataforma Linux. o Utilizar comandos ms especficos del lenguaje C, bajo plataforma Linux.

Finalmente para el desarrollo de este proyecto, se utilizaron apuntes entregados por el profesor, investigaciones hechas de manera particular por el grupo de trabajo y un videojuego tambin generado en lenguaje C, pero emulando al pac-man. 1.2.- Trabajos relacionados El desarrollo de esta implementacin se baso en dos trabajos relacionados, los cuales hacan uso de la impresin por pantalla y uso de hebras respectivamente. El primer trabajo relacionado fue entregado por el propio profesor y consista por un cdigo base en lenguaje C del cual se rescataron los siguientes aspectos importantes: Como imprimir por pantalla. Como capturar un carcter por teclado.

En el segundo trabajo relacionado fue entregado por el alumno ayudante de la asignatura y consista en un cdigo base tambin en lenguaje C del cual se rescataron los siguientes aspectos importantes: Como imprimir en pantalla Como capturar un carcter por teclado Como generar hebras y semforos Como dar movimiento al jugador

1.3.- Metodologa La metodologa para abordar el problema y solucin fue en primera instancia ver el funcionamiento del videojuego original Galaxian, hecho esto se defini los siguientes movimientos, los cuales se muestran de manera grafica en la figura 1 y son los siguientes: Movimiento del jugador solo horizontal. Movimiento de naves enemigas horizontal y vertical. Disparos generados de manera vertical por el jugador y naves enemigas.

UNIVERSIDAD DE ATACAMA DEPARTAMENTO DE INGENIERIA EN INFORMATICA Y CIENCIAS DE LA COMPUTACION

Informe tarea n2: Programacin de hebras Departamento de ingeniera en informtica y ciencias de la computacin

Figura n1: Idealizacin del videojuego Galaxian.

En base a la figura n1, se aprecia de manera grafica el movimiento de la nave del jugador y de las naves enemigas, representado por flechas con lneas segmentadas, y adems los disparos efectuados por la nave del jugador representados por pequeas flechas los cuales pueden ser como mximo tres en pantalla; adems de los disparos realizados por la nave enemiga que tambin estn representados por pequeas flechas. Luego de ya tener la visin general de cmo funciona el juego se procedi a realizar lo siguiente de manera secuenciada: Primero se procedi a imprimir un carcter en pantalla con movimiento predeterminado solo en direccin derecha. En segundo lugar se defini a este carcter como la nave del jugador, y se le definieron el movimiento horizontal dentro de un espacio restringido (la pantalla de juego). En tercer lugar se genero el disparo del jugador de manera vertical en un espacio restringido (la pantalla de juego). En una cuarta parte se comenz a imprimir las naves enemigas en pantalla, en esta parte solo se defini su movimiento horizontal.

UNIVERSIDAD DE ATACAMA DEPARTAMENTO DE INGENIERIA EN INFORMATICA Y CIENCIAS DE LA COMPUTACION

Informe tarea n2: Programacin de hebras Departamento de ingeniera en informtica y ciencias de la computacin

En una quinta parte se defini el movimiento vertical de las naves. Finalmente se implemento la funcin que elimina una nave enemiga al chocar con un disparo generado por la nave del jugador.

Luego de todo esto se llego al resultado obtenido y presentado en este informe y presentacin del videojuego al profesor. 1.4.- Desarrollo 1.4.1.- Definicin de objetos que interactan en pantalla La definicin de objetos y sus respectivos caracteres para representarlos de manera grafica en el videojuego fue la siguiente: Nave del jugador: <0> Disparos de la nave del jugador: | Naves enemigas: W

Figura n2: idealizacin de videojuego con caracteres

La figura n2 muestra la idealizacin del juego en pantalla, pero considerando los caracteres a utilizar

UNIVERSIDAD DE ATACAMA DEPARTAMENTO DE INGENIERIA EN INFORMATICA Y CIENCIAS DE LA COMPUTACION

Informe tarea n2: Programacin de hebras Departamento de ingeniera en informtica y ciencias de la computacin

1.4.2.- Impresin por pantalla Para la impresin por pantalla se considero una matriz que defina el rea de juego de 50x30, dentro de esta matriz se encuentra tanto las naves enemigas como la nave del jugador. Este rectngulo es de fondo negro y las naves enemigas como la del jugador y disparos son blancas; por lo tanto no se considero ningn color para la realizacin del videojuego. Para estas impresiones se utilizo la funcin printf, pero no de la manera usual como se ensea en cualquier curso de programacin bsica o introduccin a la programacin; a la funcin printf se le agregaron sentencias las cuales permiten la impresin de un carcter por pantalla y adems el poder darle movimiento a este. Un ejemplo claro de cmo se utilizo la sentencia printf es la siguiente (extrada de el cdigo del videojuego): printf("\033[0m\033[%dG\033[24d <0> ", (int)(col)); Esta sentencia en particular permite la impresin en pantalla de la nave del jugador, la cual en base a una funcin que captura caracteres ingresados por teclado, realiza el movimiento horizontal de la nave en un espacio restringido en la ltima fila de nuestra matriz. La funcin que captura caracteres por teclado es una funcin copiada de trabajos relacionados mencionados en el tem 1.3. 1.4.3.- Implementacin del rea de juego Necesariamente para la realizacin del videojuego era definir una matriz, pero que en este caso, esta no se encuentra declarada de manera implcita dentro del cdigo del programa, sino que est declarada dentro de las impresiones en pantalla como limites de impresin. O en el caso del movimiento de la nave del jugador con la ayuda de funciones las cuales incrementan o decrementan el valor de una variable hasta los lmites de nuestra matriz imaginaria. 1.4.4.- Implementacin de las hebras Tal como se menciono en el tem 1.1, la creacin de hebras permite realizar procesos concurrentes y en este caso en particular la interaccin de varios objetos en pantalla de manera independiente. Como se esta trabajando en la plataforma Linux, la creacin de hebras se realiza de la siguiente manera con el comando pthread_create: pthread_create(&threads[1], NULL,(void *)&Enemigo, (void *)1); Para el videojuego en particular se usaron 11 hebras, las cuales permiten mostrar la nave del jugador, naves enemigas y disparos; De manera mas detallada las hebras de las
UNIVERSIDAD DE ATACAMA DEPARTAMENTO DE INGENIERIA EN INFORMATICA Y CIENCIAS DE LA COMPUTACION 5

Informe tarea n2: Programacin de hebras Departamento de ingeniera en informtica y ciencias de la computacin

naves enemigas son nueve y fueron creadas con la funcin pthread_create, una hebra para generar los disparos de la nave del jugador que tambin fue creada con la funcin pthread_create y finalmente el main, que es considerado una hebra mas y en este caso quedo determinada para la nave del jugador. 1.4.5.- Ejecucin del cdigo El archivo generado en lenguaje C se denomina tarea2.c, la compilacin de este en la plataforma Linux se realizo de la siguiente manera considerando las hebras generadas por el cdigo: gcc tarea2.c o tarea2.bin lpthread La ltima sentencia agregada al final de la lnea de compilacin -lpthread es necesaria para que el compilador pueda reconocer las hebras creadas; si el cdigo se encuentra correctamente escrito, debiera generarse un archivo ejecutable en Linux denominado tarea2.bin. Al ejecutar el programa nos aparece en pantalla el resultado del videojuego, las naves movindose de manera aleatoria y los disparos tal como aparece en la figura 3.

Figura 3.- Captura de pantalla del juego galaxian en modo consola

Como se aprecia en la figura 3, se tiene el galaxian muy semejante al modelo idealizado del tem 1.4.1, las naves enemigas, la nave del jugador y finalmente los disparos. Para poder interactuar con el videojuego se deben presionar las siguientes teclas:
UNIVERSIDAD DE ATACAMA DEPARTAMENTO DE INGENIERIA EN INFORMATICA Y CIENCIAS DE LA COMPUTACION 6

Informe tarea n2: Programacin de hebras Departamento de ingeniera en informtica y ciencias de la computacin

Tecla escape, la cual permite terminar y salir del juego. Tecla A para el movimiento hacia la izquierda de la nave del jugador y la tecla D, para el movimiento hacia la derecha de la nave del jugador. Tecla o barra espaciadora la cual genera el disparo de la nave del jugador.

1.5.- Experimentos/resultados/discusin 1.5.1.- Experimentos Para la obtencin del producto final el cual se muestra en la figura 3, se realizaron infinidades de pruebas con los cdigos base de los trabajos relacionados, mencionados en el tem 1.2, para finalmente entender partes importantes de estos como lo fue imprimir por pantalla un carcter, capturar caracteres por teclado sin presionar la tecla enter y generar hebras en Linux. Asimilado el funcionamiento de estos aspectos importantes dentro del desarrollo del videojuego se implementaron en el cdigo final y a medida que se agregaban mas lneas de cdigo, se fueron realizando distintas pruebas hasta llegar al producto final que se muestra en la figura 3. 1.5.2.-Resultados Los resultados obtenidos en el proyecto de desarrollo de un videojuego mediante el uso de hebras es completamente satisfactorio en la aplicacin e implementacin de hebras, pero no totalmente satisfactorio en la semejanza del videojuego desarrollado por el grupo de trabajo y el videojuego original 1.5.3.-Discusion Dentro de los problemas encontrados durante la realizacin del videojuego se encuentran el hecho de no poder colocar 4 o 5 naves enemigas juntas en filas como se muestra en la figura 2, sino que tal como se muestra en la figura 3 solo se pudo implementar naves enemigas 1 en cada fila de la matriz; Otro de los grandes problemas que se generaron fue la eliminacin de la nave enemiga una vez que chocara con un disparo y finalmente, la trayectoria en zig-zag de las naves enemigas una vez que procedan al ataque de la nave del jugador.

UNIVERSIDAD DE ATACAMA DEPARTAMENTO DE INGENIERIA EN INFORMATICA Y CIENCIAS DE LA COMPUTACION

Informe tarea n2: Programacin de hebras Departamento de ingeniera en informtica y ciencias de la computacin

1.6.- Conclusiones A pesar de lograr el objetivo principal de esta tarea el cual es implementar hebras en un proceso bajo la plataforma Linux, no se logro en completa satisfaccin la creacin del videojuego; Dentro de los grandes problemas encontrados durante la creacin de este, estaba el como ir borrando caracteres a medida que estos se iban generando, ya que por ejemplo cuando las naves enemigas bajaban a atacar a la nave del jugador, dejaba imprimida toda su trayectoria, logrando con esto llenar la pantalla con caracteres que eran innecesarios. Otro gran problema es que no se pudo implementar mas naves enemigas en una fila tal como lo es en el videojuego original. Finalmente a pesar de no lograr todos los objetivos completamente, el trabajo de desarrollo fue muy importante y enriquecedor ya que permiti dar cuenta en primer lugar como ejecutar varios procesos de manera concurrente, y como interactuar con el computador solo trabajando en modo consola.

UNIVERSIDAD DE ATACAMA DEPARTAMENTO DE INGENIERIA EN INFORMATICA Y CIENCIAS DE LA COMPUTACION

Вам также может понравиться