状态机在RPG游戏中的应用举例
来源:互联网 发布:es7 js 注解功能 编辑:程序博客网 时间:2024/05/17 02:45
状态机分两种:
(1) Moore状态机: 输出只和当前所处状态有关,而与输入的内容无关。
(2) Mealy状态机:输出与当前所处状态和输入的内容均有关。
状态机要求必须有终节点,当到达综态时,状态机停止。
有限状态机 = 状态 + 事件 + 转换 + 动作
例如RPG中的城门:
状态:Opened,Closed,Unlocked,Locked
事件:openDoor,closeDoor,lockDoor,unlockDoor
转换:两个状态之间的变换;
动作:可以执行的原子操作。
State.java
package hello;public enum State {OPENED,CLOSED,LOCKED,UNLOCKED}
Event.java
public enum Event {open,close,lock,unlock}
FsmState.java
package hello;/** * 城门状态机 * @author henry * */public class FsmState {/** * 当前所处状态 */private State state;public FsmState() {this.state = State.OPENED;}public void enterOpened() {System.out.println("enterOpened");}public void enterLocked() {System.out.println("enterLocked");}public void enterUnlocked() {System.out.println("enterUnlocked");}public void enterClosed() {System.out.println("enterClosed");}/** * 处理事件 * @param e */public void processEvent(Event e) {State oldState = state;boolean pass = false;switch (state) {case CLOSED : {if (e == Event.open) {state = State.OPENED;pass = true;} else if (e == Event.lock) {state = State.LOCKED;pass = true;}} break;case UNLOCKED : {if (e == Event.lock) {state = State.LOCKED;pass = true;} else if (e == Event.open){state = State.OPENED;pass = true;}} break;case LOCKED : {if (e == Event.unlock) {state = State.UNLOCKED;pass = true;}} break;case OPENED : {if (e == Event.close) {state = State.CLOSED;pass = true;}} break;default : break;}if (oldState == state && !pass) {return;}switch (state) {case CLOSED : {enterClosed();} break;case UNLOCKED : {enterUnlocked();} break;case LOCKED : {enterLocked();} break;case OPENED : {enterOpened();} break;default : break;}}}
Test.java
package hello;public class Test {public static void main(String[] args) {FsmState doorState = new FsmState();doorState.processEvent(Event.close);doorState.processEvent(Event.lock);doorState.processEvent(Event.unlock);doorState.processEvent(Event.open);}}
输出结果:
enterClosedenterLockedenterUnlockedenterOpened
0 0
- 状态机在RPG游戏中的应用举例
- 深度优先搜索算法在RPG游戏迷宫中的应用
- RPG游戏状态机实现实例
- Unity3D 大型游戏 MOBA类手机游戏 状态机在游戏中的应用(18)
- RPG游戏主角状态机(Trigger触发器)
- 状态机思路在单片机程序设计中的应用
- 状态机思路在程序设计中的应用
- 状态机思路在单片机程序设计中的应用
- 状态机思路在单片机程序设计中的应用
- 状态机思路在程序设计中的应用
- 状态机思路在程序设计中的应用
- 状态机思路在程序设计中的应用
- 状态机思路在程序设计中的应用
- 状态机在类设计中的应用
- 状态机思路在程序设计中的应用
- 状态机思路在程序设计中的应用
- 状态机思路在程序设计中的应用
- 状态机思路在程序设计中的应用
- c++ 多线程 互斥量
- 使用spring-amqp发送消息及同步接收消息
- mfc获取窗口句柄
- 排队问题
- 【金阳光测试】Android自动化测试第一季第二讲--MonkeyRunner
- 状态机在RPG游戏中的应用举例
- JAVA基础加强:枚举(Enum)
- openfire导入eclipse之二Could not locate home 编译运行
- 使用spring-amqp发送消息及异步接收消息
- HDU 3265——Posters(线段树+面积并+矩形分割)
- background-size:cover与-webkit-background-size
- 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?
- Cocos2d-x触摸分发器原理
- JAVASE课程 第一章 第一讲JAVA概述及开发环境搭建