Tkinter 模运算器isn';行不通

Tkinter 模运算器isn';行不通,tkinter,modulo,Tkinter,Modulo,所以我在做一个基本的弹球游戏。我试图使它每10秒,一个项目下降到屏幕上。我通过让time\u分数每秒上升一次来实现这一点。在第34行,它应该每10秒激活一次。但是,它只是在开始时才这样做。为什么不每10秒做一次 `from tkinter import * import random import time import pickle tk = Tk() tk.title("Game") tk.resizable(0,0) tk.wm_attributes("-topmost", 1) can

所以我在做一个基本的弹球游戏。我试图使它每10秒,一个项目下降到屏幕上。我通过让
time\u分数每秒上升一次来实现这一点。在第34行,它应该每10秒激活一次。但是,它只是在开始时才这样做。为什么不每10秒做一次

`from tkinter import *
import random
import time
import pickle

tk = Tk()
tk.title("Game")
tk.resizable(0,0)
tk.wm_attributes("-topmost", 1)
canvas = Canvas (tk, width=1500,height=700, bd=0, highlightthickness=0)
canvas.pack()
game_over = canvas.create_text(750,350, text='GAME OVER', font=('Helvetica', 100,), fill='red')
canvas.itemconfig(game_over, state='hidden')
time_score=0
tk.update()
speeder = 0
ClickTS = canvas.create_text(750,350, text='CLICK TO START', font=('Helvetica', 70,), fill='blue')
load_file = open('C:\\Users\\hatchfamily\\Desktop\\Python\\Saved Functions\\Saves\\save.dat','rb')
high_score = round(pickle.load(load_file))
load_file.close()
paddle_add=150

class Item:
    def __init__(self,canvas,paddle):
        self.canvas=canvas
        self.paddle = paddle
        self.id= canvas.create_polygon(10,0,20,20,0,20, outline='black', fill='cyan')
        self.canvas.move(self.id, random.randint(100,1300), -22)
        self.y = 2
        pos = self.canvas.coords(self.id)
    def draw(self):
        pos = self.canvas.coords(self.id)
        self.canvas.move(self.id, 0, self.y)
        if (time_score) % 10 == 0:
            print('pie')
            canvas.itemconfig(item.id, state='normal')
            self.canvas.move(self.id, random.randint(100,1300), -22)
    def hit_paddle(self, pos):
        paddle_pos = self.canvas.coords(self.paddle.id)
        pos = self.canvas.coords(self.id)
        if pos[4] >= paddle_pos[0] and pos[2]<= paddle_pos[2]:
            if pos[3] == ((paddle_pos[1]+1) or (paddle_pos[1]-1)) and pos[3] <= paddle_pos[3]:
                return True
            return False
    def re_create(self):
        if round(time_score) % 10 == 0:
            print('lobster')
            canvas.itemconfig(item.id, state='normal')
            self.canvas.move(self.id, random.randint(100,1300), -22)


class Ball:
    def __init__(self, canvas, paddle, color):
        self.canvas = canvas
        self.paddle = paddle
        self.id = canvas.create_oval(10, 10, 25, 25, fill=color, outline = "")
        self.canvas.move(self.id, random.randint(0,1500), random.randint(0,150))
        starts = [-3, 3]
        startsb = [-3, 3]
        random.shuffle(starts)
        random.shuffle(startsb)
        self.x = starts[0]
        self.y = startsb[0]
        self.canvas_height = self.canvas.winfo_height()
        self.canvas_width = self.canvas.winfo_width()
        self.hit_bottom = False
    def draw(self):

        self.canvas.move(self.id, self.x, self.y)
        pos = self.canvas.coords(self.id)
        if pos[1] <= 0:
            self.y = 3+speeder
        if self.hit_paddle(pos) == True:
            self.y = -3-speeder
        if pos[3] >= self.canvas_height:
            self.hit_bottom = True
        if pos[0] <= 0:
            self.x = 3+speeder
        if pos[2] >= self.canvas_width:
            self.x = -3-speeder

    def hit_paddle(self, pos):
        paddle_pos = self.canvas.coords(self.paddle.id)
        if pos[2] >= paddle_pos[0] and pos[0]<= paddle_pos[2]:
            if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
                return True
            return False



class Paddle:
    def __init__(self, canvas, color):
        self.canvas = canvas
        self.id = canvas.create_rectangle(0,0,130,15, fill=color)
        self.canvas.move(self.id, 750, 625)
        self.x = 0
        self.started = False
        self.canvas_width = self.canvas.winfo_width()
        self.canvas.bind_all('<KeyPress-a>', self.turn_left)
        self.canvas.bind_all('<KeyPress-Left>', self.turn_left)
        self.canvas.bind_all('<KeyPress-Right>', self.turn_right)
        self.canvas.bind_all('<KeyPress-d>', self.turn_right)
        self.canvas.bind_all('<Button-1>', self.start_game)
    def turn_left(self, evt):
        pos = self.canvas.coords(self.id)
        if pos[0] <= 0:
            self.x = 0
        else: self.x = -4-speeder

    def turn_right(self, evt):
        pos = self.canvas.coords(self.id)
        if pos [2] >= self.canvas_width:
            self.x= 0
        else: self.x = 4+speeder

    def start_game(self, evt):
        self.started= True

    def grow(self):
        pos = self.canvas.coords(self.id)
        global paddle_add
        paddle_add = paddle_add + 10
        self.canvas.coords(self.id, pos[0]-paddle_add,pos[1],pos[2]+paddle_add,pos[3])

    def draw(self):
        self.canvas.move(self.id, self.x, 0)
        pos = self.canvas.coords(self.id)
        if pos[0] <= 0:
            self.x = 0
        elif pos [2] >= self.canvas_width:
            self.x= 0
        if item.hit_paddle(pos) == True:
            canvas.itemconfig(item.id, state='hidden')
            self.grow()

paddle = Paddle(canvas, 'black')
ball = Ball(canvas, paddle, 'red')
item = Item(canvas, paddle)

while 1:
    if ball.hit_bottom == False and paddle.started == True:
        canvas.itemconfig(ClickTS, state='hidden')
        ball.draw()
        paddle.draw()
        item.draw()
        speeder = speeder + .001
        time_score = time_score + .01

    if ball.hit_bottom == True:
        time.sleep(1)
        canvas.itemconfig(game_over, state='normal')
        canvas.itemconfig(ball.id, state='hidden')
        canvas.itemconfig(paddle.id, state='hidden')
        canvas.create_text(750,500, text='Time: %s' % round(time_score), font=('Helvetica', 60,), fill='black')
        canvas.create_text(750,600, text='High Score: %s' % high_score, font=('Helvetica', 50,), fill='black')
        if time_score > high_score:
            high_score = time_score
            canvas.create_text(750,100, text='NEW HIGH SCORE', font=('Ariel', 60), fill='cyan')
            save_file = open('C:\\Users\\hatchfamily\\Desktop\\Python\\Saved Functions\\Saves\\save.dat','wb')
            pickle.dump(high_score, save_file)
            save_file.close()
        break
    tk.update_idletasks()
    tk.update()
    time.sleep(0.01)
`
`从tkinter导入*
随机输入
导入时间
进口泡菜
tk=tk()
标题(“游戏”)
tk.可调整大小(0,0)
tk.wm_属性(“-toppost”,1)
画布=画布(tk,宽度=1500,高度=700,bd=0,highlightthickness=0)
canvas.pack()
游戏结束=画布。创建文本(750350,text='game over',font=('Helvetica',100',,fill='red'))
canvas.itemconfig(游戏结束,state='hidden')
时间分数=0
tk.update()
速度器=0
点击ts=canvas。创建_文本(750350,text='CLICK TO START',font=('Helvetica',70',,fill='blue'))
load\u file=open('C:\\Users\\hatchfamily\\Desktop\\Python\\Saved Functions\\Saves\\save.dat','rb')
高分=四舍五入(pickle.load(加载文件))
加载_文件。关闭()
桨加总=150
类别项目:
定义初始(自我、画布、桨):
self.canvas=canvas
自桨
self.id=canvas.create_多边形(10,0,20,20,0,20,outline='black',fill='cyan')
self.canvas.move(self.id,random.randint(1001300),-22)
self.y=2
pos=self.canvas.coords(self.id)
def牵引(自):
pos=self.canvas.coords(self.id)
self.canvas.move(self.id,0,self.y)
如果(时间分数)%10==0:
打印(‘饼’)
canvas.itemconfig(item.id,state='normal')
self.canvas.move(self.id,random.randint(1001300),-22)
def hit_挡板(自身,位置):
palle\u pos=self.canvas.coords(self.palle.id)
pos=self.canvas.coords(self.id)
如果位置[4]>=划桨位置[0]和位置[2]高分:
高分数=时间分数
canvas.create_text(750100,text='newhighscore',font=('Ariel',60),fill='cyan')
save\u file=open('C:\\Users\\hatchfamily\\Desktop\\Python\\Saved Functions\\Saves\\save.dat'、'wb')
pickle.dump(高分,保存文件)
保存_文件。关闭()
打破
tk.update_idletasks()
tk.update()
睡眠时间(0.01)
`

我不是tkinter方面的专家,但在我看来,好像你在给整数值加0.01

time_score = time_score + .01
如果time_分数每秒更新一次,则可能会通过以下方式进行更改:

time_score = time_score + 1
如果您这样做,我认为您还必须修改以下行:

round(time_score) % 10 == 0

为了更灵活,我建议使用一个名为sleeptime的变量:

sleeptime=0.01
round(time_score) % (10*1/sleeptime) == 0
...
time.sleep(sleeptime)

Item
类的
draw
函数中,尝试添加
round
函数:

因此,与其

if (time_score) % 10 == 0:
使用


否则,浮点运算可能会保证
time\u score
永远不等于
10

如果我这样做,它会比每10秒打印一次“pie”更频繁。@user2840634抱歉,我看到了这行:time.sleep(0.01)。尝试设置四舍五入(时间分数)%10==0到%1000。
if (time_score) % 10 == 0:
if round(time_score) % 10 == 0: