Establecer el comportamiento entre los jugadores y la pelota

Utilizando el editor de reglas, establecerás las reglas que controlan el comportamiento entre los jugadores y la pelota.

DETERMINAR LA POSICIÓN DEL JUGADOR DE LA DERECHA EN FUNCIÓN DE LA COORDENADA “Y” DEL RATÓN

Crea una regla y entra en el editor de reglas del jugador “pong_j”. Llama “Mover jugador” a la regla. Al jugador de la derecha se le va a asociar un movimiento rectilíneo vertical, que se ejecutará a la vez que se mueva el ratón intentando contactar con la pelota.

  • Arrastra el botón de acción “Changeaccion_change al grafo debajo del círculo verde. Observa que la acción se realizará siempre y no como resultado de evaluar una condición.
  • Configura el botón de acción “Change” indicando en “property” el atributo que se quiere cambiar. Como lo que se quiere es establecer un nuevo valor de la coordenada “y” del jugador en función de la coordenada “y” del ratón, rellena esta propiedad haciendo clic sobre el botón funcion4 y seleccionando paso a paso el atributo a cambiar (Me>geometry>Position>y). En la casilla “value” introducirás el nuevo valor por el que se va a sustituir el atributo especificado en “property”. Selecciona el valor de la coordenada “y” que tiene el ratón en el juego en ese momento utilizando el botón funcion4 y seleccionando paso a paso el nuevo atributo (Game>mousey).

change_gaem_mousey

DETERMINAR LA POSICIÓN DEL JUGADOR DE LA IZQUIERDA EN FUNCIÓN DE LA COORDENADA “Y” DE LA PELOTA, INTENTANDO CONTACTAR CON ELLA PARA QUE REBOTE EN EL JUGADOR

Crea una regla para el actor “pong_a” y ponle el nombre “Movimiento pong_a”.

  • Arrastra el botón de acción “Translate toaccion_translate_to , debajo del círculo verde que indica el comienzo de la regla. Configúralo como se muestra en la figura.

traslate_to

El actor “pong_a” siempre estará en la posición “x” en la que se ha creado.  Como  el jugador “pong_a”deberá seguir la posición en y” de la pelota, para establecer el valor del atributo posY” utiliza el botón funcion4 y selecciona paso a paso el nuevo atributo (Cast>pelota>geometry>Position>y). Se irá acercando a ella moviéndose 200 pixeles cada vez.

ESTABLECER EL COMPORTAMIENTO DE LA PELOTA

Crearás dos reglas para regular el comportamiento de la pelota. La primera establecerá que si la pelota está parada, se ponga en movimiento con una fuerza y un sentido de saque determinados, y la segunda establecerá el comportamiento de la pelota en función del jugador con el que choque.

¡Recuerda!!! Cuando estableciste las propiedades del actor “pelota” le añadiste dos nuevas variables, “enJuego” y “ganaJugador, estableciendo que la variable “enJuego” a 0 significa que la pelota está parada y que la variable “ganaJugador” a 0 que el jugador de la derecha “pong_j” ha perdido.

Comportamiento de la pelota cuando está parada

Crea una regla en el actor “pelota” y llámala “Saque de pelota”.

  • Arrastra al comienzo de la regla, el botón de condición “comparecondicion_compare, que compara dos operandos.
  • Abre la ventana que permite establecer esta condición. En la primera casilla, selecciona la variable “enJuego” creada especialmente para este actor (Me>custom>enJuego), y compara si esta variable es igual al valor 0 introducido en la segunda casilla.

¡Recuerda!!! Los atributos nuevos creados, aparecerán siempre en la categoría “custom” del actor.

compare_pelota2

Si la variable “enJuego” no es igual a 0 (salida izquierda de la condición), no se hace nada, puesto que esto significa que la pelota está en movimiento. Si la variable es igual a 0  (salida derecha), entonces la pelota estará parada y habrá que hacer un saque. Para ello, habrá que establecer la fuerza y sentido del saque en función del jugador que haya ganado el punto anterior.

  • Arrastra de nuevo el botón de condición “Comparecondicion_compare a la salida derecha (la pelota estará parada) de la primera condición “Compare”.
  • Abre la ventana que permite establecer esta condición. En la primera casilla, selecciona la variable “ganaJugador” creada especialmente para este actor (Me>custom>ganaJugador), y compara si esta variable es igual al valor 1 introducido en la segunda casilla.

compare_pelota3

Si la variable “ganaJugador” no es igual a 1 (salida izquierda de la condición), el jugador “pong_j” ha perdido el último punto y la pelota sale hacia el otro jugador, “pong_a”.

  • Para establecer esta acción, arrastra a esta salida el botón de acción “Apply forceaccion_apply_force  y configúralo como muestra la siguiente figura.

apply_force_pelota1

Si la variable “ganaJugador” es igual a 1 (salida derecha de la condición), el jugador “pong_j” ha ganado el último punto y la pelota debería salir hacia él con un ángulo de -15.

  • Para establecer esta acción, arrastra a esta salida el botón de acción “Apply force”  accion_apply_force y configúralo como muestra la siguiente figura.

apply_force_pelota2

  • Cuando hayas establecido la fuerza y el ángulo con que se hace el saque, arrastra el botón de acción “Changeaccion_change a la salida común de las dos acciones “Change” para cambiar el valor de  la variable “enJuego”  (Me>custom>enJuego) a 1, y así indicar que la pelota esta en juego.

change_pelota1

Comportamiento de la pelota en función del actor de la escena con el que choque

Crea una segunda regla para el actor “pelota”. Identifica esta regla con el nombre “Comportamiento pelota”. Esta regla constará de tres condiciones.

La primera condición comprueba si el actor “pelota” choca contra el actor “pared_derecha”.

  • Una vez dentro del editor de reglas, arrastra el botón de condición “Collidescondicion_collides debajo del botón verde de comienzo de la regla y configúralo.

collides_pelota1

Si la condición se cumple, es decir, si la pelota choca contra la pared derecha, el actor  de la derecha “pong_j” no le ha dado a la pelota y por lo tanto el punto se lo lleva el jugador  de la izquerda “pong_a”. En este caso, habrá que incrementar en 1 el contador de puntos “marcador_a”.

  • Arrastra el botón de acción “Changeaccion_change a la salida derecha de esta condición y establece sus valores.

change_marcador_a1

  • Utiliza el botón  funcion4 para rellenar la casilla “property”. Selecciona (Cast>marcador_a>custom>punto

¡Recuerda!!! La opción “Cast” significa que la propiedad que vas a modificar no es del actor propietario de la regla.

NOTA: La opción “Cast” significa que la propiedad que vas a modificar no es del actor propietario de la regla.

  • Para rellenar la casilla “value”, procede del mismo modo que has hecho con la casilla “property” pero súmale una unidad a los puntos que ya tenía el atributo “marcador_a” (marcador_a.puntos+1).

Además de actualizar el “marcador_a”  si la condición se ha cumplido, deberás indicar de alguna manera que el jugador “pong_j” ha perdido.

  • Arrastra de nuevo el botón de acción “Changeaccion_change a continuación del botón de acción “Change” que acabas de programar y establece sus características como indica la siguiente figura.

change_ganajugador

Ya has establecido la primera condición de esta regla, ahora añadirás otra. Si el actor “pelota”no ha chocado con la pared derecha, habrá que comprobar si ha chocado con la pared izquierda. Esta segunda condición, la incluirás en la salida izquierda de la  primera condición, es decir, cuando la condición no se ha cumplido.

  • Arrastra el botón de condición “Collidescondicion_collides a la salida izquierda de la condición “Collides” que acabas de evaluar y configúralo.

collides_pared_izquierda

Si esta condición se cumple, es decir, la pelota choca contra la pared izquierda, significa que el jugador de la izquierda “pong_a” no le ha dado a la pelota y por lo tanto el punto se lo lleva el jugador de la derecha “pong_j”. Tendrás, por tanto, que incrementar en 1 el contador de puntos  “marcador_j”.

  • Arrastra el botón de acción “Changeaccion_change a la salida derecha de esta segunda  condición y establece los valores de “Change”.
  • Utiliza el botón  funcion4 para rellenar la casilla “property”. Selecciona (Cast>marcador_j>custom>puntos)

change_marcador_j1

Además de acuatizar el “marcador_j”  si la condición se ha cumplido, deberás indicar que el jugador de la derecha “pong_j” ha ganado. Esto lo harás poniendo su atributo “ganaJugador” a 1.

  • Arrastra de nuevo el botón de acción “Changeaccion_change a continuación del que acabas de programar y establece sus características como indica la siguiente figura.

change_marcador_j2

Si la pelota no ha chocado con ninguna de estas dos paredes, no habrá que hacer nada y el juego seguirá. Si por el contrario, ha chocado con alguna de ellas, habrá que inicializar una serie de atributos necesarios antes de que se produzca un nuevo saque y comience la disputa por un nuevo punto. Esto se establecerá en la tercera condición de esta regla.

Como las inicializaciones son las mismas tanto si el choque se ha realizado con la pared derecha como con la pared izquierda, sería conveniente asignar a estos dos actores una misma etiqueta para evitar así tener que duplicar en las dos ramas la información.

  • Añade un nuevo “Tag” a los que ya tienes, llámalo por ejemplo, “pared”. Asóciaselo tanto a la pared derecha como a la pared izquierda, que a partir de ahora tendrán dos etiquetas asociadas cada una de ellas.
  • Vuelve a entrar en la regla que estabas creando y arrastra el botón de condición  “Collidescondicion_collides a la salida común de las dos condiciones “Collides” anteriores, de modo que pase por esta condición siempre como se muestra en la siguiente figura.

tag_grupo

  • Selecciona “pared” en la casilla “tag” de la condición “collides”. Como esta etiqueta está asignada a la pared derecha y a la izquierda, con una sola condición “collides” es suficiente.
  • Añade las cinco inicializaciones necesarias en caso de que la condición se cumpla, es decir, en caso de que la pelota choque o con la pared derecha o con la izquierda. Para establecerlas  tendrás que arrastrar cinco veces el botón de acción “Change” a la salida derecha de la condición “collides” tal y como se puede ver en la figura anterior.

Las variables que se establecen son las siguientes:

Inicialización 1: establece la velocidad inicial en “x” con la que debe salir la pelota, ya que debido a la fuerza que se le ha aplicado con la acción “Apply force“, ésta se ha incrementado.

  • Utiliza el botón  funcion4 para rellenar la casilla “property”. Selecciona (Me>physics>Movement>velocity X).

inicializacion_1

Inicialización 2: establece la velocidad inicial en “y” con la que debe salir la pelota, ya que debido a la fuerza que se le ha aplicado con la acción “Apply force“, ésta se ha incrementado.

  • Utiliza el botón  funcion4 para rellenar la casilla “property”. Selecciona (Me>physics>Movement>velocity Y).

inicializacion_2

Inicialización 3: establece el valor del atributo “enJuego” a 0, para indicar que la pelota no esta en juego.

  • Utiliza el botón  funcion4 para rellenar la casilla “property”. Selecciona (Me>custom>enJuego).

inicializacion_3

Inicialización 4: establece el valor de la coordenada “x” desde la que se hará el saque.

  • Utiliza el botón  funcion4 para rellenar la casilla “property”. Selecciona (Me>geometry>Position>x).

inicializacion_4

Inicialización 5: establece el valor de la coordenada “y” desde la que se hará el saque.

  • Utiliza el botón  funcion4 para rellenar la casilla “property”. Selecciona (Me>geometry>Position>y).

inicializacion_5

Con estas ultimas acciones, ya has terminado de configurar este sencillo pong. Si lo pruebas, verás como los jugadores a veces se salen de la escena, intenta corregir este error.  Seguro que lo haces bien.

Podrías también completar este pong estableciendo el final del juego una vez que ha transcurrido un tiempo determinado o cuando uno de los dos jugadores ha alcanzado un número determinado de puntos.

Ahora ya puedes probar el juego finalizado.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s