導入編の「サンプルプログラムの使い方」で動かした家を描くサンプルプログラムを解説します。
下に、導入編で動かした家を描くサンプルプログラムを示します。
1: /* 2: * 家を書くプログラム 3: * 2003/05/08 4: * Yoshiaki Matsuzawa 5: */ 6: public class House extends Turtle { 7: 8: //起動処理 9: public static void main(String[] args) { 10: Turtle.startTurtle(new House()); 11: } 12: 13: //タートルを動かす処理 14: public void start(){ 15: 16: //屋根を書く 17: rt(30);//30度右を向く 18: fd(50);//50歩前に進む 19: rt(120); 20: fd(50); 21: rt(120); 22: fd(50); 23: 24: //本体を書く 25: lt(90); 26: fd(50); 27: lt(90); 28: fd(50); 29: lt(90); 30: fd(50); 31: lt(90); 32: fd(50); 33: } 34: 35: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
中括弧で囲まれた部分をブロックと呼びます。 Javaプログラムは複数のブロックから構成されます。 ブロックの中にブロックを入れることも出来ます。
Javaプログラムの一つの単位をクラスと呼びます。 本格的なプログラムでは、クラスが複数になりますが、しばらくは一つだけです。
クラスを作るための先頭行は、
6: public class [クラス名] extends Turtle{となる。この行の最後の括弧から、対応する括弧(ファイルの一番最後にある括弧)までがクラスブロックです。 Javaのプログラムは全てクラスブロックの中に書かれます。
クラス名は自由に決められますが、気をつけてほしいのは、 ファイル名はクラス名に「.java」をつけたものにすることです。 (例えば、クラス名がHouseならファイル名はHouse.javaにする必要がある) 論プロエディタでは自動でクラス名とファイル名をそろえてくれるので、考えなくてOKです。
14: void [メソッド名](){
から始まるブロックをメソッドブロックといいます。 Javaのプログラムの命令は、全てメソッドブロックの中に書かれます。 メソッドは、命令をまとめて一つに束ねたもの、ということもできます。
メソッドブロックはクラスブロックの中に書く必要があります。 タートルプログラムは、startという名前のメソッドを最初に実行しようとします。だから、タートルで作る一つ目のメソッド名はstartでなければなりません。
しばらくすると、複数のメソッドを扱いますが、現時点では、 プログラムはstart()の中括弧の中に書く、と覚えておけばよいでしょう。
startメソッドブロックの中にある、rt(??)やfd(??)がタートルに指示する命令です。
メソッド内に書かれた命令は、 必ず上から順番に実行されます。
以下にタートルに指示できる命令の一覧を示します。
Javaのプログラムでは命令と命令の区切りに必ず「;」(セミコロン)を入れる必要があります。 これを入れないと、コンピュータがどこで命令が区切られているのか、理解することができません。
ちなみに、セミコロンが入っていれば、複数の命令を以下のように同じ行に書いてもOKです。
lt(30); fd(50);
コメントはプログラム(命令)としては考慮されず、読み飛ばされます。 しかし、人間が読めないとメンテナンスにこまるためにコメントをつけておきます。ファイルの先頭には、プログラムのタイトル、名前や日付を忘れずに。
論プロエディタの「File」メニューから「NewFile(Class)」を選び、 テンプレートは「Turtle」を選んでください。
「タートルを動かす処理」の{と}の間に、タートル命令(rt(90)やfd(100)など)を書いてください。
プログラムの書きかたを間違えると、コンパイルしたときにエラーになります。
例えば、コマンドの区切りでセミコロンを忘れると、次のようなエラーがでます。
>javac House.java House.java:13: ';' がありません。 rt(120) ^ エラー 1 個 >
コンパイルエラーがでたら、実行することはできないので、ソースを直して、再コンパイルするしかありません。 どうしても原因が分からない時は、TAなどに相談してください。
コンパイルは正常に通っても、プログラムが間違っていては当然意図した図にはなりません。 コンピュータは、必ず 命令した通りに動作します。
バグがあったら、修正しましょう。バグを修正することをデバッグといいます。
プロでも、最初から意図したプログラムを書くのは難しいものです。 プログラム上達の早道は、一発で動かそうとせずに、 早くバグを見つけて、修正できるようになるようになるように心がけることです。
コンピュータで本当の曲線は書けませんが、それらしくみせることはできます。 次のプログラムを見てみましょう。
1: /* 2: * 曲線を書くプログラム 3: * 2003/05/08 4: * Yoshiaki Matsuzawa 5: */ 6: public class Curve extends Turtle { 7: 8: //起動処理 9: public static void main(String[] args) { 10: Turtle.startTurtle(new Curve()); 11: } 12: 13: //タートルを動かす処理 14: public void start() { 15: 16: int length; 17: int angle; 18: 19: length = 5; 20: angle = 5; 21: 22: rt(length); 23: fd(angle); 24: rt(length); 25: fd(angle); 26: rt(length); 27: fd(angle); 28: rt(length); 29: fd(angle); 30: rt(length); 31: fd(angle); 32: rt(length); 33: fd(angle); 34: rt(length); 35: fd(angle); 36: rt(length); 37: fd(angle); 38: rt(length); 39: fd(angle); 40: rt(length); 41: fd(angle); 42: 43: lt(length); 44: fd(angle); 45: lt(length); 46: fd(angle); 47: lt(length); 48: fd(angle); 49: lt(length); 50: fd(angle); 51: lt(length); 52: fd(angle); 53: lt(length); 54: fd(angle); 55: lt(length); 56: fd(angle); 57: lt(length); 58: fd(angle); 59: lt(length); 60: fd(angle); 61: 62: 63: } 64: 65: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
5度曲がり、5歩進むことを繰り返しています。
もっと細かく(1度)にすれば、もっと曲線に近くなるはずです。(やってみよう)
実はコンピュータで、"本物"の曲線を書くことはできません。 しかし、上記のように"擬似的"に表現することで、人間の目をごまかすことはできます。 このように擬似的に表現することを「ディジタル」表現といいます。これに対して、紙に書くような本物の曲線を「アナログ」表現といいます。
教育上の理由から、初期位置を変える機能は搭載していません。 最初の位置を変えたいときは、ペンをあげて、好みの位置まで移動するプログラムを書く必要があります。 ちなみに、タートルは最初100, 100の座標で、上向きになっています。
進める(fd)命令や、回す(rt)命令を使って、五角形を描くプログラムを作りましょう。
進める(fd)命令や、回す(rt)命令を使って、星を描くプログラムを作りましょう。
タートルを使って、好きな絵を描くプログラムを作りましょう。
Squeakテキストに載っている図形などを描いてみましょう。(Squeakテキストに載っている図形はこちら)