Python控制台点击游戏如何防止长按回车键重复刷取收益
可行实现方案
两种方向都可以落地,以下是可直接运行的实现:
方案1:设置每分钟点击次数上限(无第三方依赖,兼容性最好)
这个方案不需要额外安装库,通过记录时间窗口内的点击次数实现限流,逻辑简单不易出问题:
import time money = 0 # 每分钟最大点击次数,可根据游戏设计调整 MAX_CLICK_PER_MINUTE = 60 # 存储最近一分钟内的点击时间戳 click_history = [] def start(): global money while True: print(f"You have ${money}") input("Press enter for money") current_time = time.time() # 清除1分钟前的历史记录 click_history[:] = [t for t in click_history if current_time - t < 60] if len(click_history) < MAX_CLICK_PER_MINUTE: money += 1 click_history.append(current_time) else: print("*点击太快了,休息一会再试吧*") # 可选加短延迟,避免极端快速点击占用过高资源 time.sleep(0.05) start()
方案2:仅按键释放时触发计数(彻底解决长按刷取问题)
标准库input只能检测到回车按下提交的动作,无法检测按键释放,需要借助pynput库实现键盘事件的精细监听,首先在replit控制台执行pip install pynput安装依赖,之后使用以下代码:
from pynput import keyboard import time money = 0 # 标记回车是否已经被按下,避免长按重复触发 enter_pressed = False def on_press(key): global enter_pressed if key == keyboard.Key.enter and not enter_pressed: enter_pressed = True def on_release(key): global money, enter_pressed if key == keyboard.Key.enter and enter_pressed: money += 1 enter_pressed = False # 释放后清屏刷新状态,可根据需要调整输出逻辑 print("\033c", end="") print(f"You have ${money}") print("Press enter for money") # 按下ESC可以退出游戏 if key == keyboard.Key.esc: return False def start(): print(f"You have ${money}") print("Press enter for money") with keyboard.Listener(on_press=on_press, on_release=on_release) as listener: listener.join() start()
这个方案下,不管玩家长按回车多久,只有松开的时候才会触发一次货币增加,完全避免了长按刷取的问题。
内容的提问来源于stack exchange,提问作者theflyingpig131
相关产品推荐
相关产品推荐

