gpt4 book ai didi

Python:如何在 Canvas 上获取记分板

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:40 26 4
gpt4 key购买 nike

我希望乐谱显示在 Canvas 上,但到目前为止还没有成功。我想我可以使用:

self.canvas.create_text(200, 60, fill="darkblue", font="Times 15 italic bold", text="Your score is:",self.score)

不幸的是,没有工作,那么如何让乐谱显示在 Canvas 上?还想知道如何弹出一个消息框说“你赢了!”当分数 = 10 时。最后,如何弹出一个消息框,提示“如果分数 < 10 并且 Canvas 上没有偶数,您就输了。

到目前为止使用 python 3.3 的代码:

        def click(self, event):
if self.canvas.find_withtag(CURRENT):
item_uid = event.widget.find_closest(event.x, event.y)[0]
is_even = False
try: # clicked oval
self.bubbles[item_uid]
except KeyError: # clicked the text
for key, value in self.bubbles.iteritems():
if item_uid == value[5]: # comparing to text_id
if value[4] % 2 == 0:
is_even = True
self.canvas.delete(key) # deleting oval
self.canvas.delete(item_uid) # deleting text
else:
if self.bubbles[item_uid][4] % 2 == 0:
is_even = True
self.canvas.delete(item_uid) # deleting oval
self.canvas.delete(self.bubbles[item_uid][5]) # deleting text
if is_even:
self.score += 1
else:
self.score -= 1

if self.score == 10:
print ("You won")

print (self.score)

最佳答案

这真是一个有趣的游戏!我下面给出的脚本向您展示了如何执行您想要的所有操作(显示当前分数并显示消息)。上面带有 ## 的行是我添加的:

from tkinter import *
import random
##
from tkinter.messagebox import showinfo

class BubbleFrame:

def __init__(self, root):
root.title("Math Bubbles")
self.bubbles = {}
self.score = 0
Button(root, text="Start", width=8, command=self.initialize_bubbles).pack() # This button starts the game, making the bubbles move across the screen
Button(root, text="Quit", width=8, command=quit).pack()
self.canvas = Canvas(root, width=800, height=650, bg='#afeeee')
self.canvas.create_text(400, 30, fill="darkblue", font="Times 20 italic bold", text="Click the bubbles that are multiples of two.")
##
self.current_score = self.canvas.create_text(200, 60, fill="darkblue", font="Times 15 italic bold", text="Your score is:")
self.canvas.pack()

def initialize_bubbles(self):
for each_no in range(1, 21):
xval = random.randint(5, 765)
yval = random.randint(5, 615)
oval_id = self.canvas.create_oval(xval, yval, xval + 30, yval + 30,fill="#00ffff", outline="#00bfff", width=5, tags="bubble")
text_id = self.canvas.create_text(xval + 15, yval + 15, text=each_no, tags="bubble")
self.canvas.tag_bind("bubble", "<Button-1>", lambda x: self.click(x))
self.bubbles[oval_id] = (xval, yval, 0, 0, each_no, text_id)

def click(self, event):
if self.canvas.find_withtag(CURRENT):
item_uid = event.widget.find_closest(event.x, event.y)[0]
is_even = False
try:
self.bubbles[item_uid]
except KeyError:
for key, value in self.bubbles.iteritems():
if item_uid == value[5]:
if value[4] % 2 == 0:
is_even = True
self.canvas.delete(key)
self.canvas.delete(item_uid)
else:
if self.bubbles[item_uid][4] % 2 == 0:
is_even = True
self.canvas.delete(item_uid)
self.canvas.delete(self.bubbles[item_uid][5])
if is_even:
self.score += 1
else:
self.score -= 1

if self.score == 10:
##
showinfo("Winner", "You won!")
##
self.canvas.delete(self.current_score)
##
self.current_score = self.canvas.create_text(200, 60, fill="darkblue", font="Times 15 italic bold", text="Your score is: %s"%self.score)

def loop(self, root):
for oval_id, (x, y, dx, dy, each_no, text_id) in self.bubbles.items():
dx += random.randint(-1, 1)
dy += random.randint(-1, 1)
dx, dy = max(-5, min(dx, 5)), max(-5, min(dy, 5))
if not 0 < x < 770:
dx = -dx
if not 0 < y < 620:
dy = -dy
self.canvas.move(oval_id, dx, dy)
self.canvas.move(text_id, dx, dy)
self.bubbles[oval_id] = (x + dx, y + dy, dx, dy, each_no, text_id)
root.after(100, self.loop, root)

if __name__ == "__main__":
root = Tk()
frame = BubbleFrame(root)
frame.loop(root)
root.mainloop()

关于Python:如何在 Canvas 上获取记分板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com