I have written the below code for basic implementation of state machine.
My code has two sets of state machines:
1st set of states:
Idle,Initialize, Setup, Action.
State action has substates:
Searching, FindEnemy, AttackEnemy, EnemyDead.
#include <stdio.h>
void InIdle(void);
void InInit(void);
void InSetup(void);
void InAction(void);
void InFindEnemy(void);
void InAttackEnemy(void);
void InEnemyDead(void);
typedef enum
{
Idle=0, Initialize, Setup, Action
} states;
states _state=Initialize;
/*Combat is substate of Action*/
typedef enum
{
Searching, FindEnemy, AttackEnemy, EnemyDead
} Combat;
Combat _combat=FindEnemy;
int main()
{
printf("in main");
printf("\nPrinting State %d",_state);
while(1)
switch(_state)
{
case Initialize:
InInit();
break;
case Setup:
InSetup();
break;
case Action:
InAction();
break;
printf("Ready again :)");
}
return 0;
}
void InInit()
{
printf("\nI am in Init");
_state=Setup;
}
void InSetup()
{
printf("\nI am in Setup");
_state=Action;
}
void InAction()
{
printf("\nI am in Action");
printf("\n**Substate %d",_combat);
switch(_combat)
{
case FindEnemy:
InFindEnemy();
break;
case AttackEnemy:
InAttackEnemy();
break;
case EnemyDead:
InEnemyDead();
break;
}
}
void InFindEnemy()
{
printf("\nInFindEnemy");
_combat=AttackEnemy;
}
void InAttackEnemy()
{
printf("\nIn AttackEnemy ");
_combat=EnemyDead;
}
void InEnemyDead()
{
printf("\nIn EnemyDead");
_combat=Searching;
_state=Idle;
}
When I execute the code, I see the following output:
$ ./test.exe in main Printing State 1 I am in Init I am in Setup I am in Action **Substate 1 InFindEnemy I am in Action **Substate 2 In AttackEnemy I am in Action **Substate 3
Basically I do not see prints that I have put in InEnemyDead() function
But if I modify the function:
void InEnemyDead()
{
printf("\nIn EnemyDead");
/*_combat=Searching;
_state=Idle;
*/
}
Basically I commented out _combat and _state.
Below is the output of the program:
$ ./test.exe in main Printing State 1 I am in Init I am in Setup I am in Action **Substate 1 InFindEnemy I am in Action **Substate 2 In AttackEnemy I am in Action **Substate 3 [B]In EnemyDead[/B] I am in Action **Substate 3 In EnemyDead I am in Action **Substate 3 In EnemyDead I am in Action **Substate 3 In EnemyDead I am in Action **Substate 3 In EnemyDead I am in Action **Substate 3 In EnemyDead
Please help!
Thanks,
V17


Sign In
Create Account

Back to top









