raspberry pi zero based drum machine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

FSM.py 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import StatesProg
  2. import StatesDefender
  3. #====================================
  4. class Transition(object):
  5. def __init__(self, toState):
  6. self.toState = toState
  7. def Execute(self):
  8. pass
  9. #===================================-
  10. class FSM(object):
  11. def __init__ (self, character, owner):
  12. self.char = character
  13. self.states = {}
  14. self.transitions = {}
  15. self.curState = None
  16. self.prevState = None
  17. self.trans = None
  18. self.stateLife = 0
  19. self.owner = owner
  20. self.name = None
  21. self.last_state_notes = None
  22. self.queued_state = None
  23. def AddTransition(self, transName, transition):
  24. self.transitions[transName] = transition
  25. def AddState(self, stateName, state):
  26. self.states[stateName] = state
  27. self.states[stateName].name = state
  28. def SetState(self, stateName):
  29. self.prevState = self.curState
  30. self.curState = self.states[stateName]
  31. def ToTransition(self, toTrans):
  32. self.trans = self.transitions[toTrans]
  33. def Execute(self, owner):
  34. if (self.trans):
  35. self.owner = owner
  36. self.curState.Exit()
  37. self.trans.Execute()
  38. self.SetState(self.trans.toState)
  39. self.curState.Enter()
  40. self.trans = None
  41. self.curState.Execute()
  42. #====================================
  43. Char = type("Char",(object,),{})
  44. #===================================
  45. #===================================
  46. class ProgFSM(Char):
  47. def __init__(self, owner):
  48. self.FSM = FSM(self, owner)
  49. self.owner = owner
  50. state_list = [
  51. 'Example',
  52. 'Main',
  53. 'Startup',
  54. 'Intro',
  55. 'LoadDefault',
  56. 'PadPlayer',
  57. 'SeqPlayer',
  58. 'SelectSound',
  59. 'SelectPattern',
  60. 'EditSoundSequence',
  61. 'EditSong',
  62. 'Util',
  63. 'File',
  64. 'Ball',
  65. 'Clock',
  66. 'Exit',
  67. 'SelTheme',
  68. 'OpenSong',
  69. 'EnterText',
  70. 'LoadSound',
  71. 'Shutdown',
  72. 'Reboot',
  73. 'Ping',
  74. 'Wifi',
  75. 'Defender',
  76. 'Update',
  77. 'Calculator'
  78. ]
  79. for s in state_list:
  80. self.FSM.AddState(s, getattr(StatesProg, s)(self.FSM))
  81. t = 'to' + s
  82. self.FSM.AddTransition(t, Transition(s))
  83. if self.FSM.curState == None:
  84. self.FSM.SetState('Startup')
  85. def Execute(self):
  86. self.FSM.Execute(self.owner)
  87. #===================================
  88. class DefenderFSM(Char):
  89. def __init__(self, owner):
  90. self.FSM = FSM(self, owner)
  91. self.owner = owner
  92. state_list = [
  93. 'Startup',
  94. 'Intro',
  95. 'Main',
  96. 'BlueFade',
  97. 'GreyFade',
  98. 'GameOver',
  99. 'HighScore',
  100. 'NewHighScore',
  101. 'EnterText'
  102. ]
  103. for s in state_list:
  104. self.FSM.AddState(s, getattr(StatesDefender, s)(self.FSM))
  105. t = 'to' + s
  106. self.FSM.AddTransition(t, Transition(s))
  107. if self.FSM.curState == None:
  108. self.FSM.SetState('Startup')
  109. def Execute(self):
  110. self.FSM.Execute(self.owner)
  111. #===================================