Dot[] Hdots = new Dot[12]; Dot[] Mdots = new Dot[60]; Dot[] Sdots = new Dot[60]; void setup() { size(600,600); smooth(); noStroke(); for (int i=0; i < 12; i++) { Hdots[i] = new Dot(64*(i%3)+floor(i/3)*8, 8*(i%3)+floor(i/3)*64, 64, 1+(i%3), 1); } for (int i=0; i < 60; i++) { Mdots[i] = new Dot(200+(i*3), 3*i, 16, .5+(i%6)*.5, 1); // Mdots[i] = new Dot(200+18*(i%10)+floor(i/10)*3, 3*(i%10)+floor(i/10)*36, 10, .8+floor(i/10)*.8, 1); } for (int i=0; i < 60; i++) { Sdots[i] = new Dot(400+(3*i), 3*i, 4, .4+(i%6)*.8, 1); } } void draw() { int h = hour() % 12; if (h == 0) { h = 12; } int m = minute(); int s = second(); if (mousePressed == false ) { fill(0,30); rect(0,0,width,height); for (int i=0; i < 12; i++) { Hdots[i].move(); } for (int i=0; i < 60; i++) { Mdots[i].move(); Sdots[i].move(); } for (int i=0; i < h; i++) { fill(255,20+i*10); Hdots[i].display(); } for (int i=0; i < m; i++) { fill(255,10+i*4); Mdots[i].display(); } for (int i=0; i < s; i++) { fill(255,10+i*10); Sdots[i].display(); } } } class Dot { float x; float y; float diameter; float speed; int direction; Dot(float xpos, float ypos, float dia, float sp, int dir) { x = xpos; y = ypos; diameter = dia; speed = sp; direction = dir; } void start(float xpos, float ypos, float dia, float sp, int dir) { x = xpos; y = ypos; diameter = dia; speed = sp; direction = dir; } void move() { y += (speed * direction); if (y > height-speed) { direction *= -1; } if (y < speed) { direction = 1; } } void display () { ellipse(x, y, diameter, diameter); } }