2017-08-04 2 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]() 

私たちはいろいろなアプローチを試しましたが、ゲームから反応を得ず、代わりにそれを壊すものはありません。これを行うために欠けている簡単な方法はありますか?

編集:「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]() 

はEDIT:

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]() 

これは、あなたがすでにkey_actionsを持っているパターンと一致する必要があります

+0

@BGrossmanあなたが探しているものから編集が近づいてくれることを願っています – PRMoureu

関連する問題