【问题标题】:Capture keystrokes for a game (python)捕获游戏的击键(python)
【发布时间】:2012-03-27 03:25:10
【问题描述】:

有谁知道如何捕捉游戏的击键(即使用键盘导航一个简单的基于 ascii 的游戏,其中 8 = 上,2 = 下,4 左等......并且不需要按回车,进入一次击键就是目标。)?我找到了这段代码,这看起来是个好主意,但我想不通。添加 cmets,或将我发送到有关该主题的文章等,将有很大帮助。我知道很多人都有这个问题。先谢谢了?

    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)

【问题讨论】:

  • 你可以使用一个游戏库,比如pygame,它支持按键作为事件。
  • 如果无法从msvcrt 包中导入,这个sn-p 所做的只是定义一个kbhit() 方法。
  • 学习pygame有多复杂?我对编程很陌生。我希望能够相对较快地实现一些东西。
  • 检查 gamedev 堆栈溢出:gamedev.stackexchange.com

标签: python capture keystroke


【解决方案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 中制作东西实际上是开始学习编程的好方法,因为该网站有大量示例。

【讨论】:

    【解决方案2】:

    好的,如果您想了解如何直接控制它,请先仔细查看termiosfcntlstty 的 Linux(或 OS X)手册页。这是很多东西,但你会看到所有这些标志的用途。

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 2014-05-26
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 2020-09-02
      相关资源
      最近更新 更多