Está en la página 1de 6

PROGRAMACIN DE SISTEMAS PARA CONTROL DE PROCESOS

Documentacin para el programa : TENIS

Jos Mara de la Maza Borrego DNI : 74846195 D

ANTEPROYECTO TENIS Objetivo del juego El juego consiste en hacer pasar una pelota los lmites defendidos por el contrario golpeando sta y aprovechando las diferentes direcciones que puede tomar dependiendo de cmo se golpee y de los rebotes con las delimitaciones del campo. Estructura del juego Representaremos las raquetas a partir de rectngulos rellenos; delimitaremos el campo y la pelota ser una pequea esfera. Caractersticas del juego 1. Posibilidad de jugar un jugador , modo entrenamiento. 2. Si juegan 2 jugadores se jugara contra el ordenador. 3. Diferentes niveles de juego en cuanto a dificultad de batir al ordenador y rapidez de juego. 4. Seleccin de jugar con teclado o ratn. 5. Rebote de la pelota con los limites del campo, el ngulo de entrada de la pelota ser igual que el de salida. 6. Dependiendo de la zona con que se golpee la pelota con la raqueta tomara una direccin u otra, es decir, no ser lo mismo que rebote en un extremo que lo haga en el centro. 7. Posibilidad de salirse durante el juego.

IDEAS PRINCIPALES La idea del programa realizado es simular el mtico juego del tenis de los tiempos del Spectrum y poder controlarlo mediante el teclado y el ratn indistintamente que sea el primer jugador o el segundo. A parte de la idea principal hemos decidido implementar el juego frontn para un solo jugador pudiendo controlar la barra mediante el teclado o el ratn, segn como se quiera, en el cual la velocidad de juego se ir incrementar segn vaya transcurriendo el tiempo en el que mantengamos la pelota. Hemos incluido la opcin de seleccin de nivel de juego siendo sta comn para ambos juegos, en caso de la no seleccin al comienzo del juego se seleccionar el nivel medio por omisin. Por otro lado, tenemos la posibilidad de introducir los nombres de los jugadores; si no introdujramos ningn nombre los identificara como jugador 1 y/o jugador 2 segn el modo de juego.

1.

CONSIDERACIONES INDISPENSABLES Tipos de control : teclado y ratn

La dificultad del programa estaba en querer minimizar las lneas de instruccin para los tipos de control : el ratn y el teclado; para ello hemos hecho dos funciones independientes, en cada una se seleccionar el control ,en el caso del modo jugador 1 vs jugador 2 , de cada jugador independientemente, por otro lado otra funcin gestionar que slo un tipo de control puede ser utilizado por un solo jugador ( Controla_jugadores ); en la funcin del juego ( Jugador_vs_Oponente ) tendremos dos funciones indistintas que controlaran el movimiento de la barra para cada jugador dependiendo del tipo de control seleccionado ( Mueve_raqueta_jugador y Mueve_raqueta_jugador2), cada una de estas lleva el control de los tipos de control. Por otro lado, si se ha seleccionado el modo vs Ordenador dentro de la opcin Contra otro jugador controlaremos el movimiento de la raqueta del ordenador ( Mueve_raqueta_ordenador ) donde se controla el jugador 2, es decir, en la funcin del juego ( Jugador_vs_Oponente) segn se haya seleccionado nuestro oponente ser el jugador 2 o el ordenador .

Con lo cual tendrn un especial inters las funciones :


void Mueve_raqueta_jugador ( unsigned int tipo_control , unsigned char *t, float xpaleta , float *ypaleta , float inc ) { switch ( tipo_control ) { case 1: Mueve_raqueta_jugador_teclado ( &(*t), xpaleta, &(*ypaleta), inc,1); break; case 2 : Mueve_raqueta_jugador_raton1 ( &(*t), &xpaleta , &(*ypaleta) ); Borra_zona_juego (1,4,8,28,0); setfillstyle (1,15); bar ( xpaleta , *ypaleta , xpaleta + 10 , *ypaleta + 60); break; } } void Mueve_raqueta_jugador2 ( unsigned int tipo_control, unsigned char *t, float xpaleta2, float *ypaleta2, float inc2) { if ( tipo_control == 1) { Mueve_raqueta_jugador_raton2 ( &(*ypaleta2)); Borra_zona_juego ( 71 , 4 , 78 , 28 , 0); setfillstyle (1,15); bar ( xpaleta2 , *ypaleta2 , xpaleta2 + 10 , *ypaleta2 + 60); } else if ( tipo_control == 2) Mueve_raqueta_jugador_teclado (&(*t), xpaleta2,&(*ypaleta2), inc2,2) }

Es obvio que cuando nos referiremos al teclado como tipo de control las teclas de control sern las de direccin.

En ambas funciones, segn se haya seleccionado, se leern las teclas pulsadas o mostrar el movimiento del ratn para cada jugador. Dentro de ellas distinguimos dos funciones muy parecidas que consisten en leer el movimiento del ratn, la diferencia est en el que si tenemos la posibilidad de salirnos del juego pulsando ESC y estamos jugando en modo 2 jugadores nos basta con que uno tenga la opcin de leer teclado, aquella que tenga esa opcin (Mueve_raqueta_jugador_raton1 ) la utilizaremos para el modo frontn ya que necesitaremos la opcin salirse del juego. 2. Rebote de la pelota Para que la pelota rebote tendremos que condicionar el movimiento de sta y hacer que se mueva en los rangos permitidos, a lo que queremos llegar es a explicar como se mueve y qu concepto tenemos en cuenta a la hora de hacer que rebote. El movimiento se har dando unas coordenadas determinadas a la pelota ( xbola , ybola ) y a partir de aqu ir dando unos valores lineales dentro de los rangos de movimiento, xbola = xbola + (radio * cos (angulo)); ybola = ybola - (radio * sin (angulo)); p.ej. : si nuestro origen de coordenadas es la parte superior izquierda y nuestro ngulo es 0 se desplazar horizontalmente hacia la derecha, si en cambio, el ngulo es de 90 se desplazar hacia arriba. Cuando se sale de los rangos cambiaremos el ngulo, si golpea contra los limites horizontales el ngulo de salida, , ser igual que el de entrada, para ello , ngulo = ngulo + 360, como las funciones trigonomtricas funcionan con radianes, ngulo = ngulo + 6.28318; si se trata de los lmites verticales para que el ngulo de salida, , sea igual que el de entrada se tiene que cumplir, ngulo = ngulo + 180, o en radianes, ngulo = ngulo + 3.14159. ( Fig. 1 )

Si el rebote se produce con las raquetas la pelota tomar un ngulo determinado, ste depende de la zona de la raqueta con que se golpee.

Si se golpea entre [ 0, 10 ) el ngulo de rebote es de [ 10, 20 ) [ 20, 25 ) [ 25, 30 ) ( 30, 35 ] ( 35, 40 ] ( 40, 50 ] ( 50, 60 ] Evidentemente pasaremos los ngulos a radianes.

30 15 10 5 355 350 345 330

También podría gustarte