Differences between revisions 3 and 4
Revision 3 as of 2006-04-26 01:17:32
Size: 2053
Editor: HuangYi
Comment:
Revision 4 as of 2006-12-02 04:50:33
Size: 97
Editor: HuangYi
Comment:
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]"]


今天看到 [http://harkal.sylphis3d.com/2005/08/10/multithreaded-game-scripting-with-stackless-python/ 这篇好文], 里面有一部分讲到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)