#author("2016-10-19T15:32:55+09:00","default:kyo-in","kyo-in") #author("2016-10-19T15:34:37+09:00","default:kyo-in","kyo-in") *講義資料の予習 [#i0f87ff4] 以下のプログラムを見やすくすることを考えると, // 定数 final float gravity = 9.8 / 60; // <-- 1/60秒あたりの重力加速度 // 変数 float y; // <-- ボールのy座標 float vy; // <-- ボールの速度のy成分 void setup() { size(200, 480); noStroke(); fill(0, 0, 0); y = 0; vy = 0; } void draw() { vy += gravity; // <-- 速度に重力加速度を加算する y += vy; // <-- ボールが速度ぶん移動する background(255, 255, 255); ellipse(100, y, 40, 40); } ボールを描いている, ellipse(100, y, 40, 40); は,引数に直接値を指定しており,プログラムの見やすさとしてはよろしくない.そこで,変数を使用し, ellipse(x, y, d, d); とする. ~ ~ ~ 課題を進めていくと,ボールのために float x; //x座標 float y; //y座標 float vx; //x方向速度 float vy; //y方向速度 という4つのグローバル変数ができる.しかしながら,再度プログラムの見やすさという観点からすれば, float ボールの情報; として,まとめたい.そこで配列の出番である. float[] ball0; ただし,配列はnew演算子を使用し,メモリ上に実際に値を記憶する領域を作らなければ使えない.また,プログラム中にball0[0]と書かれても,この値が何を示しているのか分からないので,添え字に定数を使用する. ... final int X = 0; final int Y = 1; final int VX = 2; final int VY = 3; float[] ball0; ... void setup(){ ... ball0 = new float[4]; ball0[X] = ...; ball0[Y] = ...; ... ... } ~ ~ ~ さらに課題を進めていくと, void draw(){ background(0, 0, 100); //画面を白(HSB)でぬりつぶす //ボールを動かす ... ... ... ... //ボールを描く ellipse(ball0[X], ball0[Y], d, d); } となっていく.またプログラムを見やすくるのであれば,自分で関数を作り, void draw(){ background(0, 0, 100); //画面を白(HSB)でぬりつぶす //ボールを動かす ボールを動かす(動かすボール); //ボールを描く ellipse(ball0[X], ball0[Y], d, d); } としたい. ボールを動かす関数を作ることを考える. +関数名はboundBallとする +戻り値は不要 +引数には動かす対象のボールを指定できるようにする 1と2から, void boundBall(){ } 3は,今,1個のボールの情報を1つのfloatの配列にまとめているので,引数(入力)にはfloatの配列を指定できるようにしなければならない.よって, void boundBall(float[] b){ //ボールbを動かす処理 ... ... ... } となる. *再帰 [#t839a26e] 基本的な再帰を使ったプログラム(階乗を計算する). 基本的な再帰を使ったプログラム(階乗を計算する).使いどころによっては,プログラムを見やすく短くすることができる. void setup(){ int x = 5; int y; y = factorial(x); println(x + "!=" + y); } int factorial(int x) { int factorial(int x){ if (x <= 0) return 1; else return x * factorial(x-1); }