挂一个无耻搬运工:码农教程。
真的打心底里瞧不起为了蹭热度全网照抄代码的某些人。
再次此声明:代码不是python语言,求某些搬运工不要到处搬运害人。

 1 def setup():
 2     size(600,600)
 3     global x, y, vx, vy, bx, by, curBall, aliveBall
 4     global COLOR, c, bc
 5     #球需要有速度,位置,颜色三个属性
 6     #对应x,y坐标、x,y速度、c
 7
 8     #上方球由于固定,可以只有位置和颜色属性
 9     #对应bx,by和bc
10
11     x, y = width/2, height-15
12     #初始化球在中下位置,速度为0,颜色随机给一个
13     vx, vy = 0, 0
14     bx, by = [], []
15     curBall = []
16     aliveBall = []
17     COLOR = [color(227,41,54),color(41,188,227),color(41,227,48),color(250,239,13)]
18     #COLOR颜色列表,c和bc表示列表中的第几个颜色,而不是直接表示颜色
19     c = int(random(len(COLOR)))
20     bc = []
21     for i in range(20):
22         for j in range(10):
23             bx.append(i*30)
24             by.append( j*30)
25             curBall.append(len(curBall))#显示的球
26             aliveBall.append(len(aliveBall))#活着的球
27             bc.append(int(random(len(COLOR))))#死了的球
28
29 def draw():
30     global x, y, vx, vy, bx, by, curBall, aliveBall
31     global COLOR, c, bc
32
33     background(255)
34     def findDead(i):
35         d = [i]#打中了第i号球,d[]记录接下来找到的应该死掉的球
36         def tmp(i):
37             for j in curBall:
38             #找和i相邻且同色的球,
39             #首先排除掉已经找到的球,然后需要颜色编号相同,其次需要距离小于两球半径之和
40                 if j not in d and bc[j]==bc[i] and dist(bx[i],by[i],bx[j],by[j])<31:
41                     d.append(j)#确认过眼神,找到对的球j,用小本本记下来
42                     #接下来再找刚刚找到的球的下一个应该死掉的球
43                     tmp(j)
44         tmp(i)
45         #这样一直找下一个该死的泡泡龙
46         #就得到了所有该死的球 (逃
47         return d
48
49     #画会动的球
50     fill(COLOR[c])
51     ellipse(x,y,30,30)
52
53     for i in curBall:
54         #画每个还没死的球
55         fill(COLOR[bc[i]])
56         ellipse(bx[i], by[i], 30, 30)
57         #检查有没有被撞到
58         if dist(bx[i], by[i], x, y)<30:
59             if bc[i] == c:
60                 #某个同色球被撞到
61                 #找它旁边该死的球,以及旁边该死的球的旁边的该死的球,以及*******
62                 tmp = findDead(i)
63                 #找到了这一次所有该死的球
64                 #把他们从生死簿上重新做标记
65                 #地狱+1
66                 #人间-1
67                 for t in tmp:
68                     aliveBall.remove(t)
69             #不管有没有撞到该死的球,都应该飞回原点 (逃
70             x, y  = width/2, height-15
71             vx, vy = 0, 0
72             #顺便换个马甲再来
73             c = int(random(len(COLOR)))
74     curBall = aliveBall[:]
75     #更新一下,现在显示的球全是没死的球
76     x += vx
77     y += vy
78     #左右碰壁就反弹
79     if x>width-15 or x<15:
80         vx = -vx
81     # 上面碰壁也反弹
82     if y<15:
83         vy = -vy
84     #下面碰壁就还原
85     if y>height-15:
86         x, y = width/2, height-15
87         vx, vy = 0, 0
88         #换个马甲
89         c = int(random(len(COLOR)))
90
91 def mousePressed():
92     global vx, vy
93     #按下鼠标就发射,给个速度就可
94     vx = (mouseX-width/2)/100.0
95     vy = (mouseY-height+15)/100.0
12-29 22:28