From My Blog(http://bloglong123king.sourceforge.net/?p=522)
一、想法
利用随机数控制圆圈的大小、位置以及颜色,可以产生随机的美感。
让小球动起来,并且在屏幕边界处产生反弹效果。
二、代码
- float circle_x = (float) 0.0;
- float circle_y = (float) 0.0;
- float circle_radius = (float) 0.0;
- int circle_color = 0;
- public void setup() {
- size(displayWidth, displayHeight);
- background(0);
- frameRate(10);
- }
- public void draw() {
- circle_x = random(0, displayWidth);
- circle_y = random(0, displayHeight);
- circle_radius = random(0, (displayWidth + displayHeight) / 20);
- circle_color = (int) random(0, 255);
- colorMode(RGB, 255);
- fill(0,0,0,5);
- rect(0, 0, displayWidth, displayHeight);
- noStroke();
- colorMode(HSB, 255);
- fill(circle_color, 255, 255);
- ellipse(circle_x, circle_y, circle_radius, circle_radius);
- }
截图
三、生成exe文件
将上述代码粘贴到Processing编辑器中,选择“Export Application”,导出成exe文件。
四、设置为屏幕保护程序
将exe文件更改后缀名为scr,右键->安装。
五、做一些变化
- float circle_x = (float) 0.0;
- float circle_y = (float) 0.0;
- float circle_radius = (float) 0.0;
- int circle_color = 0;
- public void setup() {
- size(displayWidth, displayHeight);
- background(0);
- frameRate(10);
- }
- public void draw() {
- circle_x = random(0, displayWidth);
- circle_y = random(0, displayHeight);
- circle_radius = random(0, (displayWidth + displayHeight) / 5);
- circle_color = (int) random(0, 255);
- colorMode(RGB, 255);
- // fill(0,0,0,5);
- // rect(-1, -1, displayWidth+1, displayHeight+1);
- //noStroke();
- colorMode(HSB, 255);
- stroke(circle_color, 255, 255);
- fill(circle_color, 255, 255);
- noFill();
- ellipse(circle_x, circle_y, circle_radius, circle_radius);
- ellipse(circle_x, circle_y, circle_radius-1, circle_radius-1);
- }
截图
六、运动的泡泡
- public static final int circle_nums = 200;
- class BCircle
- {
- public BCircle(float x, float y, float radius, float x_delta, float y_delta, int color) {
- super();
- this.x = x;
- this.y = y;
- this.radius = radius;
- this.x_delta = x_delta;
- this.y_delta = y_delta;
- this.color = color;
- }
- private float x = (float) 0.0;
- private float y = (float) 0.0;
- private float radius = (float) 0.0;
- private float x_delta = (float) 0.0;
- private float y_delta = (float) 0.0;
- private int color = 0; // 0 - 255
- private boolean valueInRange(float val, float min, float max)
- {
- return (val >= min >> val < max);
- }
- public void moveOneStep()
- {
- if (valueInRange(x+x_delta, 0, displayWidth) >>
- valueInRange(y+y_delta, 0, displayHeight))
- {
- x += x_delta;
- y += y_delta;
- }
- if (!valueInRange(x+x_delta, 0, displayWidth))
- {
- x_delta = -x_delta;
- x += x_delta;
- }
- if (!valueInRange(y+y_delta, 0, displayHeight))
- {
- y_delta = - y_delta;
- y += y_delta;
- }
- }
- public void draw(int theme)
- {
- switch(theme)
- {
- case 1:
- {
- noFill();
- colorMode(HSB, 255);
- stroke(color, 255, 255);
- ellipse(x, y, radius+2, radius+2);
- ellipse(x, y, radius+1, radius+1);
- ellipse(x, y, radius, radius);
- }
- break;
- case 2:
- {
- colorMode(HSB, 255);
- fill(color, 255, 255);
- ellipse(x, y, radius+2, radius+2);
- ellipse(x, y, radius+1, radius+1);
- ellipse(x, y, radius, radius);
- }
- }
- }
- }
- List<BCircle> circles;
- public void setup() {
- size(displayWidth, displayHeight);
- background(0);
- frameRate(10);
- circles = new ArrayList<BCircle>(circle_nums);
- }
- public void draw() {
- colorMode(RGB, 255);
- fill(0,0,0,30);
- rect(-1, -1, displayWidth+1, displayHeight+1);
- if (circles.size() < circle_nums)
- {
- float x = random(0, displayWidth);
- float y = random(0, displayHeight);
- float radius = random(20, (displayWidth + displayHeight) / 20);
- float x_delta = random(-50, 50);
- float y_delta = random(-50, 50);
- int color = (int) random(0, 255);
- BCircle circle = new BCircle(x, y, radius, x_delta, y_delta, color);
- circles.add(circle);
- }
- for(int i=0;i<circles.size();i++)
- {
- circles.get(i).moveOneStep();
- circles.get(i).draw(1);
- }
- }
两种主题,截图