class Ball{ int col; Particle me; Ball(){ col = int(random(2)); me = physics.makeParticle(1.0, width / 2, 0, 0); } void draw(){ update(); noStroke(); fill(colorTable[col]); ellipse(me.position().x(), me.position().y() - 20, 20, 20); fill(0); ellipse(me.position().x(), me.position().y() - 20, 10, 10); } void update(){ //figure which column the ball is in - int column = constrain((int)me.position().x() / graph.columnWidth, 0, graph.columns - 1); if(me.position().y() > graph.blanket[column].position().y()){ me.moveTo(me.position().x(), graph.blanket[column].position().y() - 1, 0); me.setVelocity(me.velocity().x(), -me.velocity().y() / 2, 0); } int rightColumn = constrain(column + 1, 0, graph.columns - 1); int leftColumn = constrain(column - 1, 0, graph.columns - 1); //roll code if(graph.blanket[rightColumn].position().y() < graph.blanket[column].position().y()){ float yDelta = abs(graph.blanket[rightColumn].position().y() - graph.blanket[column].position().y()); float xDelta = columnWidth; float gradient = yDelta / xDelta; me.addVelocity(constrain(-gradient,-1.5,1.5),0,0); } if(graph.blanket[leftColumn].position().y() < graph.blanket[column].position().y()){ float yDelta = abs(graph.blanket[leftColumn].position().y() - graph.blanket[column].position().y()); float xDelta = columnWidth; float gradient = yDelta / xDelta; me.addVelocity(constrain(gradient,-1.5,1.5),0,0); } if(column == 0){ if(col == 0){ score++; } else { score--; } col = int(random(2)); me = physics.makeParticle(1.0, width / 2, 0, 0); sound.stop(); sound.play(); println(score); } if(column == graph.columns - 1){ if(col == 1){ score++; } else { score--; } col = int(random(2)); me = physics.makeParticle(1.0, width / 2, 0, 0); sound.stop(); sound.play(); println(score); } } } void initColors(){ colorTable = new color[2]; colorTable[0] = color(255, 0, 0); colorTable[1] = color(0, 0, 255); }