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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:24:03