2 はじめてのJavaタートルプログラミング

2.1 学習目標

2.2 最初のプログラムの解説

導入編の「サンプルプログラムの使い方」で動かした家を描くサンプルプログラムを解説します。

2.2.1 家を書くサンプルプログラム

下に、導入編で動かした家を描くサンプルプログラムを示します。

リスト 2.2.1.1 House.java
  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: }

下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。

2.2.2 プログラムの要素

2.2.2.1 ブロック

中括弧で囲まれた部分をブロックと呼びます。 Javaプログラムは複数のブロックから構成されます。 ブロックの中にブロックを入れることも出来ます。

2.2.2.2 クラス

Javaプログラムの一つの単位をクラスと呼びます。 本格的なプログラムでは、クラスが複数になりますが、しばらくは一つだけです。

クラスを作るための先頭行は、

6: public class [クラス名] extends Turtle{
						
となる。この行の最後の括弧から、対応する括弧(ファイルの一番最後にある括弧)までがクラスブロックです。 Javaのプログラムは全てクラスブロックの中に書かれます。

クラス名は自由に決められますが、気をつけてほしいのは、 ファイル名はクラス名に「.java」をつけたものにすることです。 (例えば、クラス名がHouseならファイル名はHouse.javaにする必要がある) 論プロエディタでは自動でクラス名とファイル名をそろえてくれるので、考えなくてOKです。

2.2.2.3 メソッド

  14: 	void [メソッド名](){
					

から始まるブロックをメソッドブロックといいます。 Javaのプログラムの命令は、全てメソッドブロックの中に書かれます。 メソッドは、命令をまとめて一つに束ねたもの、ということもできます。

メソッドブロックはクラスブロックの中に書く必要があります。 タートルプログラムは、startという名前のメソッドを最初に実行しようとします。だから、タートルで作る一つ目のメソッド名はstartでなければなりません。

しばらくすると、複数のメソッドを扱いますが、現時点では、 プログラムはstart()の中括弧の中に書く、と覚えておけばよいでしょう。

2.2.2.4 命令

startメソッドブロックの中にある、rt(30)やfd(60)がタートルに指示する命令です。

メソッド内に書かれた命令は、 必ず上から順番に実行されます。

以下にタートルに指示できる命令の一覧を示します。

rt([角度の指定])
タートルを指定した角度だけ右に回す
lt([角度の指定])
タートルを指定した角度だけ左に回す
fd([長さの指定])
タートルを指定した長さだけ進める
bk([長さの指定)
タートルを指定した長さだけ後ろに進める
up()
タートルがペンを上げる(軌跡がかかれなくなる)。
down()
タートルがペンを下げる(軌跡がかかれるようになる)。
color([色の指定])
ペンの色を変える (1)
  1. 赤なら、color(java.awt.Color.red)。青なら、color(java.awt.Color.blue)のように指定する。

2.2.2.5 命令の区切り

Javaのプログラムでは命令と命令の区切りに必ず「;」(セミコロン)を入れる必要があります。 これを入れないと、コンピュータがどこで命令が区切られているのか、理解することができません。

ちなみに、セミコロンが入っていれば、複数の命令を次のように同じ行に書いてもOKです。

lt(30); fd(50);

2.2.2.6 コメント

コメントはプログラム(命令)としては考慮されず、読み飛ばされます。 しかし、人間が読めないとメンテナンスにこまるためにコメントをつけておきます。ファイルの先頭には、プログラムのタイトル、名前や日付を忘れずに。

範囲指定コメント
「/*」から「*/」までコメントになります
行コメント
「//」から先行の終わりまでコメントになります

2.3 プログラムの作成手順

2.3.1 ファイルの作成

論プロエディタの「File」メニューから「NewFile(Class)」を選び、 テンプレートは「Turtle」を選んでください。

2.3.2 プログラムの書き方

「タートルを動かす処理」の「 { 」と「 } 」の間に、タートル命令(rt(90)やfd(100)など)を書いてください。

2.4 プログラムミスと対処

2.4.1 コンパイルエラー

プログラムの書きかたを間違えると、コンパイルしたときにエラーになります。

例えば、コマンドの区切りでセミコロンを忘れると、次のようなエラーがでます。

図 2.4.1.1 コンパイルエラー
>javac House.java House.java:13: ';' がありません。 rt(120)
^ エラー 1 個 >
				

コンパイルエラーがでたら、実行することはできないので、ソースを直して、再コンパイルするしかありません。 どうしても原因が分からない時は、TAなどに相談してください。

2.4.2 バグ

コンパイルが正常に通っても、プログラムが間違っていて、意図した通りに動作しないことをバグといいます。 コンピュータは、必ず 命令した通りに動作します。

バグがあったら、修正しましょう。バグを修正することをデバッグといいます。

プロでも、最初から意図したプログラムを書くのは難しいものです。 プログラム上達の早道は、一発で動かそうとせずに、 早くバグを見つけて、修正できるようになるようになるように心がけることです。

2.5 タートルを使って好きな図形を書くためのテクニック

2.5.1 曲線が書きたい

コンピュータで本当の曲線は書けませんが、それらしく見せることはできます。 次のプログラムを見てみましょう。

リスト 2.5.1.1 Curve.java
  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歩進むことを繰り返しています。

やってみよう

長さと角度を調整して、もっと精密な曲線に近づけてみよう。

実はコンピュータで、"本物"の曲線を書くことはできません。 しかし、上記のように"擬似的"に表現することで、人間の目をごまかすことはできます。 このように擬似的に表現することを「ディジタル」表現といいます。これに対して、紙に書くような本物の曲線を「アナログ」表現といいます。

2.5.2 タートルの最初の位置を変えたい

教育上の理由から、初期位置を変える機能は搭載していません。 最初の位置を変えたいときは、ペンをあげて、好みの位置まで移動するプログラムを書く必要があります。 ちなみに、タートルは最初(100, 100)の座標で、上向きになっています。

2.6 練習問題

2.6.1 問題1:五角形を描こう

進める(fd)命令や、回す(rt)命令を使って、五角形を描くプログラムを作りましょう。

図 2.6.1.1 五角形

2.6.2 問題2:星を描こう

進める(fd)命令や、回す(rt)命令を使って、星を描くプログラムを作りましょう。

図 2.6.2.1 星

2.6.3 問題3:好きな図形を描こう

タートルを使って、好きな絵を描くプログラムを作りましょう。

Squeakテキストに載っている図形などを描いてみましょう。(Squeakテキストに載っている図形はこちら