12.6.6 代码重构大作战:让_check_events()瘦身成功!
当代码开始"发福"怎么办?
想象一下,你的_check_events()方法就像个贪吃蛇,随着游戏功能不断增加,它变得越来越臃肿。
这时候就该给它来个"代码减肥计划"了!
我们把这位"重量级选手"拆分成两个更专业的助手:
一个专门处理按键按下(_check_keydown_events),另一个负责按键释放(_check_keyup_events)。
重构后的代码健身房
def _check_events(self):
"""游戏事件监控中心 - 现在只负责调度"""
for event in pygame.event.get():
if event.type == pygame.QUIT: # 玩家想溜了?关门!
sys.exit()
elif event.type == pygame.KEYDOWN: # 按键被按下了
self._check_keydown_events(event)
elif event.type == pygame.KEYUP: # 按键被释放了
self._check_keyup_events(event)
def _check_keydown_events(self, event):
"""按键按下专属处理员"""
if event.key == pygame.K_RIGHT: # 右箭头键被按
self.ship.moving_right = True # 飞船:我要往右飞!
elif event.key == pygame.K_LEFT: # 左箭头键被按
self.ship.moving_left = True # 飞船:左转舵!
def _check_keyup_events(self, event):
"""按键释放专属处理员"""
if event.key == pygame.K_RIGHT: # 右箭头键松开了
self.ship.moving_right = False # 飞船:停止右转!
elif event.key == pygame.K_LEFT: # 左箭头键松开了
self.ship.moving_left = False # 飞船:停止左转!
为什么这样重构更优雅?
1. 职责分明:每个方法都像专业运动员一样,只专注于自己的"运动项目"
2. 可扩展性强:想增加新功能?直接往对应的方法里加就行,不会让主方法变得臃肿
3. 可读性提升:代码就像好文章一样,分段明确,逻辑清晰
4. 维护方便:调试时可以直接定位到具体的方法,不用在冗长的代码中大海捞针
重构的艺术
这种重构方式体现了编程中的"单一职责原则"——让