Un juego de guerra

Hola @hugoruscitti saludos debes de reconocerme ya me has dado muchas ideas y consejos me llamo Víctor Rico. Queria preguntarte si se puedes hacer una juego asi, mi pregunta es cómo hacer que muera el personaje los soldados no giran al enemigo siempre disparan al frente. Saludos

1 Like

conozco el juego y creo es totalmente posible hacerlo usando estados y automatas para programar a los soldaditos a que avancen y disparen si ven a soldados enemigos usando la función distancia_entre_actores.
Si la única duda es como hacer que mueran, se podría hacer de manera similar al ejemplo de la nave_contra_aliens: Un solado dispara, creando el actor bala y si la bala choca contra un soldado que este se elimine reproduciendo una animación.

¡Hola @VictorRico !, coincido con lo que comenta @lukeitor, una forma de implementar el juego es haciendo que cada soldado funcione como un autómata. Ahora bien, ¿qué es un autómata?, básicamente es una técnica que utilizamos en pilas para poder hacer que un personaje pueda realizar varias acciones, pero una sola a la vez.

Una buena forma de comenzar a usar autómatas es identificar “qué” acciones o estados puede
tener nuestro personaje primero.

Por ejemplo, el soldado de tu juego podría estar haciendo alguna de estas 4 cosas:

Luego, te conviene identificar bajo qué acciones el personaje va a tener que realizar cambios entre una acción y otra. Aquí depende mucho del juego, pero a mí se me ocurrió que el personaje podría aparecer parado, sin nada que hacer, y que ante la orden de avanzar comience a correr. Luego, si identifica un zombie comienza a disparar:

De esta forma, se podría decir que el soldado (o protagonista) va a parecer moverse por sí solo, y dependiendo de las “señales” que reciba del entorno como “avanzar”, “está frente a un zombie” o “lo toca un zombie” va a reaccionar y mostrar una acción nueva.

Te paso un ejemplo que armé siguiendo esta idea, el código me quedó un poco más complejo
de lo que me imaginaba al principio, pero resulta que cuando empecé a hacerlo me entusiasmé
con los sonidos, las animaciones, los zombies … y así me quedó bastante código. Si notas
que es muy complicado no te preocupes, escribinos e intentaré hacer una versión más sencilla o
te lo separo en ejemplos más pequeños. Avisame cualquier cosa

https://app.pilas-engine.com.ar/#/proyecto/b6d6ac0b-65f1-4911-b935-b93a71e2e9a1

Ah, hace un tiempo grabé un video mostrando cómo se utilizan autómatas en pilas, si no viste el video te lo super recomiendo, porque te va a servir para modificar el código que te pasé:

Por cierto, no conseguí gráficos de soldados como los que nos pasaste, pero me encontré unos gráficos gratuitos muy buenos aquí: https://chasersgaming.itch.io/

¡Abrazo!

1 Like

Gracias por la ideas @hugoruscitti y tuyas @lukeitor, y Hugo gracias por tu tiempo y por intentar en hacer un ejemplo para mi

Jeje @hugoruscitti, una pregunta tú hiciste esos personajes, te quedaron fueron fino vale

1 Like

Jeje @hugoruscitti, dos pregunta. 1- tú hiciste esos personaje te quedaron fino, y la 2- como se haría para eliminar el cuerpo del protagonista y del zombie caido.

Hola @VictorRico!!!, jeje, los gráficos no los hice yo, me encantaría saber dibujar pixelart… algún día me voy a poner a aprender a dibujar, hace rato que tengo ganas de dedicarle tiempo a eso…

Los gráficos los encontré en esta página https://chasersgaming.itch.io/, por lo que ví los hace un ilustrador llamado chasersgaming y los publica de forma gratuita, hasta tiene una campaña en patreon para recibir donaciones.

Ah, y sobre cómo eliminar los cuerpos de los enemigos hay varias formas. Me imagino que lo que te gustaría es que el cuerpo desapareciera luego de unos segundos ¿no?. Si es así, lo que tendrías que hacer es editar el código del actor caído, por ejemplo del zombie, y poner este código dentro de la función “iniciar”:

Y lo mismo podrías agregar para que desaparezca el actor del protagonista en el suelo. Y si quieres que el cuerpo desaparezca más rápido tendrías que cambiar el tiempo en segundos de 3 y 5 por 1 y 2 por ejemplo.

Yo hice la prueba y me quedó así:

2020-11-06 g2fq72

Otra opción, es que ni siquiera se muestre al actor acostado en el suelo. Es decir, que cuando el zombie muere desaparezca inmediatamente. Para eso lo que tendrías que hacer es seleccionar al actor zombie y eliminar esta linea de código:

y algo parecido para el protagonista, habría que eliminar esta linea de código:

¡Avisanos cualquier cosa! ¡y gracias por tus palabras! :slight_smile:

1 Like

Gracias @hugoruscitti

@hugoruscitti quería preguntarte si hay una forma de luego de crear los personajes uno pueda presionar un botón y hacer que ellos hagan una fila y columnas, 5 persona.5 atras de ellos y así pero que ordene

@hugoruscitti no sé si te acuerda de mí otra consulta, que el ejemplo colocaste unas ranas me pareció bueno, eso va con este mismo juego donde me ayudaste la idea era que estos personajes lanzen granadas

Hola @VictorRico!! , no entendí esto último… ¿cómo sería?

@hugoruscitti es que le ordena a los personajes creado obedecer una orden que le de, hagan una fila hagan una columna, hagan una pirámide y así

Debe ver orden por ejemplo el último se debe detener si el de adelante de detuvo y asi, y si se puede hacer unos botones de ordenes caminar, detener atacar, retirada

Hola, puedes hacer que se muevan desde un botón creando variables booleanas desde el proyecto, por ejemplo una variable

caminar: boolean = false

y desde un botón cambiar el valor a true, así podrias hacer que si la variable es true, los soldados caminen, si es false no se muevan. Y así con todas las ordenes.

actualizar() {
   if(proyecto.caminar == true) {
      this.estado = "caminar";
   }
   else {
      ths.estado = "esconder";
   }
}

Donde el estado de autómata caminar del soldado hace que este avance a la siguiente trinchera y dispare si hay alguien delante.
Te recomiendo leer el manual dónde dice código del proyecto, ahí cuenta cómo hacer variables que puedes usar durante todo el juego.

Otra forma es usar mensajes globales, cuando haces click en el boton este envie el mensaje global caminar y los soldados cuando reciben el mensaje cambien al estado de autómata caminar. Me parece más eficiente usar variables, así sería más sencillo hacer varios niveles.

Espero haberte ayudado