挂一个无耻搬运工:码农教程。
真的打心底里瞧不起为了蹭热度全网照抄代码的某些人。
再次此声明:代码不是python语言,求某些搬运工不要到处搬运害人。
def setup():
size(600,600)
global x, y, vx, vy, bx, by, curBall, aliveBall
global COLOR, c, bc
#球需要有速度,位置,颜色三个属性
#对应x,y坐标、x,y速度、c
#上方球由于固定,可以只有位置和颜色属性
#对应bx,by和bc
x, y = width/2, height-15
#初始化球在中下位置,速度为0,颜色随机给一个
vx, vy = 0, 0
bx, by = [], []
curBall = []
aliveBall = []
COLOR = [color(227,41,54),color(41,188,227),color(41,227,48),color(250,239,13)]
#COLOR颜色列表,c和bc表示列表中的第几个颜色,而不是直接表示颜色
c = int(random(len(COLOR)))
bc = []
for i in range(20):
for j in range(10):
bx.append(i*30)
by.append( j*30)
curBall.append(len(curBall))#显示的球
aliveBall.append(len(aliveBall))#活着的球
bc.append(int(random(len(COLOR))))#死了的球
def draw():
global x, y, vx, vy, bx, by, curBall, aliveBall
global COLOR, c, bc
background(255)
def findDead(i):
d = [i]#打中了第i号球,d[]记录接下来找到的应该死掉的球
def tmp(i):
for j in curBall:
#找和i相邻且同色的球,
#首先排除掉已经找到的球,然后需要颜色编号相同,其次需要距离小于两球半径之和
if j not in d and bc[j]==bc[i] and dist(bx[i],by[i],bx[j],by[j])<31:
d.append(j)#确认过眼神,找到对的球j,用小本本记下来
#接下来再找刚刚找到的球的下一个应该死掉的球
tmp(j)
tmp(i)
#这样一直找下一个该死的泡泡龙
#就得到了所有该死的球 (逃
return d
#画会动的球
fill(COLOR[c])
ellipse(x,y,30,30)
for i in curBall:
#画每个还没死的球
fill(COLOR[bc[i]])
ellipse(bx[i], by[i], 30, 30)
#检查有没有被撞到
if dist(bx[i], by[i], x, y)<30:
if bc[i] == c:
#某个同色球被撞到
#找它旁边该死的球,以及旁边该死的球的旁边的该死的球,以及*******
tmp = findDead(i)
#找到了这一次所有该死的球
#把他们从生死簿上重新做标记
#地狱+1
#人间-1
for t in tmp:
aliveBall.remove(t)
#不管有没有撞到该死的球,都应该飞回原点 (逃
x, y = width/2, height-15
vx, vy = 0, 0
#顺便换个马甲再来
c = int(random(len(COLOR)))
curBall = aliveBall[:]
#更新一下,现在显示的球全是没死的球
x += vx
y += vy
#左右碰壁就反弹
if x>width-15 or x<15:
vx = -vx
# 上面碰壁也反弹
if y<15:
vy = -vy
#下面碰壁就还原
if y>height-15:
x, y = width/2, height-15
vx, vy = 0, 0
#换个马甲
c = int(random(len(COLOR)))
def mousePressed():
global vx, vy
#按下鼠标就发射,给个速度就可
vx = (mouseX-width/2)/100.0
vy = (mouseY-height+15)/100.0
好好学习,day day up
欢迎关注微信订阅号: processing与python与arduino(微信号:p5-py3)
还有终极真实版本,可见我的另一篇文章。
终极版本可以实现键盘左右键控制旋转炮台,s键开炮。同时可以鼠标移动转动炮台,点击开炮。而且上方的群球会随着事件向下移动,开出去的炮打不中同色球就会粘贴到群球上。
泡泡龙终极版