-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.c
78 lines (61 loc) · 2.46 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "main_fsm.h"
// 도움말
void DisplayHelp()
{
system("clear");
printf(">>>>> 교육용 StateMachine 예제 <<<<<<<\r\n");
printf(">>>>> 3층까지 짐옮기기: <<<<<<<\r\n");
printf("--------------------------------------\r\n");
printf("사용법:\r\n");
printf("--------------------------------------\r\n");
printf("q : 올라가기 ");
printf("a : 내려가기 \r\n");
printf("r or R: 쉬어가기 s or S: 상태보기 \r\n");
printf("d or D: 상자놓기 ");
printf("g or G: 상자가지기 \r\n");
printf("--------------------------------------\r\n");
printf("아무키나 누르세요\r\n");
getchar();
}
int main()
{
int ch;
const int DIRECTION = 224;
const int UP_KEY = 'q';
const int DOWN_KEY = 'a';
//-------------------------------------------
// 상태머신 사용법(초기화)
// FSM 개체만큼 상태관리가 가능하다.
//-------------------------------------------
FSM_EVT e;
FSM f;
// StateMachine 초기화
InitStateMachine(
&f, // 초기화할 FSM 개체(개수만큼 생성 초기화해준다)
InitMainFSM(&f), // MainFSM 초기화함수(FSM 마다 만들어 준다) : 상태테이블 리턴
_MOVEMAN_MAX_EVT, // 이벤트 개수
_MOVEMAN_MAX_STATE // STATE 개수
);
DisplayHelp();
DisplayCurrent();
while ( (ch = getchar()) != 'E') {
if(ch == DIRECTION)
ch = getchar();
//-----------------------------------------------------------------------------
// 상태머신 이벤트 전달
if(ch == UP_KEY ){ e.EVT = _MOVEMAN_GO_UP; DoEvent(&f, e); }
if(ch == DOWN_KEY ){ e.EVT = _MOVEMAN_GO_DOWN; DoEvent(&f, e); }
if(ch == 'r' || ch == 'R'){ e.EVT = _MOVEMAN_REST; DoEvent(&f, e); }
if(ch == 'd' || ch == 'D'){ e.EVT = _MOVEMAN_DROP_BOX; DoEvent(&f, e); }
if(ch == 'g' || ch == 'G'){ e.EVT = _MOVEMAN_GET_BOX; DoEvent(&f, e); }
//-----------------------------------------------------------------------------
if(ch == '?' || ch == '?'){ DisplayHelp(); }
// UI에서 메뉴처리
DisplayCurrent();
// 상수 처리 하지 않고 임의의 값 처리
if( GetResult(f) == 100)
break;
}
//-------------------------------------------
return 0;
}