我写了这个脚本来使用海龟模块复制我在NumberFile频道上看到的混沌游戏。有大量的点被画出来,以使它在更大的范围内工作良好。我假设大量的点是什么原因导致程序开始运行慢了一点,我想知道是否有人可以帮我想出一个解决这个问题的办法
我对任何类型的解决方案都持开放态度,只要控件保持不变,顶点的数目可以是3以上的任意数
如果有人不知道什么是混沌游戏,这是一个游戏,你有任何数量的顶点多边形。首先在多边形内放置一个点,随机选择一个顶点,然后在刚才放置的点和随机选择的顶点之间画一个新点。你不断重复这个过程,每次你都会使用新画的点
在这个脚本中,我还包括了一个规则,以确保它不会连续两次选择同一个顶点来形成具有3个以上顶点的漂亮分形。3个顶点实际上形成了Sierpinski三角形
以下是NumberFile视频的链接:https://www.youtube.com/watch?v=kbKtFN71Lfs
正如您可能知道的,我对Python和一般的编码有些陌生
完整代码:
import turtle as t
import tkinter as tk
from tkinter import ttk
from random import randint
wn = t.Screen()
wn.colormode(255)
t.pu();t.ht();t.speed(0)
plist = []
l = 0
val = 0
pb=ttk.Progressbar(orient="horizontal",length=wn.window_width(),mode="determinate")
pb.pack(side=tk.BOTTOM)
pb["value"]=0
def Clear():
t.clear()
plist = []
def Dot(x, y):
t.goto(x, y)
t.dot(5, (0, 0, 255))
plist.append(t.pos())
def Run(x, y):
wn.onscreenclick(None)
wn.tracer(0, 0)
l = len(plist)
pb["maximum"]=l*1000
xyc = randint(0, l-1)
xyc_old = 0
for _ in range(l*10):
xyc = randint(0, l-1)
for i in range(100):
xyc = randint(0, l-1);
if l >= 4:
while xyc == xyc_old:
xyc = randint(0, l-1);
xyc_old = xyc;
t.goto((t.pos()[0]+plist[xyc][0])/2, (t.pos()[1]+plist[xyc][1])/2);
t.dot(2, (255, 0, 0));
pb["value"]+=1;
pb.update()
wn.update()
plist.clear()
wn.onscreenclick(Dot, btn=1)
wn.onscreenclick(Run, btn=3)
wn.onscreenclick(Dot, btn=1)
wn.onscreenclick(Run, btn=3)
wn.onkey(Clear, "c")
wn.listen()
wn.mainloop()
我觉得我的编码风格和这里的很多人很不一样,但我希望这不是问题
谢谢你
令人惊讶的是,没有。这是你自己的仪器(进度条)减慢你。点评:
看看会发生什么
这是一个与糟糕的编码风格重叠的问题。例如,缺少空格、使用分号、代码中没有有效的ops等。我对你的代码的修改:
其他变化包括:
Clear()
中的plist = []
没有global plist
就不能工作。改用plist.clear()
您还需要在
Run
期间禁用(并重新启用)wn.onkey(Clear, "c")
,否则您的用户可能会中断程序。您还需要分别禁用两个鼠标按钮你真的想要
randrange()
,而不是randint()
相关问题 更多 >
编程相关推荐