前へ - 次へ - 目次

複数のキャラクタを配置しましょう(2)

猫とリンゴが表示できたので, 今度はリンゴを2つ置いてみましょう.それには,Gameを次のようにすればよさそうですね.

リスト1 Game
new Cat;
new Apple;
new Apple;

実行すると... あれ?リンゴは1つしか表示されません.

ここで,Appleのプログラムを確認してみましょう.

Apple
change($pat_fruits);
go(200,150);

Appleでは,リンゴを(200,150)の位置に移動させる,と書いてあります.

実は,リンゴは2つできているのですが,どちらも(200,150)という ピッタリ同じ位置に重なっているので 1つにしか見えないのです.

それでは,2つのリンゴを違う位置に表示させましょう. それには,リンゴの位置が(200,150)ではなく,リンゴごとに変わるようにすればよいでしょう.つまり,200や150という「数」が「変わる」ようにする... そうです「変数」を使えばよいのです.

そこで,Appleの200150 を,それぞれ変数xyに置き換えてみましょう.

リスト2 Apple
change($pat_fruits);
go(x,y);

実行すると... あれ!今度はリンゴが1つも出てきません.

なぜかというと,リスト2の状態では,変数 x や y は何も値を覚えていないため,go(x,y)と命令されても,どこに表示していいかわからないからです.

かといって,リスト2x=200y=150などの,変数に値を覚えさせる命令を書くわけにもいきません.なぜなら,xやy の値はリンゴごとに違っていなければならないからです.

そこで,ここでは,Appleではなく,Gameのほうでリンゴに具体的なx や y の値を設定させます.

まず,Gameを次のように書き換えます.まだ実行はしないでください.

Game
new Cat;
apple1=new Apple;
apple2=new Apple;

リスト1と変わったのは,new Appleの前に, apple1=apple2=がついたところです.

apple1=new Apple;は,新しくできたリンゴのキャラクタに「apple1」という名前をつけています.同様に,2つ目のリンゴのキャラクタに「apple2」という名前をつけています.

名前をつけることによって,それらのキャラクタに命令をしたり,キャラクタがもっている変数の値を変更させることができます.

リスト3 Game
new Cat;
apple1=new Apple;
apple1.x=200;
apple1.y=150;
apple2=new Apple;
apple2.x=300;
apple2.y=100;

実行すると,今度はちゃんとリンゴが2つ表示されますね.

apple1.x=200; という命令は,その1行上で新しく作ったリンゴのキャラクタ,つまりapple1 がもっている x という変数に 200 を覚えさせています.

今,「キャラクタがもっている変数」という表現をしましたが,変数は名前が同じでも,キャラクタごとに違う値をもたせる(覚えさせる)ことができます. 例えば,リスト3では,apple1 の もっている変数xの値は200ですが,apple2 がもっている変数x は300になっています.

図1.キャラクタごとに変数の値は異なる

前へ - 次へ - 目次