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);
}
}