7 たくさんのタートル

7.1 学習目標

7.2 複数のタートルを使う

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

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

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

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

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

ここ をクリックすると、プログラムをダウンロードできます。

下のボタンを押すと、TwoTurtlesプログラムが実行できます。

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

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

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

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

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

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

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

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

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

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

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

ここ をクリックすると、プログラムをダウンロードできます。

下のボタンを押すと、FourTurtlesプログラムが実行できます。

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

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

ここ をクリックすると、プログラムをダウンロードできます。

下のボタンを押すと、FourTurtles2プログラムが実行できます。

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

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

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

7.4 練習問題

7.4.1 4匹のタートルでまんじ(卍)を描こう

以下の実行例のように、4匹のタートルを同時に動かしてまんじを書くプログラムを作ってみよう

下のボタンを押すと、Swastikaプログラムが実行できます。

まんじを書くプログラムで利用する命令
hide()
最初から表示されている亀(カメ子)を消します。(別に消してなくても課題は受理しますけど、消したいですよね。)

ファイル名は「Swastika.java」とすること.

7.4.2 タートルリレー

以下の実行例のように、4匹のタートルでリレーを書くプログラムを作ってみよう

下のボタンを押すと、TurtleRelayプログラムが実行できます。

タートルリレーで利用する命令
warp([X座標],[Y座標])
亀の位置を座標の位置にワープさせます。最初に亀を配置する時に使ってください(使用例:kameTaro.warp(100,200))

ファイル名は「TurtleRelay.java」とすること.

7.4.3 タートルレース

以下の実行例のように、3匹のタートルがレースするプログラムを作ってみよう。

下のボタンを押すと、TurtleRaceプログラムが実行できます。

タートルレースで利用する命令
sleep([秒の指定])
指定された秒数だけ、コンピュータが眠り(止まり)ます。1を入れれば1秒止まり、0.1入れれば0.1秒止まります。「ヨーイドン!」の時に使ってください。

ファイル名は「TurtleRace.java」とすること.

7.4.4 たくさんのタートルで絵を描こう

今まで描いた絵を、何匹かのタートルを使って、タートルの共同作業で描いてみよう。 (複数のタートルが同時に動作するのは難しいので、やらなくて良い)

ファイル名は「ManyTurtles.java」とすること.

7.4.5 星と五角形を同時に描こう

以下の実行例のように、2匹のタートルがそれぞれ星と五角形を同時に描くようなアニメーションを作ろう。 (難易度高め)

下のボタンを押すと、Concurrentプログラムが実行できます。

ファイル名は「Concurrent.java」とすること.