使用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
相关产品推荐
相关产品推荐

