捕捉游戏的击键(python)

时间:2012-03-27 03:25:10

标签: python capture keystroke

有没有人知道如何捕捉游戏的击键(即使用键盘导航一个简单的基于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)

2 个答案:

答案 0 :(得分:1)

Pygame是一个很好的起点,文档非常好。这是一种可以获得键盘输出的方法:

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中制作一些东西实际上是一种开始学习编程的好方法,因为该网站有很多例子。

答案 1 :(得分:1)

好的,如果您想了解如何直接控制这一点,请首先仔细阅读termiosfcntl和{{1}的Linux(或OS X)手册页。 }。这是很多东西,但你会看到所有这些标志的用途。

通常,您的键盘输入是行缓冲的:终端驱动程序会收集它直到您返回。标志stty是负责关闭行缓冲的标志,因此您可以立即看到用户输入的内容。

另一方面,如果您希望程序仅在用户按键时响应,则不要~termios.ICANON:这意味着程序在从键盘读取时不会阻止,但是你的读取将返回一个空字符串。这适用于实时动作游戏,无论用户是否做出反应,事情都会发生。