Changes

Jump to: navigation, search

State

4,636 bytes added, 23:36, 12 April 2007
Game programming: Character Status
</pre>
=== Game programmingState Pattern Example: Character Status C# ===
'''Abstract Class'''
<pre>
 
 
using System;
using System.Drawing;
namespace StatePatternApp
{
/// <summary>
/// Summary description for State.
/// </summary>
public abstract class State
{
}
</pre>
'''Transition class'''
<PRE>
using System;
 
namespace StatePatternApp
{
class Transition
{
private static Transition getInstance;
protected Transition() {}
 
public static Transition GetInstance()
{
if(getInstance == null)
{
getInstance = new Transition();
}
return getInstance;
}
 
public void Transform(State state)
{
if(state == null)
{
return;
}
 
// Get the type of state.
string stateType = state.GetType().Name;
 
// Are we in normal state?
if(state.CurrentLevel < state.MaxDeviaton &&
state.CurrentLevel > state.MinDeviaton)
{
if(stateType.ToUpper() != "NORMALSTATE")
{
state.ChangeState(state.Machine,
new NormalState(state));
}
}
// Are we in warning?
if(state.Deviation > 0)
{
if((state.CurrentLevel < state.MaxLevel &&
state.CurrentLevel >= state.MaxDeviaton) ||
state.CurrentLevel > state.MinLevel &&
state.CurrentLevel <= state.MinDeviaton)
{
if(stateType.ToUpper() != "WARNINGSTATE")
{
state.ChangeState(state.Machine,
new WarningState(state));
}
}
}
// Are we in alert state?
if(state.CurrentLevel >= state.MaxLevel ||
state.CurrentLevel <= state.MinLevel)
{
if(stateType.ToUpper() != "ALERTSTATE")
{
state.ChangeState(state.Machine,
new AlertState(state));
}
}
}
}
}
</PRE>
'''NormalState - derived state class'''
<PRE>using System;
using System.Drawing;
 
namespace StatePatternApp
{
public class NormalState : State
{
public NormalState(State state) : base(state)
{
}
 
public NormalState(Machine machine, int iCurrentLevel,
int iDeviation, int iMaxLevel, int iMinLevel) :
base(machine, iCurrentLevel, iDeviation,
iMaxLevel, iMinLevel)
{
}
 
public override void SetParams()
{
this.MessageColor = Color.Green;
this.MessageText = "Normal";
}
}
}</PRE>
'''WarningState - derived state class'''
<PRE>using System;
using System.Drawing;
 
namespace StatePatternApp
{
public class WarningState : State
{
public WarningState(State state) : base(state)
{
}
 
public WarningState(Machine machine, int iCurrentLevel,
int iDeviation, int iMaxLevel, int iMinLevel) :
base(machine, iCurrentLevel, iDeviation, iMaxLevel,
iMinLevel)
{
}
 
public override void SetParams()
{
this.MessageColor = Color.Yellow;
this.MessageText = "Warning";
}
}
}</PRE>
'''AlertState - derived state class'''
<PRE>using System;
using System.Drawing;
 
namespace StatePatternApp
{
public class AlertState : State
{
public AlertState(State state) : base(state)
{
}
 
public AlertState(Machine machine, int iCurrentLevel,
int iDeviation, int iMaxLevel, int iMinLevel) :
base(machine, iCurrentLevel, iDeviation, iMaxLevel,
iMinLevel)
{
}
 
public override void SetParams()
{
this.MessageColor = Color.Red;
this.MessageText = "Alert";
}
}
}</PRE>
'''Machine class - This class maintains an instance of state'''
<PRE lang=cs id=pre5 style="MARGIN-TOP: 0px">using System;
 
namespace StatePatternApp
{
public class Machine
{
public State currentState;
 
public Machine(int iCurrentLevel, int iDeviation,
int iMaxLevel, int iMinLevel)
{
currentState = new NormalState(this, iCurrentLevel,
iDeviation, iMaxLevel, iMinLevel);
currentState.CheckEfficiency();
}
 
public void ChangeState(State setState)
{
currentState = setState;
}
 
public void SetCurrentLevel(int level)
{
currentState.CurrentLevel = level;
}
}
}</PRE>
== References ==
1
edit

Navigation menu