第二回初級プログラミング講座
- 5. 解説7.1
• 今回setupという関数を作ってみました。
• しかしこれはなかなか説明のしようがありません。
• あえて説明するのであれば、Processingは実行するとまず
初めにsetupという関数を呼び出すことになっています。
• 「void」というのは関数に使う型の一つで、定義しています。
• ところで、今まではなんだったんだという話なのですが、Processingは
この辺が優秀なところで、なにも書かないと
すべてをsetup関数の中に書いたような動きをしてくれるのです。
• つまり、今まで書いたことをこの中括弧の中に書いたとしても同じ挙動
をします。
• よって今後はsetup部分を省略します。
5
- 8. 関数を作る 出力 解説
• このように出力されます。
• まず、5行目の「void one()」というように記述し、
「one」という名前の関数を定義しましたよね。
• 「void」はさっき言ったように関数を定義する句です。
• それをsetup、つまりプログラムが始まった時にその中にある
「one();」を通過することによってこの関数が実行されます。
• さて、このプログラムをいじって関数の性質を知りましょう。
SteamEngine out7.2
8
- 10. 関数の性質 出力 解説
• このように出力されます。
• これは関数の性質の一つである。
「関数の終了地点にたどり着くと呼びだされたところに戻る」
という性質によるものです。
• 今、「one関数」の中には「SteamEngine」と表示するプログラムが入ってい、
これを実行すると、one関数の最後にたどり着きます。
• そうすると「one関数」は実行地点を自分を呼んだ場所に戻します。
SteamEngine
DieselEngine out7.3
10
- 12. 返り値 出力 解説1
• このように出力されます。
• 新たに「1」と出力されましたがこれは「one関数」が「return文」
を使って「1」を計算結果として返したからです。今回、「one関数」の定義にて
「void」を「int」に書き換えましたが、この「int」というのは返り値の型を示して
います。
• 「void」というのは「虚無」という意味で、これは計算結果を与えない関数であ
ることを示していました。
SteamEngine
1
DieselEngine out7.4
12
- 21. 引数1 出力 解説1
• まず、こう出力されたと思います。
• 引数は関数を定義するときに名前のあとの「()」の中に
型と引数の名前を書きます。ちょうど変数の宣言みたいですね。
• この「()」の中で宣言した引数は関数の中だけで使う事ができます。
• また、関数を呼び出すときはこの定義にしたがって値を与えなくては
なりません。
SteamEngine
5
DieselEngine out8.1
21
- 22. 引数1 解説2
• それでは書いたコードのほうを出力を見ながら解説します。
• 「one」という関数をxというint型の値を取る関数として定義しました。
• 「one関数」を呼び出す「setup」側ではそれに併せて「(4)」というよう
に記述し4という値を渡しました。
• 「one関数」では「SteamEngine」と出力したあと
「xに1を足した数」を返します。
• よって返ってきた値を表示させている「println(one(4));」
では「5」と表示されました。
22
- 24. 引数2 出力 解説
• 出力はこうなります。
• 動作結果は想像に難しくなかったかもしれません。
• 新たに名前を変えて定義したsum関数はxとyを足しあわせてその結
果を返してくれます。
• このsum関数は正しい形で呼び出せばint型なのでint型として作用し
ます。
7 out8.2
24
- 25. おまけ 変数の寿命
• おまけですが、結構重要な要素です。
• 実は変数には寿命があります。
• 実は中括弧の中で定義した変数はその中括弧の中でしか使えない
のです。
• 一番外で定義した変数はずっと使えます。
• 中括弧の中にある中括弧を入れ子、もしくはネストなどといいますが、
外のネストで定義された変数は内のネストで定義することはできま
せん。
25
- 31. 直線を描く
• こう書き加えて下さい。
• パラメータは「line(x1, y1, x2, y2)」とすると
x1 始まりの位置のX座標
y1 始まりの位置のY座標
x2 終わりの位置のX座標
y2 終わりの位置のY座標 です。
void setup(){
size(640, 480);
line(10, 10, 50, 50);
}
1
2
3
4 code1.2
31
- 35. 色を変えてみる 1
• こうすると塗りつぶした部分の色が変わります。
• 「fill」というのは「満たす」という意味です。
• またパラメータは「fill(R, G, B)」です。
• R 赤要素(0-255)
• G 緑要素(0-255)
• B 青要素(0-255)
• この三色は光の三原色でコンピュータ上で表現される1677万余りの
色をすべて表現できます。
void setup(){
size(640, 480);
fill(255, 0, 0);
ellipse(60, 60, 50, 50);
}
1
2
3
4
5 code1.5
35
- 36. 色を変えてみる 2
• こうすると枠線部分の色が変わります。
• 「stroke」というのは「一筆」という意味です。
• パラメータは「fill()」と同じです。
• また、「nofill()」を呼び出すと塗りつぶしがなくなり。
• 「nostroke()」を呼び出すと枠線がなくなります。
• これらは次以降上書きされるまで保持されます。
void setup(){
size(640, 480);
stroke(255, 0, 0);
ellipse(60, 60, 50, 50);
}
1
2
3
4
5 code1.5
36
- 43. 描画関数 解説
• まず、「draw関数」の仕組みについてです。
• これは定期的に呼び出されるということを利用するとすごくうまく
ゲームが作れます。
• このプログラムでは「x += 3」という式を使って呼び出される度に3を
加算してみました。
• 「draw関数」は一定時間に一度呼び出されるのでこれによってxの値
は一定の変位で増加します。
• 丸の描画関数にこれを渡しているので画面上の円が一定速度で右
方向に移動しました。
43
- 44. 反射するボール
• さっきのプログラムの8行目からをこう書き換えて下さい
• x = 50 y = 50 vx = 3 vy = 3 r =15
• widthとheightはProcessingの機能で窓の大きさが分かります。
ellipse(x, y, r*2, r*2);
if(x <= r || x >= width-r)
vx *= -1;
if(y <= r || y >=height-r)
vy *= -1;
x += vx;
y += vy;
8
9
10
11
12
13
14 code2.3
- 45. 反射するボール 解説
• このような単純なコードでも結構面白い動きが見れたと思います。
• 今回新しい論理式の記号が出てきました。「||」です。
• これは「バーティカルライン」といい、縦棒です。
• 論理式でいうところの「or」を示します。
• この条件式はなにを示しているかというと、上下と左右の画面の枠
を壁としてそこにぶつかったら「vx」「vy」つまり速度を「−1」して移動
方向を逆にします。これによって物体が反射しているように見えます。
• 描画関数「ellipse」にxやyなどの変数を与えることによって値が変位
しても動作するということが今回のポイントです。
- 61. わたし は ちからつきました。
• すいません、今週もまたスライドが完成しませんでした。
• ここからは演習でやってみてもらいます。
• ここからやることは以下のとおりです。
• 相手のバーを作る
• 画面外に出たら点数を加算して初期化する
• ↑さっき「reset関数」を作ったので難しくないと思います。