2017-08-04 64 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