用CSharp写一个状态机的代码
时间: 2024-05-29 16:09:59 浏览: 75
状态机代码
3星 · 编辑精心推荐
以下是一个简单的状态机示例代码,用C#编写:
public class StateMachine
{
private State currentState;
public StateMachine(State initialState)
{
currentState = initialState;
currentState.Enter();
}
public void Update()
{
State nextState = currentState.CheckTransitions();
if (nextState != null)
{
currentState.Exit();
currentState = nextState;
currentState.Enter();
}
currentState.Update();
}
}
public abstract class State
{
protected StateMachine stateMachine;
public State(StateMachine stateMachine)
{
this.stateMachine = stateMachine;
}
public virtual void Enter() { }
public virtual void Exit() { }
public abstract void Update();
public abstract State CheckTransitions();
}
public class IdleState : State
{
public IdleState(StateMachine stateMachine) : base(stateMachine) { }
public override void Update()
{
// Do nothing
}
public override State CheckTransitions()
{
if (Input.GetKeyDown(KeyCode.Space))
{
return new JumpState(stateMachine);
}
return null;
}
}
public class JumpState : State
{
public JumpState(StateMachine stateMachine) : base(stateMachine) { }
public override void Enter()
{
// Perform jump action
}
public override void Update()
{
// Keep jumping until we reach a certain height or time has expired
}
public override State CheckTransitions()
{
if (Input.GetKeyUp(KeyCode.Space))
{
return new IdleState(stateMachine);
}
return null;
}
}
在这个示例代码中,我们定义了一个状态机类和一个状态类。状态机类负责管理当前状态和状态之间的转换。状态类是一个抽象类,它定义了状态的基本结构和行为,并提供了 CheckTransitions() 方法来检查是否应该转换到其他状态。
我们还定义了两个具体的状态:IdleState 和 JumpState。IdleState 状态表示角色处于空闲状态,不做任何事情。JumpState 状态表示角色正在跳跃,并执行了一些跳跃动作。
在状态类中,我们可以看到 CheckTransitions() 方法的实现,它负责检查当前状态是否应该转换到其他状态。如果需要转换,它会返回一个新的状态实例,否则返回 null。
在主程序中,我们创建了一个状态机实例,并在每个帧中调用 Update() 方法来更新状态机的状态。状态机会检查当前状态是否需要转换,并在转换时更新状态。
阅读全文