Vous êtes sur la page 1sur 4

JUEGO PONG

Universidad Nacional de Trujillo

Ingeniería Informática

Trujillo – Perú

Jorge Gutiérrez Gutiérrez

1º Autor 2º Autor

Charl López Egúsquiza Claudia Valdivieso Castillo

carl_stom@hotmail.com clindy_26@hotmail.com

Resumen: Introducción:

Pong es un juego de deportes en dos El presente proyecto incorpora conceptos


dimensiones que simula un tenis de mesa. como sockets, modelo cliente-servidor,
protocolos e hilos para su desarrollo. El
El jugador controla en el juego una paleta objetivo del Pong es lograr la comunicación
moviéndola verticalmente en la parte entre distintas maquinas, y por ende el
izquierda o derecha de la pantalla, poder jugar en red, recepcionando tramas de
compitiendo contra otro jugador humano un cliente hacia el servidor y viceversa. La
que controla una segunda paleta en la parte implementación de un protocolo cliente-
opuesta. Los jugadores pueden usar las servidor, tanto para el cliente como para el
paletas para pegarle a la pelota hacia un lado servidor es indispensable para lograr la
u otro. El objetivo consiste en que uno de los comunicación entre estos, pues es la manera
jugadores consiga más puntos que el en la que se “entenderán”.
oponente al finalizar el juego. Estos puntos
se obtienen cuando el jugador adversario La comunicación entre dos maquinas puede
falla al devolver la pelota. lograrse de distintas maneras, pero este
proyecto se ha realizado para ver que
La aplicación ha sido desarrollada para el podemos aplicar en la practica, conceptos
entorno Linux (Ubuntu) en el lenguaje C++ como los ya mencionados al principio de esta
con OpenGL para realizar la parte gráfica. introducción. En este caso en el desarrollo de
Para el Teleprocesamiento usamos sockets nuestro juego Pong, estos conceptos se unen
Stream (TCP) e hilos posix, logrando así para hacer posible su realización. En las
enlazar ambas computadoras. siguientes secciones hablaremos a detalle
sobre distintos aspectos y consideraciones
en el desarrollo de este proyecto.
Fundamento Teórico: escribir aplicaciones que produzcan gráficos
2D y 3D. La interfaz consiste en más de 250
Lenguaje C++: C++ es un lenguaje de
funciones diferentes que pueden usarse para
programación diseñado a mediados de los dibujar escenas tridimensionales complejas a
años 1980 por Bjarne Stroustrup. La partir de primitivas geométricas simples,
intención de su creación fue el extender al tales como puntos, líneas y triángulos. Fue
exitoso lenguaje de programación C con desarrollada originalmente por Silicon
mecanismos que permitan la manipulación
Graphics Inc. (SGI) en 1992 y se usa
de objetos. En ese sentido, desde el punto de ampliamente en CAD, realidad virtual,
vista de los lenguajes orientados a objetos, el representación científica, visualización de
C++ es un lenguaje híbrido. información y simulación de vuelo. También
Posteriormente se añadieron facilidades de se usa en desarrollo de videojuegos, donde
programación genérica, que se sumó a los compite con Direct3D en plataformas
otros dos paradigmas que ya estaban Microsoft Windows.
admitidos (programación estructurada y la
Socket Stream (TCP): Son un servicio
programación orientada a objetos). Por esto orientado a conexión, donde los datos se
se suele decir que el C++ es un lenguaje de transfieren sin encuadrarlos en registros o
programación multiparadigma. bloques. Si se rompe la conexión entre los
Actualmente existe un estándar, procesos, éstos serán informados de tal
denominado ISO C++, al que se han adherido suceso para que tomen las medidas
la mayoría de los fabricantes de oportunas. El protocolo de comunicaciones
compiladores más modernos. Existen con streams es un protocolo orientado a
también algunos intérpretes, tales como conexión, ya que para establecer una
ROOT. comunicación utilizando el protocolo TCP,
hay que establecer en primer lugar una
Una particularidad del C++ es la posibilidad conexión entre un par de sockets. Mientras
de redefinir los operadores (sobrecarga de uno de los sockets atiende peticiones de
operadores), y de poder crear nuevos tipos conexión (servidor), el otro solicita una
que se comporten como tipos conexión (cliente). Una vez que los dos
fundamentales. sockets estén conectados, se pueden utilizar
para transmitir datos en ambas direcciones.
El nombre C++ fue propuesto por Rick
Mascitti en el año 1983, cuando el lenguaje Hilos: E una característica que permite a una
fue utilizado por primera vez fuera de un aplicación realizar varias tareas a la vez
laboratorio científico. Antes se había usado (concurrentemente). Los distintos hilos de
el nombre "C con clases". En C++, la ejecución comparten una serie de recursos
expresión "C++" significa "incremento de C" y tales como el espacio de memoria, los
se refiere a que C++ es una extensión de C. archivos abiertos, situación de autenticación,
etc. Esta técnica permite simplificar el diseño
OpenGL: OpenGL (Open Graphics Library) es
de una aplicación que debe llevar a cabo
una especificación estándar que define una
distintas funciones simultáneamente.
API multilenguaje y multiplataforma para
Un hilo es básicamente una tarea que puede crear el socket, asignar el puerto,
ser ejecutada en paralelo con otra tarea. ligar una dirección al socket (bind) y
estar a la espera de un cliente (listen)
Los hilos de ejecución que comparten los para luego aceptarla (connect).
mismos recursos, sumados a estos recursos,
Clase socket_c: aquí se implementa
son en conjunto conocidos como un proceso.
el socket stream TCP para el cliente.
El hecho de que los hilos de ejecución de un
Esta clase se encarga de crear el
mismo proceso compartan los recursos hace
socket, asignar el puerto y
que cualquiera de estos hilos pueda
conectarse con el servidor.
modificar éstos. Cuando un hilo modifica un
dato en la memoria, los otros hilos acceden a Existen también funciones para el
ese dato modificado inmediatamente. movimiento de las barras y de la bola en el
juego. OpenGL proporciona funciones para
Lo que es propio de cada hilo es el contador
detectar la pulsación de las teclas, es decir
de programa, la pila de ejecución y el estado
que tecla ha sido pulsada y soltada.
de la CPU (incluyendo el valor de los
registros). Las teclas que usamos para el juego son las
flechas (arriba y abajo) para mover las barras
El proceso sigue en ejecución mientras al
y Enter para comenzar el juego.
menos uno de sus hilos de ejecución siga
activo. Cuando el proceso finaliza, todos sus Cada vez que se presiona y suelta Enter se
hilos de ejecución también han terminado. llama a la función Teclas y TeclasUp, cuya
Así mismo en el momento en el que todos función es transmitir de una PC a otra una
los hilos de ejecución finalizan, el proceso no señal de que ha sido presionada y que la bola
existe más y todos sus recursos son debe empezar a moverse.
liberados.
El cálculo del movimiento de la bola se hace
Desarrollo de la Aplicación: en el servidor y es enviado al cliente por
medio del socket usando la función send.
Para este juego se ha implementado 5 clases:
Tanto servidor como cliente conectan con un
Clase Barra: en esta se implementa hilo de recepción (en la función Recibiendo)
el prototipo de la barra que será que dependiendo del caso realizara las
dibujada en la pantalla del juego. acciones respectivas.
Clase Bola: en esta se implementa el
prototipo de la bola que será Proceso del Juego:
dibujada en la pantalla del juego.
Primero se corre el servidor y este espera
Clase Marcador: en esta se
hasta que el cliente se conecta:
implementa el prototipo del
marcador que será dibujada en la
pantalla del juego.
Clase socket_s: aquí se implementa
el socket stream TCP para el
servidor. Esta clase se encarga de
Luego se corre el cliente. Una vez que el El funcionamiento del juego depende
cliente se conecta recién aparece la pantalla del tráfico de la red, ya que se envían
del juego en ambas PC’s. varios parámetros de movimiento.
El juego realizado funciona en
tiempo real, es decir el mismo
movimiento se ve en ambas PC’s.

Referencias:

http://es.wikipedia.org/wiki/Pong
http://es.wikipedia.org/wiki/C%2B%
2B
http://es.wikipedia.org/wiki/OpenGL
http://www.angelfire.com/trek/stor
wald/Sockets.pdf
Cuando falla un jugador cambia el marcador:
http://es.wikipedia.org/wiki/Hilo_de
_ejecuci%C3%B3n
Bjarne Stroustrup. El Lenguaje de
Programación C++. Editorial: Pearson
– España, España 2002. 1ª Edición.
1056 páginas.
Jugando :)

Conclusiones:

El juego puede ser mejorado ya que


no tiene in, es decir que no hay un
marcador máximo para que termine.
El teleprocesamiento es local, es
decir esta limitado a un cable que
conecte las dos PC’s.