i want score show on canvas far no avail. thought use:
self.canvas.create_text(200, 60, fill="darkblue", font="times 15 italic bold", text="your score is:",self.score) didn't work unfortunately, how score show on canvas? wondering how message box pop saying "you won!" when score = 10. , lastly, how message box pop saying "you lost if score < 10 , there no numbers on canvas.
code far using 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 text key, value in self.bubbles.iteritems(): if item_uid == value[5]: # comparing 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)
that fun game! script gave below shows how want (display current score , show messages). lines ## above them added:
from tkinter import * import random ## 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() # button starts game, making bubbles move across 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 bubbles 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): 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: 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): 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()
Comments
Post a Comment