第5回:変数
変数
変数とは、数値などを入れておく箱のようなものです。
real, char, booleanまたそれらの配列が使えます。
realは数値です。
charは文字です。charの配列が文字列です。
booleanは真偽値です。
1, 2, 3, 4…real型
true, false…boolean型
"a","あ","abc"…char型
変数を使用するに当たって、注意が必要です。変数を使うにははじめに宣言しないといけません。
変数の宣言は[let]を使います。
なお、型は宣言したときに自動で判別されます。
変数の宣言をせずに変数を使用した場合、スクリプト開始時にエラーメッセージが出ます。
let a; 変数「a」を宣言
let a = 32; 変数「a」を宣言(real型)して、32で初期化
let b = "文字列"; 変数「b」を宣言(char型)して、"文字列"で初期化
let c = true; 変数「c」を宣言(boolean型)して、trueで初期化
変数を使う際には注意が必要です。
それは、変数はその変数を宣言した文の後から、その文を含む{}の終わりまでしか使えない、
ということです。
変数の有効範囲のことをスコープといい、有効期間の事を寿命といいます。
変数を使う
変数は同じ値を何度も使いまわせます。それを利用して前回までのプログラムを改良しましょう。
#Title[変数]
#Text[変数]
#ScriptVersion[2]
script_enemy_main
{
let imgBoss = "script\img\ExRumia.png";
@Initialize{
SetX(GetCenterX);
SetY(GetClipMinY+120);
SetLife(2000);
LoadGraphic(imgBoss);
SetTexture(imgBoss);
SetGraphicRect(0, 0, 63, 63);
}
〜省略〜
@Finalize
{
DeleteGraphic(imgBoss);
}
}
こう書くと、変更があったときに変数を初期化する部分1つを変更するだけで、全て変えることが出来ます。
変数を使わない場合、変更した際に
「いくつも変えるの面倒」,「1つだけ変え忘れた」,「スペルミスった」
といったことがなくなります。
変数の再代入
さて次は変数の中身を変更してみましょう。
前回作ったスクリプトでは、弾の発射角を90と書いていました。
ここで変数を使ってみましょう。
script_enemy_main
{
let angle = 90;
@MainLoop{
SetCollisionA(GetX, GetY, 24);
SetCollisionB(GetX, GetY, 24);
CreateShot01(GetX, GetY, 2, angle, BLUE01, 10);
angle = angle+10;
yield;
}
}
変数の宣言と初期化については問題ないでしょう。
しかし、[angle = angle+10]とは何でしょうか。
実は、プログラムにおいての「=」は左辺と右辺が等しいという意味でなく、
左辺に右辺の値を代入するという意味なのです。
つまりこの式は、代入前のangleに10を足したものを左辺のangleに代入するという処理を行っているのです。
簡単に言えばangleの値を10ずつ増やしていくということです。
こう書くことも出来ます。
[angle+=10]
この場合は10を足していますが、
[angle-=10]
と書けば、10ずつ引くこともできます。
スクリプトを実行すれば、1フレームごとに角度が10度ずつ変化して、結果36の方向に弾が撃たれるようになります。
次回は、毎フレーム連続で発射されている弾の発射間隔を変えていってみましょう。