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

Python游戏设置时间限制报错求助:'int' object is not callable

解决Python游戏时间限制的错误与更简便实现方法

先解决当前的TypeError问题

你遇到的TypeError: 'int' object is not callable,根源是**time这个名字被当成了整数变量,或者没有正确导入时间函数**:

  • 如果之前在代码里给time赋值过(比如time = 30),那time()就会报错——此时time是整数而非函数;
  • 如果没有导入time模块的time()函数,需要在代码开头添加:
    from time import time
    
    或者用import time,然后把所有time()改成time.time()。

另外看你提供的代码,还有个小冗余:你重复创建了两次时间和分数的文本对象,前两行的c.create_text完全是多余的,直接保留后两行赋值给time_text和score_text即可。

更简便的时间限制实现方法(适配tkinter场景)

你的代码用了while True循环+window.update(),这其实不是tkinter的推荐写法,容易导致界面卡顿。推荐用tkinter自带的after()方法来实现定时更新,既简洁又稳定:

优化后的完整示例代码

from tkinter import Tk, Canvas, randint
from time import time

window = Tk()
c = Canvas(window, width=800, height=600)
c.pack()

# 只创建一次文本对象,避免冗余
time_text = c.create_text(450, 20, text='Time', fill='red')
score_text = c.create_text(650, 20, text='Score', fill='red')

ENNEMY_CHANCE = 10
TIME_LIMIT = 30
SCORE_BONUS = 1000
score = 0
bonus = 0
end_time = time() + TIME_LIMIT

def print_score(score_val):
    c.itemconfig(score_text, text=str(score_val))

def print_time(remaining_time):
    c.itemconfig(time_text, text=f"Time: {remaining_time}")

def create_ennemy():
    # 替换成你原来的敌人创建逻辑
    pass

def move_ennemies():
    # 替换成你的敌人移动逻辑
    pass

def hide_ennemies():
    # 替换成你的敌人隐藏逻辑
    pass

def ennemy_kill():
    # 替换成你的敌人击杀计分逻辑
    return 0

def game_loop():
    global score, bonus, end_time

    # 生成敌人
    if randint(1, ENNEMY_CHANCE) == 1:
        create_ennemy()
    
    # 游戏核心逻辑更新
    move_ennemies()
    hide_ennemies()
    score += ennemy_kill()

    # 加分奖励时间逻辑
    if (score // SCORE_BONUS) > bonus:
        bonus += 1
        end_time += TIME_LIMIT
    
    # 更新UI显示
    print_score(score)
    remaining_time = int(end_time - time())
    print_time(remaining_time)

    # 检查时间是否结束
    if remaining_time > 0:
        # 每隔100ms(0.1秒)调用一次游戏循环,保证流畅度
        window.after(100, game_loop)
    else:
        # 时间结束后的逻辑,比如显示游戏结束提示
        c.create_text(400, 300, text="GAME OVER!", fill="red", font=("Arial", 30))

# 启动游戏主循环
game_loop()
window.mainloop()

为什么这个方法更好?

  • 避免了while True循环阻塞tkinter的主事件循环,界面不会出现卡顿或无响应;
  • after()是tkinter原生支持的定时机制,完全符合tkinter的设计规范;
  • 代码结构更清晰,游戏逻辑和UI更新分离,后续维护和扩展更方便。

额外提示

  • 变量名尽量避免和内置函数/模块重名(比如不要用time作为变量名),这是很多新手容易踩的坑;
  • 时间显示可以加上单位(比如Time: 25s),让玩家更直观。

内容的提问来源于stack exchange,提问作者cl.ement05

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:12:50