前へ - 次へ - 目次
複数のキャラクタを配置しましょう(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の200
と150
を,それぞれ変数x
とy
に置き換えてみましょう.
リスト2 Apple
change($pat_fruits);
go(x,y);
実行すると... あれ!今度はリンゴが1つも出てきません.
なぜかというと,リスト2の状態では,変数 x や y は何も値を覚えていないため,go(x,y)
と命令されても,どこに表示していいかわからないからです.
かといって,リスト2にx=200
やy=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になっています.
前へ - 次へ - 目次