msvcrt скрипт getch pauses, должен продолжить

PYTHON 3.3, msvcrt

import sys, msvcrt
print("Please press a key to see its value")
while 1:
    key = msvcrt.getch()
    print("the key is")
    print(key)
    if ord(key) == 27: # key nr 27 is escape
        sys.exit()

это мой код, просто в качестве примера. код останавливается, когда он достигает key = msvcrt.getch()*, or *key = ord(getch()) в этом отношении, здесь я использовал первый. Я хотел бы, чтобы этот код постоянно печатал ключ, вместо того, чтобы просто печатать ключ, когда я даю новый ввод (когда я нажимаю клавишу).

таким образом, напечатанный вывод будет выглядеть примерно так:

the key is
the key is
the key is
the key is
the key is
the key is
77
the key is
the key is
the key is

что необходимо, если вы хотите сделать что-то вроде змеи, где вы не хотите, чтобы ваша игра была приостановлена ​​каждый раз, когда вы хотите получить, вы не хотите, чтобы она делала паузу, ожидая ввода.

1 ответ

Решение

Использование msvcrt.kbhit чтобы проверить, была ли нажата клавиша:

import sys, msvcrt
import time

print("Please press a key to see its value")
while 1:
    print("the key is")
    if msvcrt.kbhit(): # <--------
        key = msvcrt.getch()
        print(key)
        if ord(key) == 27:
            sys.exit()
    time.sleep(0.1)

Другой пример, чтобы заставить программу Python останавливаться на определенном уровне и ждать, пока пользователь нажмет "Да" и / или пробел для "Нет", можно сгенерировать с помощью pygame. В качестве примера я использовал пробел для "Нет", но вы можете использовать касание Escape для "Нет". Возможно, вам не понадобятся некоторые импортные библиотеки. Они нужны были при создании игры в крестики-нолики.

Код ниже:

import numpy as np
import pygame as pg
from math import floor
import sys
import time
pg.init()

black = (0, 0, 0)
red = (255, 0, 0)
blue = (0, 0, 255)
yellow = (255, 255, 0)
white = (255, 255, 255)
gris = (192, 192, 192)
cell = 100
thickness =2

window = pg.display.set_mode((300, 300))
pg.display.set_caption("by @djilytech")
for col in range(3):
    for row in range(3):
        pg.draw.rect(window, gris, (row * cell, col * cell, cell - 2, cell - 2), thickness)
        pg.time.delay(120)
        pg.display.update()

run = False
while not run:
    for ev in pg.event.get():
        if ev.type == pg.QUIT:
            pg.quit()
            sys.exit()
        if ev.type == pg.KEYDOWN:
            if ev.key == pg.K_RETURN:
                print(" This mean the user wants to play again or said YES")
                # So I can have some code here for what I want

            if ev.key == pg.K_SPACE:
                print("User does not want to continue")
                # Will exit the program

            run = True
Другие вопросы по тегам