【发布时间】:2020-08-17 17:01:39
【问题描述】:
我能够使用 tkinter 对一些移动球进行编程。我用了两种不同的颜色。现在我希望白球在击中红球时将颜色变为红色。有人可以帮我吗?
(一个额外但不那么重要的一点是,如果一个球撞到另一个球会改变方向,那么哪个方向应该是随机的,但这不是那么重要)
总的来说,我有一个问题要弄清楚,球是如何相互作用的。这是我的代码:
from tkinter import *
import time
import random
WIDTH = 800
HEIGHT = 500
tk = Tk()
canvas = Canvas(tk, width=WIDTH, height=HEIGHT, bg="black")
tk.title("Drawing")
canvas.pack()
colors = ['red', 'green', 'blue', 'orange', 'yellow', 'cyan', 'magenta',
'dodgerblue', 'turquoise', 'grey', 'gold', 'pink']
class Ball:
def __init__(self, color):
self.size = random.randrange(5, 10)
#color = random.choice(colors)
self.xpos = random.randrange(0,WIDTH)
self.ypos =random.randrange(0,HEIGHT)
self.shape = canvas.create_oval(self.xpos-self.size, self.ypos -self.size,self.xpos +self.size,self.ypos+self.size, fill=color)
self.speedx = random.randrange(-5, 5)
self.speedy = random.randrange(-5, 5)
def update(self):
canvas.move(self.shape, self.speedx, self.speedy)
pos = canvas.coords(self.shape)
if pos[2] >= (WIDTH) or (pos[0] ) <= 0:
self.speedx *= -1
if pos[3] >= (HEIGHT) or (pos[1]) <= 0:
self.speedy *= -1
ball_list = []
Infiziert_list =[]
for i in range(100):
ball_list.append(Ball('white'))
for j in range(3):
ball_list.append(Ball('red'))
while True:
for ball in ball_list:
ball.update()
tk.update()
#time.sleep(0.001)
非常感谢
【问题讨论】:
-
首先:非常感谢,但不是真的,因为我不知道如何在我拥有的代码中得到它。所以我需要在更新的东西中以某种方式实现它,但是从 pos 我得到一个返回 3 点的向量。所以对于每个球individuell。所以我不知道如何将位置 ball1 连接到所有其他球