-1

这是我在stackoverflow上的第一篇文章,如果不是很清楚,我很抱歉。所以,我需要帮助我的 CompSci 课程的程序。

以下是说明:

在窗口中心初始化 1000 个点。

  • 在每个时间步重复 1000 次...
    • 翻转一个四面硬币,然后向上或向下或向左或向右移动一个点。- 我们的想法是为 1000 点中的每一个独立地执行此操作。因此,一个点的运动不会影响任何其他点的运动。
    • 在每个点的当前位置绘制一个“点”或 1 x 1 矩形。
    • 附上三个屏幕截图,显示早期、中期和晚期分布。

我已经粘贴了我到目前为止的内容:

这段代码的问题是:它不会显示“移动”的点。我的导师希望它像动画一样。因为有 1000 个点并且它们移动了 1000 次,所以不同“帧”之间的延迟必须非常短。

如果有人可以帮助我做到这一点,我将非常感激。

from Tkinter import Tk, Canvas
from random import randint


d=0
t=0
v=1000

x = []
y = []
for i in range(1000):
    x.append(300)
    y.append(300)





root=Tk()
canvas=Canvas(root, width=600, height=600, bg="white")#creates the canvas

for l in range(v):
    for k in range(t):
        for i in range(len(x)):
            x[i] += randint(-2,2)
            y[i] += randint(-2,2)



    for i in range(1000):
        canvas.create_rectangle(x[i],y[i],x[i],y[i])
    if l < 999:
        for i in range(1000):
            canvas.create_rectangle(x[i],y[i],x[i],y[i], outline='white')

    t+=1
    l+=1

canvas.pack()
root.mainloop()
4

1 回答 1

1

问题似乎是canvas不知道动画的每个步骤该做什么。如果您将用于更新画布的代码放在一个函数中(可能称为redraw()),则在程序的主要过程中调用该函数以绘制第一张图像,并包含一个调用,如函数canvas.after(tim,redraw)的最后一行,redraw()这将确保画布每tim毫秒更新一次。

(编辑)

我还要注意,randint(-2,2)从 list 生成随机选择[-2,-1,0,1,2],而不是从 list生成随机选择[-2,2],这是您似乎希望的。此外,如果您试图模拟一个四面骰子,其中四个面是:+2x、-2x、+2y、-2y;然后分别计算 x 和 y 方向上的随机运动不会这样做,因为它会在每个时间步为每个点生成 x 和 y 方向上的运动。

于 2013-02-03T02:53:10.123 回答