プログラミング入門・p5js
p5jsが得意としているのは、デジタルアートを作ることですが、プログラミングをはじめて勉強するのに、これ以上の環境はないでしょう
1.プログラムとは
プログラムとは「コンピュータへの命令書」のこと!
命令書は英語や記号でコンピュータにタイプしていきます。
タイプし終わったら、コンピュータに「これやっといて」と指示をだす感じです。
2.命令の形式
プログラミング言語は数多く存在しますが、ほとんどの言語に「共通している形式」を紹介します。
まず次の4つの例を見てください。
命令1();
命令2( 情報1 );
命令3( 情報1,情報2 );
命令4( 情報1,情報2,情報3,・・・・ );
というように、命令語の最後には( );( カッコとセミコロン)が付いています。
また、命令によってはカッコの中にカンマで区切って情報を書くものもあります。
実習:ここでp5jsのエディタ(命令をタイプする画面)に最初からタイプしてある
createCanvas(幅、高さ)と background(赤、緑、青)という2つの命令を見ていきましょう。
ここをクリックすると下のエディタが別のタブで開きます。 注意:翻訳するかどうか尋ねられることがありますが、「翻訳しない」を選択してくださいね。
3.つぎにキャンバスに円を描く命令と、キャンバスの座標について理解していきましょう。
円を描けという circle命令 は()の中に次の3つの情報を指定します。
circle( x, y, 直径 );
x座標0はキャンバスの左端で
y座標0はキャンバスの上端になります。
指定した座標に円の中心が来ます。
4.p5jsの命令を出す仕組み(ちょっとだけ特殊です)
p5jsは、エディタ(命令をタイプするところ)の左上の「▷ボタン」を押すと、
function setup()の{}の間に書かれている いくつかの命令を1度だけコンピュータに出します。
function setup(){
命令1();
命令2();
}
setup内の命令を出し終わると、p5jsは、function draw()の{}の間に書かれている いくつかの命令を
停止ボタンを押すまで繰り返してコンピュータに出し続けます。
function draw(){
命令3();
命令4();
}
つまり、p5jsは{ 命令1と命令2 }を出した後、{ 命令3と命令4 }をずっと繰り返して出し続けるということです。
また、
プログラムの中に出てくる「=」の記号は、「書き込め」という意味で、等しいという意味で使いません。
x=5;
の場合、「カードxに5を書き込め」という意味になります。
今の段階では訳が分からないかもしれませんが、動画を見れば納得できると思います。
実習:ではこの仕組みを利用して、円を動かしてみましょう。
5.「命令を出す条件」を指定するifというものを理解していきましょう
次のようにifで「命令を出す何らかの条件」を書いておくと、条件を満たした時だけ命令1と命令2を出します
if(命令を出す条件){
命令1();
命令2();
}
※命令が複数ない場合、つまり1つの時は{ }を省略できます。
6.「命令を繰り返す条件」を指定するwhileというものを理解して行きましょう
次のようにwhileで「命令を繰り返す何らかの条件」を書いておくと、
条件を満たしている間、命令1と命令2を繰り返して出し続けます。
while(命令を繰り返す条件){
命令1();
命令2();
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ここまで、命令をタイプしている時に「なるほど~」という言葉が頭の中に浮かんできているなら、プログラムの基本はばっちりです。
おまけ・・・コピペするだけで実行できます。
let cx,cy,vx,vy;
function setup() {
createCanvas(400, 400);
//中心点の座標
cx = width / 2;
cy = height / 2;
}
function draw() {
//中心点からのベクトル
vx = mouseX - cx;
vy = mouseY - cy;
background(100, 160, 255);
i = -5;
while (i <= 5) {
//下のface命令を呼び出す
face(cx + vx * i, cy + vy * i);
face(cy + vy * i, cx - vx * i);
i += 1;
}
}
//自分で作ったface命令。(関数と言います)
// x, y の位置に顔を書きます。
function face(x, y) {
fill(255, 255, 0);
circle(x, y, 100);
fill(255);
circle(x - 20, y, 30);
circle(x + 20, y, 30);
fill(0);
circle(x + 15, y, 10);
circle(x - 15, y, 10);
fill(255, 200, 200);
circle(x, y + 30, 20);
}