How to display and update a score on screen?

后端 未结 1 906
[愿得一人]
[愿得一人] 2021-01-15 18:37

My question is about displaying and updating text, in order to display the score on screen.

I would like to create a score like the real game that

1条回答
  •  时光说笑
    2021-01-15 19:02

    Here is one approach to display the scores: It uses a tk.Label, that is updated at the same time the score increases.

    The trigger that increases the score is currently a random call to on_change; you can modify this to be a test if a pipe x coordinates becomes lower than the bird x coordinates (the bird successfully crossed the obstacle)

    You can, if you want relocate the score label on the canvas.

    import random
    import tkinter as tk
    
    
    WIDTH, HEIGHT = 500, 500
    
    
    def create_pipes():
        pipes = []
        for x in range(0, WIDTH, 40):
            y1 = random.randrange(50, HEIGHT - 50)
            y0 = y1 + 50
            pipes.append(canvas.create_line(x, 0, x, y1))
            pipes.append(canvas.create_line(x, y0, x, HEIGHT))
        return pipes
    
    
    def move_pipes():
        for pipe in pipes:
            canvas.move(pipe, -2, 0)
            x, y0, _, y1 = canvas.coords(pipe)
            if x < 0:
                canvas.coords(pipe, WIDTH+20, y0, WIDTH+20, y1)
    
        if random.randrange(0, 20) == 10:
            on_change()
    
        root.after(40, move_pipes)
    
    
    def on_change():
        global score
        score += 1
        score_variable.set(f'score: {score}')
    
    
    root = tk.Tk()
    tk.Button(root, text='start', command=move_pipes).pack()
    score = 0
    score_variable = tk.StringVar(root, f'score: {score}')
    score_lbl = tk.Label(root, textvariable=score_variable)
    score_lbl.pack()
    
    canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT, bg="cyan")
    canvas.pack()
    
    pipes = create_pipes()
    
    root.mainloop()
    

    0 讨论(0)
提交回复
热议问题