Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为游戏捕获击键(python)_Python_Capture_Keystroke - Fatal编程技术网

为游戏捕获击键(python)

为游戏捕获击键(python),python,capture,keystroke,Python,Capture,Keystroke,是否有人知道如何捕捉游戏中的击键(即,使用键盘导航一个简单的基于ascii的游戏,其中8=向上、2=向下、4向左等…并且不需要按回车键,目标是移动一个击键。)?我找到了这段代码,这看起来是个好主意,但我实在想不通。添加评论,或者给我发一篇关于这个主题的文章等等,都会有很大的帮助。我知道很多人都有这个问题。提前谢谢 try: from msvcrt import kbhit except ImportError: import termios, fc

是否有人知道如何捕捉游戏中的击键(即,使用键盘导航一个简单的基于ascii的游戏,其中8=向上、2=向下、4向左等…并且不需要按回车键,目标是移动一个击键。)?我找到了这段代码,这看起来是个好主意,但我实在想不通。添加评论,或者给我发一篇关于这个主题的文章等等,都会有很大的帮助。我知道很多人都有这个问题。提前谢谢

    try:
        from msvcrt import kbhit
    except ImportError:
        import termios, fcntl, sys, os
        def kbhit():
            fd = sys.stdin.fileno()
            oldterm = termios.tcgetattr(fd)
            newattr = termios.tcgetattr(fd)
            newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
            termios.tcsetattr(fd, termios.TCSANOW, newattr)
            oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
            fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)
            try:
                while True:
                    try:
                        c = sys.stdin.read(1)
                        return True
                    except IOError:
                        return False
            finally:
                termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
                fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
是一个很好的起点,文档非常好。以下是一种获得键盘输出的方法:

import pygame    
pygame.init()
screen = pygame.display.set_mode((100, 100))
while 1:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN and event.key <= 256:
            print event.key, chr(event.key)
导入pygame
pygame.init()
screen=pygame.display.set_模式((100100))
而1:
对于pygame.event.get()中的事件:

如果event.type==pygame.KEYDOWN和event.keyOk,如果您想了解如何直接控制它,请先仔细阅读Linux(或OS X)手册中的
termios
fcntl
stty
。这是很多东西,但你会看到所有这些旗帜都是用来干什么的

通常,您的键盘输入是行缓冲的:终端驱动程序收集它,直到您点击回车键。标志
~termios.ICANON
负责关闭线路缓冲,因此您可以立即查看用户键入的内容


另一方面,如果您希望您的程序仅在用户按下某个键时响应,则不希望
os.O_NONBLOCK
:这意味着您的程序在从键盘读取时不会阻塞,但您的读取将返回空字符串。这适用于无论用户是否做出反应,事情都会不断发生的真人游戏。

您可以使用游戏库,例如,它支持按键作为事件。如果无法从
msvcrt
包导入方法,则此代码段所做的就是定义一个
kbhit()
方法。学习pygame有多复杂?我对编程很陌生。我希望我能尽快实现一些东西