オブジェクトタートル編では、いままで習った制御構造を利用して、簡単なゲームやアニメーションなどのアプリケーションを作っていきたいと思います。
アニメーションでは、「オブジェクト」と呼ばれるものを生成して、 そのオブジェクトに対して命令をすることになります。 その練習のために、まず、複数のタートルを扱ってみましょう。
次のプログラムを見てみましょう。
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プログラムが実行できます。
タートル(オブジェクト)を一匹生成するには、次のような命令文を書きます。
生成されたタートル(オブジェクト)に命令するには、次のような命令文を書きます。
このように、オブジェクトを生成して、 生成したオブジェクトに対して命令を行う手法を「オブジェクト指向プログラミング」といい、 現在のプログラミングでよく使われる手法です。
オブジェクトはいくつでも生成することができます。 次のプログラムを見てみましょう。
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プログラムが実行できます。
このプログラムを下のプログラムと比較してみましょう。 (同じ図形を書くのですが、動きが異なるはずです。)
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プログラムが実行できます。
2つ目のプログラムでは、タートルを細かく切り替えて少しずつ動かすことによって、 4匹のタートルが同時に動いているように見せることができます。
コンピュータは2つの仕事を同時に行うことはできません。 みなさんが使っているパソコンは、インターネットをやっている間にメールを見て、印刷しながらワープロも使ったりすることができます。 これは、実は、このタートルの例のように、細かく切り替えていろいろな仕事を少しずつしているからなのです。
以下の実行例のように、4匹のタートルを同時に動かしてまんじを書くプログラムを作ってみよう
下のボタンを押すと、Swastikaプログラムが実行できます。
ファイル名は「Swastika.java」とすること.
以下の実行例のように、4匹のタートルでリレーを書くプログラムを作ってみよう
下のボタンを押すと、TurtleRelayプログラムが実行できます。
ファイル名は「TurtleRelay.java」とすること.
以下の実行例のように、3匹のタートルがレースするプログラムを作ってみよう。
下のボタンを押すと、TurtleRaceプログラムが実行できます。
ファイル名は「TurtleRace.java」とすること.
今まで描いた絵を、何匹かのタートルを使って、タートルの共同作業で描いてみよう。 (複数のタートルが同時に動作するのは難しいので、やらなくて良い)
ファイル名は「ManyTurtles.java」とすること.
以下の実行例のように、2匹のタートルがそれぞれ星と五角形を同時に描くようなアニメーションを作ろう。 (難易度高め)
下のボタンを押すと、Concurrentプログラムが実行できます。
ファイル名は「Concurrent.java」とすること.