def get_action(self, state): """ Wait for the user to enter a valid action on the keyboard. Return the first valid action entered since the last check. (KeyboardAgent, State) -> str """ legal = state.get_legal_actions(self.agent_index) while True: keys = keys_waiting() + keys_pressed() if (self.WEST_KEY in keys or 'Left' in keys) and Directions.WEST in legal: move = Directions.WEST break if (self.EAST_KEY in keys or 'Right' in keys) and Directions.EAST in legal: move = Directions.EAST break if (self.NORTH_KEY in keys or 'Up' in keys) and Directions.NORTH in legal: move = Directions.NORTH break if (self.SOUTH_KEY in keys or 'Down' in keys) and Directions.SOUTH in legal: move = Directions.SOUTH break sleep(0.05) return move
def get_action(self, state): from graphics_utils import keys_waiting from graphics_utils import keys_pressed keys = keys_waiting() + keys_pressed() if keys != []: self.keys = keys legal = state.get_legal_actions(self.index) move = self.get_move(legal) if move == Directions.STOP: # Try to move in the same direction as before if self.last_move in legal: move = self.last_move if (self.STOP_KEY in self.keys) and Directions.STOP in legal: move = Directions.STOP if move not in legal: move = random.choice(legal) self.last_move = move return move