Cada jugador debe esperar un turno de lista al azar

Hola. Espero me puedan ayudar con mi juego. No quería pedir ayuda para ver si aprendía un poco y lo solucionaba pero ya no doy, espero no pedir demasiado.
Anteriormente he pedido ayuda para hacer un juego tipo mesa de Pool, aunque he pensado en un tipo de modificación que vendría bien. La temática es la siguiente:
Son 4 jugadores, cada jugador tira por turnos, uno de un equipo y después el otro. La cosa acá es que he logrado que en una variable que se llama tiro_j1 (correspondiente al jugador 1) tire sólo una vez, pero no consigo hacer que se quite la flecha de dirección y que se quite el efecto (que me he copiado de otro usuario aquí mismo) de dirección de rebote ya que se supone ha terminado su tiro; también tengo una lista que ordena los tiros al azar para saber el orden de los jugadores.
Ojalá me puedan ayudar a que cada que un jugador tira, se quite la mira y el tiro y cámara pase al siguiente jugador en la lista que se escogió al azar.
Les dejo el archivo del juego y les agradezco mucho. :slight_smile: Saludos.

https://www.mediafire.com/file/9amtkony39ng7r8/Project_Pool.pilas/file

Hola @GDPH, ¿todos los jugadores cuando tiran le pegan a la bola blanca?, ¿o cada jugador tira una bola de distinto color?, me confunden un poco los nombres de los actores…

Hola. La idea es capturar la bandera del otro contrincante. Cada jugador puede golpear a los otros tres jugadores. La idea es hacer un mapa para pasar obstáculos e impedir que los otros jugadores tomen el objetivo, pero de momento el problema a resolver es el turno y posibilidad de tiro por cada jugador :slight_smile:

Ah oki, creo que ahora entendí bien…

Se me ocurre una forma de implementar el tema de los turnos, hice dos variables: una almacena qué jugador tiene turno y otra simplemente sirve para indicar si hay al menos uno de los jugadores en movimiento:

2021-01-10 n8sqm

Estas dos variables están en el código del proyecto, así las pueden acceder todos los actores:

class Proyecto {

  turno_jugador: number;
  bola_en_movimiento: boolean;

  iniciar() {
    this.turno_jugador = 1;
    this.bola_en_movimiento = false;
  }
}

Ahora, para que la flecha desaparezca y vuelva a aparecer usé esas variables. Si la variable “bola_en_movimiento” está en false, eso quiere decir que algún jugador debe lanzar, así que la flecha queda visible.Si en cambio la variable “bola_en_movimiento” está en true la flecha desaparece.

Este es el código de la flecha

actualizar() {

    if (this.proyecto.bola_en_movimiento) {
      this.transparencia = 100;
    } else {
      this.transparencia = 0;
    }

    /// más código

Luego, para que la flecha “salte” de un jugador a otro, hice que el código del método actualizar lea la variable “turno_jugador” y con eso cambie de actor principal:

    let bola = null;

    if (this.proyecto.turno_jugador === 1) {
      bola = this.pilas.obtener_actor_por_nombre("j1");
    }

    if (this.proyecto.turno_jugador === 2) {
      bola = this.pilas.obtener_actor_por_nombre("j2");
    }

    if (this.proyecto.turno_jugador === 3) {
      bola = this.pilas.obtener_actor_por_nombre("j3");
    }

    if (this.proyecto.turno_jugador === 4) {
      bola = this.pilas.obtener_actor_por_nombre("j4");
    }

Después, para hacer que los jugadores puedan ser controlados, copié el código del jugador 1 y lo llevé al jugador 2, 3 y 4. Lo único diferente en cada código es esta linea que indica a qué jugador corresponde el código:

Es decir, el jugador 2 tiene un código que dice this.soy_jugador = 2 y así con el jugador 3 y 4…

y por último, el turno de cada jugador lo hice en el código de la escena. Básicamente la escena se encarga de mantener las variable bola_en_movimiento y turno_jugador con el valor sincronizado. Si miras el código de la escena vas a notar que todo el tiempo está mirando la velocidad de los actores para saber si se mueven y va incrementando la variable turno_jugador para ir distribuyendo los turnos. La escena es como el árbitro del juego en este caso.

Te paso el código con estos cambios aplicados:

https://app.pilas-engine.com.ar/#/proyecto/a3ccf453-32b9-49a3-9dda-db72185ba8d0

¡Ojalá te sirva para continuar con tu juego!, cualquier cosa avisame.

¡Abrazo!

1 Like

Justo eso, eres un capo. Te agradezco mucho :wink: Saludos

Hola de nuevo, Hugo. Sólo para no abrir tema nuevo; tengo una falla al seguir la cámara en turno.
El error me da en la línea 23 del código de ‘tablero’. Estoy buscando que la cámara siga la bola en movimiento pero creo que no llamo bien al actor.

https://app.pilas-engine.com.ar/#/proyecto/1c8d8db8-f2c2-42c7-9e97-793d91d055e0

Hola @GDPH!!!, sí, ahí vi. Para llamar al actor podes usar la función obtener_actor_por_nombre.

Ahí cambié un poco el código y logré hacer que la cámara siga al jugador con turno, tuve que agregar algo de código para que tenga en cuenta la variable bola_en_movimiento. Mirá el método turno_en_juego del tablero:

https://app.pilas-engine.com.ar/#/proyecto/121ab212-f395-4a24-8b64-deebed0aeeb5

Por cierto, ¡Está quedando muy bueno eh!

1 Like