用列表中的命令替换键盘命令

时间:2017-08-04 18:32:50

标签: python

我的小组正在尝试创建一个播放俄罗斯方块的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语句,它接受一个等同于击键名称的字符串并执行正确的命令。我已经尝试将其更改为从具有相同名称的列表中获取字符串,但除了在输入击键时导致游戏中断之外它没有任何效果。

1 个答案:

答案 0 :(得分:0)

在这种情况下使用字典模式会更有趣(并避免邪恶的评估):

angular.module("app",[])
.controller("ctrl",function($scope) {
  var vm = $scope;
  vm.choices = {};
  vm.munchies  = [
    {"name":"The New York TImes",
     "text":"Get the top headlines from the NYT every morning", 
     "type":"News", "tag":"nyt"
    },
    {"name":"Wall Street Journal",
     "text":"Get the top headlines from the WSJ every morning", 
     "type":"News", "tag":"wsj"
    }
  ];
})

编辑:

这应该与您<script src="//unpkg.com/angular/angular.js"></script> <body ng-app="app" ng-controller="ctrl"> Subscriptions {{choices | json}} <fieldset ng-repeat="mu in munchies"> <h3>{{mu.name}}</h3> <p>{{mu.text}}</p> <input ng-model="choices[mu.tag]" name="{{mu.tag}}" type="checkbox" /> &nbsp; Turn On <br/>Subscribed {{choices[mu.tag]}} </fieldset> </body>已经拥有的模式匹配:

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