8 たくさんのタートル

8.1 学習目標

8.2 複数のタートルを使う

オブジェクトタートル編では、いままで習った制御構造を利用して、簡単なゲームやアニメーションなどのアプリケーションを作っていきたいと思います。

アニメーションでは、「オブジェクト」と呼ばれるものを生成して、 そのオブジェクトに対して命令をすることになります。 その練習のために、まず、複数のタートルを扱ってみましょう。

8.2.1 2匹のタートルを使うプログラム

次のプログラムを見てみましょう。

リスト 8.2.1.1 TwoTurtles.java
  1: /**
  2:  * タートルを2匹使って、2つの円を書くプログラム
  3:  * 
  4:  * Yoshiaki Matsuzawa
  5:  * 2003/06/16
  6:  */
  7: public class TwoTurtles extends Turtle {
  8: 
  9: 	//起動処理
 10: 	public static void main(String[] args) {
 11: 		Turtle.startTurtle(new TwoTurtles());
 12: 	}
 13: 
 14: 	//タートルを動かす処理
 15: 	public void start() {
 16: 
 17: 		Turtle kameTaro = new Turtle(); //亀太郎を生成
 18: 		Turtle kameJiro = new Turtle(); //亀次郎を生成
 19: 
 20: 		int i = 0;
 21: 		while (i < 360) {
 22: 
 23: 			//亀太郎は右回り
 24: 			kameTaro.rt(1);
 25: 			kameTaro.fd(1);
 26: 
 27: 			//亀次郎は左回り
 28: 			kameJiro.lt(1);
 29: 			kameJiro.fd(1);
 30: 
 31: 			i++;
 32: 		}
 33: 
 34: 	}
 35: 
 36: }

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

図 8.2.1.1 2匹のタートルを使うプログラム

8.2.2 タートル(オブジェクト)の生成

タートル(オブジェクト)を一匹生成するには、次のような命令文を書きます。

図 8.2.2.1 タートル(オブジェクト)の生成

8.2.3 タートル(オブジェクト)への命令

生成されたタートル(オブジェクト)に命令するには、次のような命令文を書きます。

図 8.2.3.1 タートル(オブジェクト)への命令

このように、オブジェクトを生成して、 生成したオブジェクトに対して命令を行う手法を「オブジェクト指向プログラミング」といい、 現在のプログラミングでよく使われる手法です。

8.3 同時に動いているように見せるために

オブジェクトはいくつでも生成することができます。 次のプログラムを見てみましょう。

リスト 8.3.1 FourTurtles.java
  1: /**
  2:  * タートルを4匹使って、4つの円を書くプログラム
  3:  * 
  4:  * Yoshiaki Matsuzawa
  5:  * 2003/06/16
  6:  */
  7: public class FourTurtles extends Turtle {
  8: 
  9: 	//起動処理
 10: 	public static void main(String[] args) {
 11: 		Turtle.startTurtle(new FourTurtles());
 12: 	}
 13: 
 14: 	//タートルを動かす処理
 15: 	public void start() {
 16: 
 17: 		int i; //ループ用
 18: 
 19: 		//4匹のカメを生成
 20: 		Turtle kameTaro = new Turtle();
 21: 		Turtle kameJiro = new Turtle();
 22: 		Turtle kameSaburo = new Turtle();
 23: 		Turtle kameShiro = new Turtle();
 24: 
 25: 		//亀三郎と亀四郎は後ろに下がる
 26: 		kameSaburo.bk(100);
 27: 		kameShiro.bk(100);
 28: 
 29: 		//亀太郎は右回り
 30: 		i = 0;
 31: 		while (i < 360) {
 32: 			kameTaro.rt(1);
 33: 			kameTaro.fd(1);
 34: 			i++;
 35: 		}
 36: 
 37: 		//亀次郎は左回り
 38: 		i = 0;
 39: 		while (i < 360) {
 40: 			kameJiro.lt(1);
 41: 			kameJiro.fd(1);
 42: 			i++;
 43: 		}
 44: 
 45: 		//亀三郎は右回り
 46: 		i = 0;
 47: 		while (i < 360) {
 48: 			kameSaburo.rt(1);
 49: 			kameSaburo.fd(1);
 50: 			i++;
 51: 		}
 52: 
 53: 		//亀四郎は左回り
 54: 		i = 0;
 55: 		while (i < 360) {
 56: 			kameShiro.lt(1);
 57: 			kameShiro.fd(1);
 58: 			i++;
 59: 		}
 60: 
 61: 	}
 62: 
 63: }

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

このプログラムを下のプログラムと比較してみましょう。 (同じ図形を書くのですが、動きが異なるはずです。)

リスト 8.3.2 FourTurtles2.java
  1: /**
  2:  * タートルを4匹使って、4つの円を書くプログラム
  3:  * (同時に動くバージョン)
  4:  * 
  5:  * Yoshiaki Matsuzawa
  6:  * 2003/06/16
  7:  */
  8: public class FourTurtles2 extends Turtle {
  9: 
 10: 	//起動処理
 11: 	public static void main(String[] args) {
 12: 		Turtle.startTurtle(new FourTurtles2());
 13: 	}
 14: 
 15: 	//タートルを動かす処理
 16: 	public void start() {
 17: 
 18: 		int i; //ループ用
 19: 
 20: 		//4匹のカメを生成
 21: 		Turtle kameTaro = new Turtle();
 22: 		Turtle kameJiro = new Turtle();
 23: 		Turtle kameSaburo = new Turtle();
 24: 		Turtle kameShiro = new Turtle();
 25: 
 26: 		//亀三郎と亀四郎は後ろに下がる
 27: 		kameSaburo.bk(100);
 28: 		kameShiro.bk(100);
 29: 
 30: 		i = 0;
 31: 		while (i < 360) {
 32: 
 33: 			//亀太郎は右回り
 34: 			kameTaro.rt(1);
 35: 			kameTaro.fd(1);
 36: 
 37: 			//亀次郎は左回り
 38: 			kameJiro.lt(1);
 39: 			kameJiro.fd(1);
 40: 
 41: 			//亀三郎は右回り
 42: 			kameSaburo.rt(1);
 43: 			kameSaburo.fd(1);
 44: 
 45: 			//亀四郎は左回り
 46: 			kameShiro.lt(1);
 47: 			kameShiro.fd(1);
 48: 
 49: 			i++;
 50: 		}
 51: 
 52: 	}
 53: 
 54: }

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

図 8.3.1 4匹のタートルを使うプログラム(1)
図 8.3.2 4匹のタートルを使うプログラム(2)
コンピュータは同時に2度の命令をできない

2つ目のプログラムでは、タートルを細かく切り替えて少しずつ動かすことによって、 4匹のタートルが同時に動いているように見せることができます。

コンピュータは2つの仕事を同時に行うことはできません。 みなさんが使っているパソコンは、インターネットをやっている間にメールを見て、印刷しながらワープロも使ったりすることができます。 これは、実は、このタートルの例のように、細かく切り替えていろいろな仕事を少しずつしているからなのです。

8.4 練習問題

8.4.1 問題1:たくさんのタートルで絵を描こう

今まで描いた絵を、何匹かのタートルを使って、タートルの共同作業で描いてみよう。 そのときに、全てのタートルが同時に働いているように見せよう。 余裕があったら、仕事の遅いタートルや、仕事の速いタートルを作ることはできるか、考えてみよう。