Pygame через SSH не регистрирует нажатия клавиш (Raspberry Pi 3)

Так что я получил raspi 3 и простую 8×8 светодиодную матрицу. После некоторых игр с ним я решил сделать простую игру змеи (показ на этой матрице) с событиями pygame, у меня нет предыдущего опыта с pygame. Нет подключенного экрана / дисплея, кроме светодиодной матрицы.

Таким образом, проблема сначала была «pygame.error: видеосистема не инициализирована», хотя я думаю, что я ее исправил, установив переменную env: os.putenv('DISPLAY', ':0.0') Теперь, когда я получил работу запустите его … и ничего не происходит, например, никакие нажатия клавиш не регистрируются. Просто этот «мусор», я не знаю, как его назвать . Точка на светодиодной матрице не движется. Если я изменяю положение x или y змеи где-то в цикле, оно движется по назначению.

Мой код:

 #!/usr/bin/python2 import pygame import max7219.led as led from max7219.font import proportional, SINCLAIR_FONT, TINY_FONT, CP437_FONT import numpy as nqp import os SIZE = (8, 8) class Board: def __init__(self, size, snake): "Board object for snake game" self.matrix = np.zeros(size, dtype=np.int8) self.device = led.matrix() self.snake = snake def draw(self): #add snake self.matrix = np.zeros(SIZE, dtype=np.int8) self.matrix[self.snake.x][self.snake.y] = 1 for x in range(8): for y in range(8): self.device.pixel(x, y, self.matrix[x][y], redraw=False) self.device.flush() def light(self, x, y): "light specified pixel" self.matrix[x][y] = 1 def dim(self, x, y): "off specified pixel" self.matrix[x][y] = 0 class Snake: def __init__(self): "Object representing an ingame snake" self.length = 1 self.x = 3 self.y = 3 if __name__=="__main__": os.putenv('DISPLAY', ':0.0') pygame.init() snake = Snake() board = Board(SIZE, snake) done = False while not done: for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: snake.y -= 1 elif event.key == pygame.K_DOWN: snake.y += 1 elif event.key == pygame.K_LEFT: snake.x -= 1 elif event.key == pygame.K_RIGHT: snake.x += 1 board.draw() 

Я использую pygame, потому что ничего не знаю (ну, я не могу использовать pygame, но я просто не знаю никаких альтернатив). Если это будет проще, я буду счастлив сделать это. Заранее спасибо!

One Solution collect form web for “Pygame через SSH не регистрирует нажатия клавиш (Raspberry Pi 3)”

Вы должны иметь возможность использовать проклятия. Вот простой пример:

 import curses def main(screen): key = '' while key != 'q': key = screen.getkey() screen.addstr(0, 0, 'key: {:<10}'.format(key)) if __name__ == '__main__': curses.wrapper(main) 

Вы увидите, что ваши нажатия клавиш зарегистрированы – они просто строки.

Однако это работает в режиме блокировки. Предполагая, что ваш код должен делать другие вещи, вы можете включить nodelay :

 def main(screen): screen.nodelay(True) key = '' while key != 'q': try: key = screen.getkey() except curses.error: pass # no keypress was ready else: screen.addstr(0, 0, 'key: {:<10}'.format(key)) 

В вашем сценарии вы, вероятно, поместили бы это в свой игровой цикл, который вытягивается на ваш экран 8×8, поэтому он будет выглядеть примерно так:

  game = SnakeGame() while game.not_done: try: key = screen.getkey() except curses.error: key = None if key == 'KEY_UP': game.turn_up() elif key == 'KEY_DOWN': game.turn_down() elif key == 'KEY_LEFT': game.turn_left() elif key == 'KEY_RIGHT': game.turn_right() game.tick() 

Одно замечание – этот подход займет 100% вашего процессора, поэтому, если у вас нет другого способа ограничить то, что делает ваше приложение, это может вызвать некоторые проблемы. Вы можете расширить этот подход, используя многопоточность / многопроцессорность, если вы обнаружите, что это то, что вам нужно.

  • Matplotlib: отображение графика на удаленной машине
  • Как сгенерировать пары ключей SSH с помощью Python
  • Объемный абзац Emacs для Python
  • ssh / login для сервера сборки в сети и выхода из системы
  • pysvn запрашивает пароль с помощью svn + ssh
  • Ввод команды в фоновом режиме с помощью Fabric не работает на некоторых хостах
  • Трудно установить библиотеку pshon ssh на windows (ssh был заменен на «paramiko»)
  • Модуль SSH для python
  • Python - лучший язык программирования в мире.