Sam*_*152 16 java state-machine
我目前正在学习java,并想知道如何以OO方式控制状态.我实现了一个Pong应用程序.如果我想要游戏和菜单等多个状态,并且这些状态中的每一个都必须执行start,stop和run我将如何实现这一点以及如何在这些状态之间切换.
我知道我可以简单地提出一个重要的转换声明但是实现这个的最佳方法是什么?
我希望能够在游戏状态下切换到菜单状态,反之亦然.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Pong extends Applet implements Runnable, KeyListener{
public void start ()
{
setSize(screen);
setFocusable(true);
Thread th = new Thread (this);
th.start ();
}
public void stop()
{
}
//Etc..
}
Run Code Online (Sandbox Code Playgroud)
Sea*_*oyd 32
您可以使用枚举模拟基本FSM(有限状态机):
public enum State {
ONE {
@Override
public Set<State> possibleFollowUps() {
return EnumSet.of(TWO, THREE);
}
},
TWO {
@Override
public Set<State> possibleFollowUps() {
return EnumSet.of(THREE);
}
},
THREE // final state
;
public Set<State> possibleFollowUps() {
return EnumSet.noneOf(State.class);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然如果事情变得更复杂,生成它的代码将非常冗长,但好的部分是您获得编译时安全性,线程安全性和高性能.