Máquina de Estados?

Post Reply
angelqa
Posts: 12
Joined: Sat Oct 09, 2021 12:13 pm
Has thanked: 5 times
Been thanked: 5 times

Máquina de Estados?

Post by angelqa »

hola,

¿alguien me recomienda algún ejemplo para cotillear cómo funciona la "máquina de Estados" con las clases?

En el manual no he sabido encontrar una explicación suficiente para echarlo a andar y creo que me vendrían bien para una cosa que estoy intentando hacer.

Gracias
User avatar
droman
Posts: 263
Joined: Mon Oct 04, 2021 9:09 am
Location: Leganés (Madrid)
Has thanked: 35 times
Been thanked: 80 times

Re: Máquina de Estados?

Post by droman »

Si abres la demo de SPACEMANBOW del FTP tienes, toooodo un ejemplo de como funcionan.

Aún así... una pequeña explicación en base a lo que yo he aprendido del ejemplo.

Dentro de una clase, puedes establecer ESTADOS de esta manera:

Code: Select all


state "logo1"
{
	//Todo lo que tenga que ver, por ejemplo, con mostrar un logo.
		
	alpha = IncreaseValue(alpha, 200, GetFTime() * 4.0f);
	manbow.SetColor(RGB(255-alpha, 255-alpha, 255-alpha));
	manbow.SetAlpha(alpha);
	if (alpha == 200)
	{
		_change("logo2");    
	}

}

state "logo2"
{

	//Aquí haces todo lo que tenga que hacer el logo, como antes.

}

Resumiendo, Declaras un estado con state "nombre" y lo llamas con _change("nombre")
La muerte, segura de su victoria nos da toda la vida de ventaja.
Las fotografías de los que viajan, son la cultura de los que se quedan.
angelqa
Posts: 12
Joined: Sat Oct 09, 2021 12:13 pm
Has thanked: 5 times
Been thanked: 5 times

Re: Máquina de Estados?

Post by angelqa »

Gracias Droman

He estado cotilleando la demo de spacemanbow del ftp y ya imagino por donde van los tiros :-)

Aunque me pierdo mucho con el código de esta demo, creo que con unos estados y unos timers (también echaba esto en falta) debería poder hacer lo que intento, muchas gracias
Javi
Posts: 29
Joined: Sat Jun 11, 2022 5:14 am
Been thanked: 10 times

Re: Máquina de Estados?

Post by Javi »

Code: Select all

		switch (_type)
		{
			case "enemy_yellowcar": _type = 0; break;
			case "enemy_buggy": _type = 1; break;
			case "enemy_torreta": _type = 2; break;
			case "enemy_ovni": _type = 3; break;
			case "enemy_pinkcars": _type = 4; break;
			case "item_weapon": _type = 5; break;
			case "enemy_furgoneta": _type = 6; break;
			case "enemy_drones": _type = 7; break;
			case "enemy_misil": _type = 8; break;
			case "enemy_mina": _type = 9; break;
			case "enemy_camion": _type = 10; break;
			case "enemy_boss": _type = 12; break;
			case "enemy_tanque": _type = 13; break;
		}

source : http://www.msxvr.es/doc/wiki/mdwiki.htm ... 77e64f3.md
User avatar
droman
Posts: 263
Joined: Mon Oct 04, 2021 9:09 am
Location: Leganés (Madrid)
Has thanked: 35 times
Been thanked: 80 times

Re: Máquina de Estados?

Post by droman »

No entiendo este código.... es un simple switch, pero no veo la relación con la máquina de estados.... ¿Podrías explicarlo, por favor?

Gracias!
La muerte, segura de su victoria nos da toda la vida de ventaja.
Las fotografías de los que viajan, son la cultura de los que se quedan.
Javi
Posts: 29
Joined: Sat Jun 11, 2022 5:14 am
Been thanked: 10 times

Re: Máquina de Estados?

Post by Javi »

A state machine commonly involve enum states and a switch case of every state.

Take a look of this example

https://www.tecbolivia.com/index.php/ar ... ado-finito

Code: Select all

enum eEstados { // Los estados se la MEF se definen en una enumeracion

DETENIDO,
YENDO_ARRIBA,
YENDO_ABAJO

} estado;

and

Code: Select all

   estado = DETENIDO;    // La MEF se inicializa en estado DETENIDO

   while (TRUE) {

     switch (estado) {

       case DETENIDO:{    // 
         // Verificar si se ha seleccionado un nuevo piso:
         piso_nuevo = seleccion_piso();    
         if (piso_nuevo > piso_actual)
           estado = YENDO_ARRIBA;
         else if (piso_nuevo < piso_actual)
           estado = YENDO_ABAJO;
       } break;

       case YENDO_ARRIBA:{
         piso_actual = comprobacion_piso();
         if (piso_nuevo == piso_actual)
           estado = DETENIDO;        
       } break;

       case YENDO_ABAJO:{
         piso_actual = comprobacion_piso();
         if (piso_nuevo == piso_actual)
           estado = DETENIDO;    
       } break;

     }

   }
User avatar
droman
Posts: 263
Joined: Mon Oct 04, 2021 9:09 am
Location: Leganés (Madrid)
Has thanked: 35 times
Been thanked: 80 times

Re: Máquina de Estados?

Post by droman »

Eso es correcto, pero en VR-Script no se hace de ese modo. Tienes una función específica, como te muestro en el mensaje superior.

Aún así, se podría hacer, pero es mucho más sencillo implementar el "change" de VR-Script.
La muerte, segura de su victoria nos da toda la vida de ventaja.
Las fotografías de los que viajan, son la cultura de los que se quedan.
Post Reply