You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyCraft开发Minecraft贪吃蛇游戏时的键鼠检测问题求助

PyCraft全局输入监听解决方案(Windows)

用pynput实现全局按键监听

keyboard模块仅监听Python进程内的输入,而pynput可以捕获全局键盘事件,完全适配你的场景。先通过pip install pynput安装模块,示例代码:

from pynput.keyboard import Key, Listener
from pycraft import Minecraft
import time

mc = Minecraft.create()
current_dir = "forward"

def on_key_press(key):
    global current_dir
    # 绑定方向键控制蛇的移动方向
    if key == Key.up:
        current_dir = "forward"
    elif key == Key.down:
        current_dir = "back"
    elif key == Key.left:
        current_dir = "left"
    elif key == Key.right:
        current_dir = "right"

# 启动监听线程,不阻塞主逻辑
listener = Listener(on_press=on_key_press)
listener.start()

# 蛇的移动循环
while True:
    x, y, z = mc.player.pos
    if current_dir == "forward":
        mc.player.setPos(x, y, z + 1)
    elif current_dir == "back":
        mc.player.setPos(x, y, z - 1)
    elif current_dir == "left":
        mc.player.setPos(x - 1, y, z)
    elif current_dir == "right":
        mc.player.setPos(x + 1, y, z)
    time.sleep(0.5)

检查PyCraft内置事件支持

部分PyCraft发行版带有events模块,可直接监听游戏内输入,无需全局捕获。尝试以下代码验证:

from pycraft import Minecraft, events

mc = Minecraft.create()

def handle_movement(event):
    if event.key == "w":
        # 向前移动蛇的逻辑
        mc.player.setPos(mc.player.pos.x, mc.player.pos.y, mc.player.pos.z + 1)
    elif event.key == "s":
        mc.player.setPos(mc.player.pos.x, mc.player.pos.y, mc.player.pos.z - 1)

events.on_key_press(handle_movement)

如果导入events时报错,说明你的版本不支持,直接用pynput方案即可。

关键提示

  • 全局监听可能被Windows Defender或第三方安全软件拦截,需授予程序输入监听权限
  • 移动循环中必须添加延迟,否则蛇的移动速度会超出控制

内容的提问来源于stack exchange,提问作者avisa-cyber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:40:02