processing.js

random walk

by uto usui

HTML

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js"></script>
<div class="wrap">
	<h1>processing.js</h1>
	<p class="lead">random walk</p>
	<canvas id="myCanvas"></canvas>
</div>
<link href="https://fonts.googleapis.com/css?family=Dancing+Script:400,700" rel="stylesheet">

SCSS

body {
	display: flex;
	justify-content: center;
	align-items: center;
	width: 100%;
	height: 100vh;
	font-family: 'Dancing Script';
	text-align: center;
  background-image: linear-gradient(-30deg,#f7cac9 20%,#91A8d0 85%);
}

h1 {
	font-size: 42px;
	font-weight: bold;
	color: #32355a;
}

canvas {
	margin: 20px auto;
	border: 3px dashed rgba(#32355a, .55);
  background-color: rgba(white, .15);
}

JavaScript

</script>
<script type="application/processing" data-processing-target="myCanvas">


Walker w1; // Walker型の変数
Walker w2;
Walker w3;

void setup() {
  size(320,320);
  frameRate(60);
  colorMode(HSB,360,100,100,100);
  background(180, 35, 80, 20);
	w1 = new Walker(); /// Walker object
	w2 = new Walker();
  w3 = new Walker();
}

void draw() {
  w1.step();
  w1.render();
	w2.step();
  w2.render();
  w3.step();
  w3.render();
}


class Walker {
  int x;
	int y;

  Walker() { // walkerのsetup
    x = width/2;
    y = height/2;
  }
	
	void step() {
    int r = int(random(4)); // 0から3を出力
    if (r == 0) {    
      x++;
    } else if (r == 1) {
      x--;
    } else if (r == 2) {
      y++;
    } else {
      y--;
    }
		
  	// 画面からはみ出さない値に整える
    x = constrain(x, 0, width-1);
    y = constrain(y, 0, height-1);
  }

  void render() {
    stroke(150, 0, 20, 20);
    strokeWeight(2);
    point(x,y);
  }
}