2017-08-04 92 views
0

我的团队正在尝试创建一个播放俄罗斯方块的AI,并且正在努力找出正确的方法来替换执行键盘命令的原始文件中的代码部分,执行将传递给它的命令列表。以下是这部分的原始代码。用列表中的命令替换键盘命令

 for event in pygame.event.get(): 
      if event.type == pygame.USEREVENT+1: 
       self.drop(False) 
      elif event.type == pygame.QUIT: 
       self.quit() 
      elif event.type == pygame.KEYDOWN: 
       for key in key_actions: 
        if event.key == eval("pygame.K_" 
        +key): 
         key_actions[key]() 

我们已经尝试了不同的方法摆,但没有得到任何游戏的反应,而是因为它打破。有没有一种简单的方法我们错过了这么做?

编辑:should add,“key_actions”是一个switch语句,它接受一个等同于击键名称的字符串并执行正确的命令。我试着改变它以从同名的列表中获取字符串,但除了在输入按键时导致游戏破坏之外,没有其他效果。

回答

0

使用字典模式是更有趣在这种情况下(和避邪EVAL):

import pygame 

def action1(): 
    print('up') 

def action2(): 
    print('down') 

key_actions = {pygame.K_UP : action1, 
       pygame.K_DOWN : action2, 
       } 

pygame.init() 
screen = pygame.display.set_mode((200,200)) 

while True: 

    for event in pygame.event.get(): 

     if event.type == pygame.QUIT: 
      quit() 
     elif event.type == pygame.KEYDOWN: 

      if event.key in key_actions: 
       key_actions[event.key]() 

编辑:

这应该与您已经为key_actions模式:

kb_keys = {pygame.K_UP : key_actions['UP'], 
      pygame.K_DOWN : key_actions['DOWN'], 
      } 

for event in pygame.event.get(): 

    if event.type == pygame.QUIT: 
     quit() 
    elif event.type == pygame.KEYDOWN: 

     if event.key in kb_keys: 
      kb_keys[event.key]() 
+0

@Brossross我希望编辑离你所寻找的更近 – PRMoureu