processing-python-泡泡龙

processing-python-泡泡龙

挂一个无耻搬运工:码农教程。
真的打心底里瞧不起为了蹭热度全网照抄代码的某些人。
再次此声明:代码不是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键开炮。同时可以鼠标移动转动炮台,点击开炮。而且上方的群球会随着事件向下移动,开出去的炮打不中同色球就会粘贴到群球上。

泡泡龙终极版

你可能感兴趣的:(processing-python-泡泡龙)