1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | def printJump(actor='ass'): print actor + ' jumpu' def printRun(actor='ass'): print actor + ' run' def printPoop(actor='ass'): print actor + ' shit...' class Who: def __init__(self, name): self.name = name def jump(self): print self.name + ' jump' def run(self): print self.name + ' run' def poop(self): print self.name + ' poop' ############################## 커맨드 패턴 ############################## # 이 패턴을 이용해서 유저와 ai의 입력 인터페이스를 동일하게 설정할 수 있다. class Jump: def execute(self, who): printJump() who.jump() class Run: def execute(self, who): printRun() who.run() class Poop: def execute(self, who): printPoop() who.poop() class InputHandler: def __init__(self, btnX, btnY, btnZ): self.btnX = btnX self.btnY = btnY self.btnZ = btnZ def handleInput(self): if key.vk == libtcod.KEY_UP: return self.btnX elif key.vk == libtcod.KEY_LEFT: return self.btnY elif key.vk == libtcod.KEY_RIGHT: return self.btnZ ########################################################################### inputHandler = InputHandler(Jump(), Run(), Poop()) ######################## 함수를 쓰는 커맨드 패턴 ######################### # 사실 패턴도 아냐 ㅋㅋ 개쩐당 class FInputHandler: def __init__(self, btnX, btnY, btnZ): self.btnX = btnX self.btnY = btnY self.btnZ = btnZ def handleInput(self): if key.vk == libtcod.KEY_UP: return self.btnX elif key.vk == libtcod.KEY_LEFT: return self.btnY elif key.vk == libtcod.KEY_RIGHT: return self.btnZ ######################################################################## fiHandler = FInputHandler(printJump, printRun, printPoop) | cs |
사용
패턴적용
command = inputHandler.handleInput()
if command is not None:
command.execute(Who('yee'))
그런 거 없다. 함수다.
command = fiHandler.handleInput()
if command is not None:
command('he')
걍 함수 주면 되더라 패턴 그딴 거 노필요
함수가 1급시민 되니 뭔가 존나... 멋있음
변태같은 함수포인터나 콜백 이런것보다 훨씬좋음
안좆내요