65
Thursday, March 18, 2010

State Machine Presentation62 End

  • Upload
    pbalogh

  • View
    188

  • Download
    1

Embed Size (px)

Citation preview

Page 1: State Machine Presentation62 End

Thursday, March 18, 2010

Page 2: State Machine Presentation62 End

Thursday, March 18, 2010

Page 3: State Machine Presentation62 End

Thursday, March 18, 2010

Page 4: State Machine Presentation62 End

Thursday, March 18, 2010

Page 5: State Machine Presentation62 End

public class Creature{ private var amIdead : Boolean; private var doIHaveDelbruckBrain : Boolean; private var doIHaveVictorBrain : Boolean;

public function Creature() { trace(“Ecce Creature”); amIdead = true;

}

public function implant( b : Brain ) { mybrain = b; if( mybrain == DELBRUCK_BRAIN ) // how?? { doIHaveDelbruckBrain = true; doIHaveVictorBrain = false; } else if( mybrain == VICTOR_BRAIN )// again -- how?? { doIHaveDelbruckBrain = false; doIHaveVictorBrain = true; } else { doIHaveDelbruckBrain = false; doIHaveVictorBrain = false; } }

public function zap() { if( amIdead ) { amIdead = false;

} else

{ amIdead = false;

}}

public function talk() { if( amIdead ) { // DO NOTHING -- I’M DEAD

} else

{ if( doIHaveDelbruckBrain ) {

trace(“Listen to this...”); trace(“the secrets of eternity”); } else if( doIHaveVictorBrain ) { trace(“The operation...”); trace(“...did it work?”); } else { trace(“UNNNNNNNH”); }

Thursday, March 18, 2010

Page 6: State Machine Presentation62 End

public class Creature{ private var amIdead : Boolean; private var doIHaveDelbruckBrain : Boolean; private var doIHaveVictorBrain : Boolean;

public function Creature() { trace(“Ecce Creature”); amIdead = true;

}

public function implant( b : Brain ) { mybrain = b; if( mybrain == DELBRUCK_BRAIN ) // how?? { doIHaveDelbruckBrain = true; doIHaveVictorBrain = false; } else if( mybrain == VICTOR_BRAIN )// again -- how?? { doIHaveDelbruckBrain = false; doIHaveVictorBrain = true; } else { doIHaveDelbruckBrain = false; doIHaveVictorBrain = false; } }

public function zap() { if( amIdead ) { amIdead = false;

} else

{ amIdead = false;

}}

public function talk() { if( amIdead ) { // DO NOTHING -- I’M DEAD

} else

{ if( doIHaveDelbruckBrain ) {

trace(“Listen to this...”); trace(“the secrets of eternity”); } else if( doIHaveVictorBrain ) { trace(“The operation...”); trace(“...did it work?”); } else { trace(“UNNNNNNNH”); }

Thursday, March 18, 2010

Page 7: State Machine Presentation62 End

public class Creature{ private var amIdead : Boolean; private var doIHaveDelbruckBrain : Boolean; private var doIHaveVictorBrain : Boolean;

public function Creature() { trace(“Ecce Creature”); amIdead = true;

}

public function implant( b : Brain ) { mybrain = b; if( mybrain == DELBRUCK_BRAIN ) // how?? { doIHaveDelbruckBrain = true; doIHaveVictorBrain = false; } else if( mybrain == VICTOR_BRAIN )// again -- how?? { doIHaveDelbruckBrain = false; doIHaveVictorBrain = true; } else { doIHaveDelbruckBrain = false; doIHaveVictorBrain = false; } }

public function zap() { if( amIdead ) { amIdead = false;

} else

{ amIdead = false;

}}

public function talk() { if( amIdead ) { // DO NOTHING -- I’M DEAD

} else

{ if( doIHaveDelbruckBrain ) {

trace(“Listen to this...”); trace(“the secrets of eternity”); } else if( doIHaveVictorBrain ) { trace(“The operation...”); trace(“...did it work?”); } else { trace(“UNNNNNNNH”); }

Thursday, March 18, 2010

Page 8: State Machine Presentation62 End

public class Creature{ private var amIdead : Boolean; private var doIHaveDelbruckBrain : Boolean; private var doIHaveVictorBrain : Boolean;

public function Creature() { trace(“Ecce Creature”); amIdead = true;

}

public function implant( b : Brain ) { mybrain = b; if( mybrain == DELBRUCK_BRAIN ) // how?? { doIHaveDelbruckBrain = true; doIHaveVictorBrain = false; } else if( mybrain == VICTOR_BRAIN )// again -- how?? { doIHaveDelbruckBrain = false; doIHaveVictorBrain = true; } else { doIHaveDelbruckBrain = false; doIHaveVictorBrain = false; } }

public function zap() { if( amIdead ) { amIdead = false;

} else

{ amIdead = false;

}}

public function talk() { if( amIdead ) { // DO NOTHING -- I’M DEAD

} else

{ if( doIHaveDelbruckBrain ) {

trace(“Listen to this...”); trace(“the secrets of eternity”); } else if( doIHaveVictorBrain ) { trace(“The operation...”); trace(“...did it work?”); } else { trace(“UNNNNNNNH”); }

Thursday, March 18, 2010

Page 9: State Machine Presentation62 End

public class Creature{ private var amIdead : Boolean; private var doIHaveDelbruckBrain : Boolean; private var doIHaveVictorBrain : Boolean;

public function Creature() { trace(“Ecce Creature”); amIdead = true;

}

public function implant( b : Brain ) { mybrain = b; if( mybrain == DELBRUCK_BRAIN ) // how?? { doIHaveDelbruckBrain = true; doIHaveVictorBrain = false; } else if( mybrain == VICTOR_BRAIN )// again -- how?? { doIHaveDelbruckBrain = false; doIHaveVictorBrain = true; } else { doIHaveDelbruckBrain = false; doIHaveVictorBrain = false; } }

public function zap() { if( amIdead ) { amIdead = false;

} else

{ amIdead = false;

}}

public function talk() { if( amIdead ) { // DO NOTHING -- I’M DEAD

} else

{ if( doIHaveDelbruckBrain ) {

trace(“Listen to this...”); trace(“the secrets of eternity”); } else if( doIHaveVictorBrain ) { trace(“The operation...”); trace(“...did it work?”); } else { trace(“UNNNNNNNH”); }

Thursday, March 18, 2010

Page 10: State Machine Presentation62 End

Thursday, March 18, 2010

Page 11: State Machine Presentation62 End

public class Creature{ private var mybrain : Brain;

public function Creature() { trace(“Ecce Creature”); }

public function zap() {}

public function walk() {}

public function talk() {} }

Thursday, March 18, 2010

Page 12: State Machine Presentation62 End

public class Creature{ private var mybrain : Brain;

public function Creature() { trace(“Ecce Creature”); }

public function zap() {}

public function walk() {}

public function talk() {} }

Thursday, March 18, 2010

Page 13: State Machine Presentation62 End

public class Brain{

public function zap(){}

public function talk(){}

public function walk(){}

}

Thursday, March 18, 2010

Page 14: State Machine Presentation62 End

public class DeadDelbruckBrain extends Brain{

public function zap(){}

public function talk(){}

public function walk(){}

}

Thursday, March 18, 2010

Page 15: State Machine Presentation62 End

public class Creature{ private var mybrain : Brain;

public function Creature() { trace(“Ecce Creature”); this.implant( new DeadDelbruckBrain()); }

public function zap() { mybrain.zap();

}

public function walk() { mybrain.walk();

} public function talk() { mybrain.talk();

} }

Thursday, March 18, 2010

Page 16: State Machine Presentation62 End

public class Creature{ private var mybrain : Brain;

public function Creature() { trace(“Ecce Creature”); this.implant( new DeadDelbruckBrain()); }

public function zap() { mybrain.zap();

}

public function walk() { mybrain.walk();

} public function talk() { mybrain.talk();

} }

Thursday, March 18, 2010

Page 17: State Machine Presentation62 End

public class Creature{ private var deadDelbruckBrain : DeadDelbruckBrain;

private var livingDelbruckBrain : LivingDelbruckBrain;

public function Creature(){ trace(“Ecce Creature”);

deadDelbruckBrain = new DeadDelbrookBrain(); livingDelbruckBrain = new LivingDelbrookBrain();

this.implant( deadDelbruckBrain );}

public function zap() { mybrain.zap();

}

public function walk() { mybrain.walk();

} public function talk() { mybrain.talk();

} }

Thursday, March 18, 2010

Page 18: State Machine Presentation62 End

public class Creature{ private var deadDelbruckBrain : DeadDelbruckBrain;

private var livingDelbruckBrain : LivingDelbruckBrain;

public function Creature(){ trace(“Ecce Creature”);

deadDelbruckBrain = new DeadDelbrookBrain(); livingDelbruckBrain = new LivingDelbrookBrain();

this.implant( deadDelbruckBrain );}

public function zap() { mybrain.zap();

}

public function walk() { mybrain.walk();

} public function talk() { mybrain.talk();

} }

Thursday, March 18, 2010

Page 19: State Machine Presentation62 End

public class DeadDelbruckBrain extends Brain{

public function zap() {

mycreature.implant( mycreature.livingDelbruckBrain );

}

Thursday, March 18, 2010

Page 20: State Machine Presentation62 End

public class Creature{ public var deadDelbruckBrain : DeadDelbruckBrain;

public var livingDelbruckBrain : LivingDelbruckBrain;

public function Creature(){ trace(“Ecce Creature”);

deadDelbruckBrain = new DeadDelbrookBrain(); livingDelbruckBrain = new LivingDelbrookBrain();

this.implant( deadDelbruckBrain );}

public function zap() { mybrain.zap();

}

public function walk() { mybrain.walk();

} public function talk() { mybrain.talk();

} }

Thursday, March 18, 2010

Page 21: State Machine Presentation62 End

public class Creature{ public var deadDelbruckBrain : DeadDelbruckBrain;

public var livingDelbruckBrain : LivingDelbruckBrain;

public function Creature(){ trace(“Ecce Creature”);

deadDelbruckBrain = new DeadDelbrookBrain( this ); livingDelbruckBrain = new LivingDelbrookBrain( this );

this.implant( deadDelbruckBrain );}

public function zap() { mybrain.zap();

}

public function walk() { mybrain.walk();

} public function talk() { mybrain.talk();

}

Thursday, March 18, 2010

Page 22: State Machine Presentation62 End

public class Brain{

public var mycreature : Creature;

public function Brain( somecreature : Creature ) { mycreature = somecreature; }

Thursday, March 18, 2010

Page 23: State Machine Presentation62 End

...

public function zap() {

mycreature.implant( mycreature.livingDelbruckBrain );

}...

Thursday, March 18, 2010

Page 24: State Machine Presentation62 End

public class DeadAbnormalBrain extends Brain{

public function zap(){}

public function talk(){}

public function walk(){}

}

Thursday, March 18, 2010

Page 25: State Machine Presentation62 End

public class LivingAbnormalBrain extends Brain{

public function zap(){}

public function talk(){}

public function walk(){}

}

Thursday, March 18, 2010

Page 26: State Machine Presentation62 End

...

public function zap() {

mycreature.implant( mycreature.livingAbnormalBrain );

}...

Thursday, March 18, 2010

Page 27: State Machine Presentation62 End

...

public function eatSoup() {

...}

...

Thursday, March 18, 2010

Page 28: State Machine Presentation62 End

Thursday, March 18, 2010

Page 29: State Machine Presentation62 End

...

public function smokeCigar() {

...}

...

Thursday, March 18, 2010

Page 30: State Machine Presentation62 End

Thursday, March 18, 2010

Page 31: State Machine Presentation62 End

...

public function sing() {

...}

...

Thursday, March 18, 2010

Page 32: State Machine Presentation62 End

Thursday, March 18, 2010

Page 33: State Machine Presentation62 End

public class HybridVictorAndAbnormalBrain extends Brain{

...

}

Thursday, March 18, 2010

Page 34: State Machine Presentation62 End

public class HybridVictorAndAbnormalBrain extends Brain{

private var percentageVictor : int;

public function setVictorPercentage( p : int ){ percentageVictor = p;}

Thursday, March 18, 2010

Page 35: State Machine Presentation62 End

public class HybridVictorAndAbnormalBrain extends Brain{

...

public function talk( ){ if( percentageVictor > 50 ) {...

Thursday, March 18, 2010

Page 36: State Machine Presentation62 End

Thursday, March 18, 2010

Page 37: State Machine Presentation62 End

Template Method Pattern

Thursday, March 18, 2010

Page 38: State Machine Presentation62 End

public class Brain{... public function walk() {

stepWithLeftFoot();stepWithRightFoot();

}...}

Thursday, March 18, 2010

Page 39: State Machine Presentation62 End

public class Brain{... public function stepWithLeftFoot() {

}

public function stepWithRightFoot() {

}...}

Thursday, March 18, 2010

Page 40: State Machine Presentation62 End

public class OneLeggedBrain{... override public function walk() {

//stepWithLeftFoot();stepWithRightFoot();

}...}

Thursday, March 18, 2010

Page 41: State Machine Presentation62 End

public class RogerCobbBrain extends Brain{... override public function stepWithLeftFoot() {

leftFootPosition += strideLength; }

override public function stepWithRightFoot() {

rightFootPosition += strideLength; }...}

Thursday, March 18, 2010

Page 42: State Machine Presentation62 End

public class EdwinaBrain extends Brain{... override public function stepWithLeftFoot() {

leftFootPosition += strideLength; }

override public function stepWithRightFoot() {

rightFootPosition += strideLength; }...}

Thursday, March 18, 2010

Page 43: State Machine Presentation62 End

public class EdwinaBrain extends Brain{... override public function stepWithLeftFoot() {

leftFootPosition += strideLength * 2; }

override public function stepWithRightFoot() {

rightFootPosition += strideLength * 2; }...}

Thursday, March 18, 2010

Page 44: State Machine Presentation62 End

public class EdwinaBrain extends Brain{... public function EdwinaBrain() {

strideLength = 12;rightStrideLength = 24;

}

override public function stepWithRightFoot() {

rightFootPosition += rightStrideLength; }...}

Thursday, March 18, 2010

Page 45: State Machine Presentation62 End

public class TwoBrainedCreature{... public var rightBrain : RightBrain; public var leftBrain : LeftBrain;...}

Thursday, March 18, 2010

Page 46: State Machine Presentation62 End

Thursday, March 18, 2010

Page 47: State Machine Presentation62 End

Many brainsin one creature.

Thursday, March 18, 2010

Page 48: State Machine Presentation62 End

public class TwoBrainedCreature{... public function walk() {

rightBrain.stepWithLeftFoot();leftBrain.stepWithRightFoot();

}...}

Thursday, March 18, 2010

Page 49: State Machine Presentation62 End

Thursday, March 18, 2010

Page 50: State Machine Presentation62 End

One kind of brain,many kinds of creatures.

Thursday, March 18, 2010

Page 51: State Machine Presentation62 End

public class World{public function World(){ var neo : Hero = new Hero(); var shopper : NormalPerson = new NormalPerson();

var agentOne = new SmithBrain(); var agentTwo = new SmithBrain(); neo.implant( agentOne ); shopper.implant( agentTwo );

}}

Thursday, March 18, 2010

Page 52: State Machine Presentation62 End

Thursday, March 18, 2010

Page 53: State Machine Presentation62 End

One actual brain,many creatures.

Thursday, March 18, 2010

Page 54: State Machine Presentation62 End

Thursday, March 18, 2010

Page 55: State Machine Presentation62 End

public class World{public function World(){

agentSmithBrain = new AgentSmithBrain(); var neo : Creature = new Creature(); var shopper : Creature = new Creature();

neo.implant( agentSmithBrain ); shopper.implant( agentSmithBrain );

}}

Thursday, March 18, 2010

Page 56: State Machine Presentation62 End

Dependency Injection

Thursday, March 18, 2010

Page 57: State Machine Presentation62 End

Thursday, March 18, 2010

Page 58: State Machine Presentation62 End

<beans> <bean id="edwina" class="EdwinaBrain"> <property name="mycreature" ref=" creature"/> </bean> <bean id="roger" class="RogerCobbBrain"> <property name="mycreature" ref=" creature"/> </bean> <bean id="creature" class="Creature"> <property name="leftBrain" ref="edwina"/> <property name="rightBrain" ref="roger"/> </bean></beans>

Thursday, March 18, 2010

Page 59: State Machine Presentation62 End

Actual Example

Thursday, March 18, 2010

Page 60: State Machine Presentation62 End

<game> <level name="demomode" > <sprite id="bigboss" class="FlyingDragon"> <property name="target" ref="hero"/> <property name="inputBrain" class="HeroFollower"/> <property name="movementBrain" class="ClumsyFlying"/> </sprite> <sprite id="hero" class="UnarmedHero"> <property name="inputSource" class="KeyboardInput"/> </sprite> </level></game>

Thursday, March 18, 2010

Page 61: State Machine Presentation62 End

<game> <level name="demomode" > <sprite id="bigboss" class="FlyingDragon"> <property name="target" ref="hero"/> <property name="inputBrain" class="HeroFollower"/> <property name="movementBrain" class="ClumsyFlying"/> </sprite> <sprite id="hero" class="UnarmedHero"> <property name="inputSource" class="RecordingKeyboardInput"/> </sprite> </level></game>

Thursday, March 18, 2010

Page 62: State Machine Presentation62 End

<game> <level name="demomode" > <sprite id="bigboss" class="FlyingDragon"> <property name="target" ref="hero"/> <property name="inputBrain" class="HeroFollower"/> <property name="movementBrain" class="ClumsyFlying"/> </sprite> <sprite id="hero" class="UnarmedHero"> <property name="inputSource" class="RecordedKeyboardInput" /> <property name="inputSource" class= "RecordedInputTranslator" data="a7.b3.c22.a42" /> </sprite> </level>

Thursday, March 18, 2010

Page 63: State Machine Presentation62 End

One Word:

Thursday, March 18, 2010

Page 64: State Machine Presentation62 End

Thursday, March 18, 2010

Page 65: State Machine Presentation62 End

Brains.

Thursday, March 18, 2010