fsm c++ 예제

여기에 제시된 상태 머신을 사용하여 완전한 다중 스레드 예제는 “스레드가 있는 C++ 상태 머신” 문서를 참조하십시오. 기본에 중점을 두었기 때문에 토론을 단순한 비계층적 상태 컴퓨터로 제한했습니다. 그러나 모든 인수와 지침은 계층 적 상태 시스템 (HSM)에 똑같이 잘 적용됩니다. HSM과 관련된 코드 예제의 경우 “HSM(계층 상태 시스템 소개)”을 참조하십시오. STATE_MAP_ENTRY_ALL_EX 매크로에는 상태 작업, 가드 조건, 입력 작업 및 종료 작업에 대한 네 가지 인수가 해당 순서로 있습니다. 상태 작업은 필수이지만 다른 작업은 선택 사항입니다. 상태에 작업이 없는 경우 인수에 0을 사용합니다. 상태에 가드/진입/종료 옵션이 없는 경우 STATE_MAP_ENTRY_EX 매크로는 사용하지 않는 모든 옵션을 0으로 기본값으로 설정합니다. 아래 매크로 코드 조각은 문서의 후반부에서 제시된 고급 예제에 대한 것입니다. 다음 예제 그림에서는 x축에 20, y축에 2, z축에 -15, 세계 원점이 또는 0,0,0입니다. 그런 다음 카메라 오브젝트를 변환하는 데 사용되는 값인 카메라의 위치를 빼서 오브젝트를 매핑할 수 있으며, 이 경우 -20, -2, 15가 됩니다.

따라서 게임 오브젝트가 x축에서 10.5, y축의 1, z축에서 -20으로 시작하면 새로 변환된 좌표는 -9.5, -1, -5가 됩니다. 확장 상태 시스템의 명백한 장점은 기본(메모리 없는) FSM을 사용하면 기본 형식주의가 실제보다 훨씬 더 복잡한 문제에 적용할 수 있다는 것입니다. 예를 들어 시한 폭탄의 시간 제한 제한을 10초에서 60초로 연장하려면 메모리가 없는 FSM에 100개의 새 상태를 추가해야 하지만 확장 상태 머신을 전혀 복잡하게 만들지 않습니다(필요한 유일한 수정은 전환 시 테스트를 변경하는 것뿐입니다. UP)를 참조하십시오. 확장 상태 기계의 이러한 증가된 유연성은 가격과 함께 제공되지만, 확장 상태의 정성적 측면과 양적 측면 간의 복잡한 결합으로 인해 가격이 제공됩니다. 커플링은 확장된 상태 변수의 값에 따라 동적으로 평가되는 부울 식인 가드 조건(또는 단순히 가드)을 통해 발생합니다. 가드 조건은 true로 평가할 때만 작업 또는 전환을 사용하도록 설정하고 false로 평가할 때 비활성화하여 상태 시스템의 동작에 영향을 미칩니다. UML 표기암호기에서 가드는 해당 이벤트 바로 다음에 대괄호로 표시됩니다(예: TICK[시간 시간 ==0]). 대부분의 설계 자동화 도구는 내부적으로 상태 머신을 텍스트 형식으로 나타냅니다. 이러한 게시 된 표기법의 한 예는 Selic, et al., 실시간 개체 지향 모델링에서 설명 한 “ROOM 선형 형식”입니다.1 흥미롭게도 C /C ++ 스위치 및 break 문을 제외하고 ROOM 표기는 기본적으로 상태 처리기와 동일합니다. 메서드가 방금 설명되어 있습니다.