Mod:Coding Challenge #7: Solar System in Processing - Part 1 (2D)
そんなに書き換えなかった。今回2Dで次回が3Dなのでそっちを頑張る感じ。
Planet sun; // setup関数 : 初回1度だけ実行される void setup() { size(960, 540); // ウィンドウサイズを960px,540pxに colorMode(HSB, 360, 100, 100, 100); // HSBでの色指定にする sun = new Planet(30, 0, 0); sun.spawnMoons(5, 1); background(0, 0, 0); } // draw関数 : setup関数実行後繰り返し実行される void draw() { fill(0, 0, 0, 30); rect(0, 0, width, height); translate(width/2, height/2); sun.draw(); sun.orbit(); } class Planet { float radius; float angle; float distance; Planet[] planets; float orbitSpeed; Planet(float r, float _d, float o) { radius = r; angle = random(TWO_PI); distance = _d; orbitSpeed = o; } void spawnMoons(int total, int level) { planets = new Planet[total]; for (int i = 0; i < planets.length; i++) { float r = radius/(level * 1.2); float d = random(75, 500)/level; float o = random(0.001,0.01); if(random(1) < 0.5) o *= -1; planets[i] = new Planet(r, d, o); if (level < 3) { int num = int(random(4)); planets[i].spawnMoons(5, level+1); } } } void orbit() { angle = angle + orbitSpeed; if (planets != null) { for (int i = 0; i < planets.length; i++) { planets[i].orbit(); } } } void draw() { pushMatrix(); rotate(angle); translate(distance, 0); fill(0, 0, 100, 50); noStroke(); ellipse(0, 0, radius*2, radius*2); if (planets != null) { for (int i = 0; i < planets.length; i++) { planets[i].draw(); } } popMatrix(); } }