Differences between revisions 1 and 5 (spanning 4 versions)
Revision 1 as of 2006-04-25 15:41:31
Size: 1895
Editor: HuangYi
Comment: Action模式实现
Revision 5 as of 2009-12-25 07:18:56
Size: 97
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
##master-page:HomepageTemplate
##master-date:2004-01-29 23:45:45
#format wiki
#language zh
== Action模式实现 ==
                        --- by ["huangyi"] ["[email protected]"]


今天看到 这篇好文, 里面有一部分讲到Action模式在游戏里面的应用, 感觉有点意思就随手写了写, 总算赶在熄灯之前搞定, 呵呵。

{{{#!python
class Action(object):
 reg_after = {}
 reg_before = {}
 def __init__(self,func):
  self.internal = func
 def __call__(self):
  '''excute all actions registered to excute before self,
  then excute self,
  last excute all actions registered to excute after self.'''
  if self.reg_before.has_key(self):
   acs = self.reg_before[self]
   for a in acs:
    a()
  self.internal()
  if self.reg_after.has_key(self):
   acs = self.reg_after[self]
   for a in acs:
    a()
 def before(self,action):
  'register self take place before action'
  self.register(action,self,self.reg_before)
 def after(self,action):
  'register self take place after action'
  self.register(action,self,self.reg_after)
 @staticmethod
 def register(ac1,ac2,reg):
  if reg.has_key(ac1):
   reg[ac1].append(ac2)
  else:reg[ac1]=[ac2]

class Door(object):
 def __init__(self,no):
  self.no = no
  self.Open = Action(self.ac_Open)
 def ac_Open(self):
  print 'door',self.no,'open'

class Player(object):
 def __init__(self,name):
  self.name = name
  self.Die = Action(self.ac_Die)
 def ac_Die(self):
  print self.name,'player die'

class Beer(object):
 def __init__(self,no):
  self.no = no
  self.Start = Action(self.ac_Start)
 def ac_Start(self):
  print 'beer',self.no,'start'

if __name__ =='__main__':
 player = Player('hy')
 door = Door(1)
 beer = Beer(1)
 door.Open.before(player.Die)
 beer.Start.after(door.Open)
 player.Die()
}}}
...


----
----
["个人网页分类"]
哪个有权限就把这个给删了吧,地址改到:
[[HuangYi/action_pattern_implement]]

哪个有权限就把这个给删了吧,地址改到: HuangYi/action_pattern_implement

Action_Pattern_Implement (last edited 2009-12-25 07:18:56 by localhost)