日常の進捗

主に自分のための,行為とその習慣化の記録

Mod:Coding Challenge #76: 10PRINT in p5.js

しばらく古いものをやっていたが、昨日公開されたものが新着で出てきたのと、少し別のものもやってみようと思ったのでこれにした。書籍「10 PRINT CHR$(205.5+RND(1)); : GOTO 10」は、Commodore 64という1980年代のコンピュータのBASICというプログラム言語で書かれた10 PRINT CHR$(205.5+RND(1)); : GOTO 10という、1行のみで実行されるコードについて書かれている。

コモドール64 - Wikipedia

Amazon CAPTCHA

10print.org

迷路ジェネレーターに似てるように見えるけどアルゴリズムが随分違っている。Processingで類似したものを書く場合、まず基準位置となるカーソルをx方向に座標を移動させながら、基準値よりランダムな値が小さい場合と大きい場合でバックスラッシュ(\)かスラッシュ(/)を書く、というもの。これで不思議なパターンが作られていく。x座標がウィンドウより溢れた場合xをゼロに戻し、y方向の数値を増やして下方向にカーソルを移動させる。

自分のプログラムではウィンドウを埋め尽くした際に画像を保存したり、描画の背景色、基準値、グリッドの大きさをランダムで変えたりしている。

コード

float x = 0;
float y = 0;
float grid = random(7, 20);
float probability = random(1);
int imageNum = 0;
// setup関数 : 初回1度だけ実行される
void setup() {
  size(960, 540); // ウィンドウサイズを960px,540pxに
  colorMode(HSB, 360, 100, 100); // HSBでの色指定にする
  background(random(360), 80, 50);
}

// draw関数 : setup関数実行後繰り返し実行される
void draw() {
  stroke(0, 0, 100);
  //for (int i = 0; i < 100; i++) {
  if (random(1) < probability) {
    line(x, y, x+grid, y+grid);
  } else {
    line(x, y+grid, x+grid, y);
  }
  x += grid;
  if (x > width) {
    x = 0;
    y += grid;
  }
  if (y > height) {
    saveFrame("10print_"+grid+"_"+imageNum + ".png");
    y = 0;
    background(random(360), 80, 50);
    probability = random(1);
    grid = random(7, 20);
  }
  //}
}

リファレンス