Anuncios

Bienvenidos sean a este post, hoy veremos otra seccion del diseño de un juego.

Anuncios

En el post anterior mencionamos que muchas acciones ocurren simultaneamente. Tomemos como ejemplo nuevamente al edificio, sin importar las acciones del jugador o que un lector detenga su accion porque esta siendo atacado, este seguira creando las unidades que este destinado a realizar. Si el enemigo lo ataca, este debe seguir con la misma tarea. Por lo tanto, debemos diseñar conductas concurrentes para muchos de los objetos en el juego. Y cual es una de las mejores maneras de lograr concurrencia? Mediante el uso de threads.

Anuncios

Una opcion que podemos implementar es la modificacion de la clase base de las unidades y edificios. Podemos agregar un metodo que sea redefinible para que sea ejecutado en un thread separado. Para ver como lo hariamos, tomemos a la interfaz IEdificio y la modificaremos de la siguiente manera:

class Edificio
{
public:
  virtual void ataque(const Unidad&) = 0;
  virtual void destruir() = 0;
  virtual void construir(Unidad*) = 0;
  virtual int get_puntos_vida() const = 0;

public:  
  void run() {
    std::jthread{Edificio::accion_fondo_, this};
  }

private:
  virtual void accion_fondo_() {
    // no o implementacion predeterminada de la clase base
  }
};
Anuncios
Anuncios

Primero le cambiamos el nombre porque dejo de ser una interfaz pero sigue con metodos virtuales puras. Aunque tambien agregamos un metodo para ejecutar un metodo en un thread mediante jthread, del cual hablamos en este post. El metodo que se ejecuta se encuentra en la misma clase pero en su parte privada. Esta al ser virtual la podemos redefinir en cualquier clase derivada de esta. Por esta razon, podemos definirla o simplemente dejarla en blanco y definirla con las clases herederas. Tomemos nuevamente el caso de los edificios, cuando se realice el llamado a construir este deriva mediante el metodo run al thread el calculo del tiempo de la construccion correspondiente. Este es un vistazo simple de como poder crear acciones concurrentes mediante un herramienta muy poderosa como son los threads, pero esto lo veremos mas profundamente un poco mas adelante.

Anuncios

En resumen, hoy hemos visto como es la teoria de acciones concurrentes, de que se tratan, asi como podemos habilitarlas, y como nos ayudan los threads en esta seccion. Espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50