processing-python-泡泡龙

def setup():
    size(600,600)
    global x, y, v, bx, by, curBall, aliveBall, deadBall
    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 = []
    deadBall = []
    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):
            ball.append([i*30, j*30])
            curBall.append(len(curBall))#显示的球
            aliveBall.append(len(aliveBall))#活着的球
            ballc.append(int(random(len(COLOR))))#死了的球
            
def draw():
    global loc, v, ball, curBall, deadBall
    global COLOR, c, ballc
    
    background(255)
    def findDead(i):
        d = [i]#打中了第i号球,d[]记录接下来找到的应该死掉的球
        def tmp(i):
            for j in curBall:
            #找和i相邻且同色的球,
            #首先排除掉已经找到的球,然后需要颜色编号相同,其次需要距离小于两球半径之和
                if j not in d and ballc[j]==ballc[i] and dist(ball[i][0],ball[i][1],ball[j][0],ball[j][1])<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
                deadBall.extend(tmp)
                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

 

上一篇:SpringBoot1.5.3.RELEASE整合2.1.6easyexcel导入导出.xlsx文件


下一篇:java-有什么办法可以使圆圈从可移动对象的顶部反弹?