知識のある方はおそらく見る必要は全く無い情報だらけで鬱陶しいとは思いますが
初めてスクリプトを書くという方用に製作していきますので勘弁してください。
前からZeasyUOを触ってはいたけれどスクリプトの中身を見たらなにがなんだか・・・
という人でも大丈夫です。
本当にコツさえつかめれば簡単に作ることが出来ますから。
このチュートリアルでは少し面倒な素材集めである
「羽集めのスクリプト」を順を追って説明していく予定です。
私のスタンスとして完全自動化(BOTscript)は公開しないというのが基本姿勢ですので
このチュートリアルを最後まで作ったら後は他の人の作ったものを参考に
自分なりに考えて、時には公式で質問したりして素晴らしいものを作り上げてください。
まず始めに覚えること。
ほとんどのプログラムに共通で使われる構文 if文、for文、while文から説明します。
プログラムというのはyesかnoかの2択を組み合わせて作り上げていくものです。
多少の例外もありますが、これがほとんど全てであるといっても過言ではありません。
他にもswitch文、foreach文等など色々あると思いますが
基本この3つさえ覚えていればいくらでも代用できます。少し長いですががんばってください。
もし必要であるなら後ほど他のものも説明するかもしれませんが今回はこの3つだけです。
if文
まず最初のif文から
if (頭が痛い) 薬を飲む;
これは「もし(頭が痛い)なら(薬を飲む)」という意味です。その行の一番後ろの「;」を見てください
ここで一つの分が終わりますよ。という意味です。
文章で言う「。」という意味と考えてください。
さて、if文ですが意味はわかりましたか?
では早速次のコードをメモ帳などで入力してください。
x = 10;
y = 50;
println (y);
if (x == 10) y = x;
println (y);
y = 50;
println (y);
if (x == 10) y = x;
println (y);
これを入力したらファイル名を「lsn1.zzs」等として「ZeasyUOのscriptフォルダに入れてください。」
scriptフォルダに入れるだけでZeasyUOに認識されて走らせることが出来ます。
実際に走らせて見るとscriptWindowに
50
10
10
という数字が表示されるはずです。
いっぺんにいろいろなものが出てきましたね。それでは1行目から説明していきます。
x = 10;
これは「x」という入れ物に「10」という数字を入れる。ということです。数学で言う x = 10 と違うのは
x と 10 が等しい という意味では無く(結果は同じですが)
「x に 10 を入れる」という意味です。
少し言葉を変えると「x を 10 とする」という意味になります。
y = 50;
これも同様です。「y」という入れ物に「50」という数字を入れるということです。println (y);
これは丸暗記してください。println ();というのはscript windowに表示するという命令です。この場合はy(つまり先ほどの「50」)を表示する。
ということです。「y」という文字が表示されるんじゃないの?と思った方は柔軟な考えをもっています。
少し難しくなりますがプログラムでは「yという文字なのか」「yという入れ物なのか」
という考えをプログラムに与えなくてはなりません。
簡単に説明すると「yという文字」をプログラムに教えるのであれば
「'」や「"」という記号で囲ってあげればいいわけです。
println ('y');
このようにすればプログラムは「yいうのは文字である」と解釈してくれます
分かりづらいとは思いますが
後々触っていくうちにわかるようになるはずですので詳しい説明は割愛します。
さて次が問題のif文です
if (x == 10) y = x;
これは先ほど説明した「もし 頭が痛い なら 薬を飲む」ということです。では「頭が痛い」の部分から
x == 10 ってなんでしょう?これはスクリプトでいう「x と 10 が 等しい」という意味です。
少し普通の数学とは違う(数学では x = 10 です)記号を使っていますがこれは丸暗記してください。
次に「薬を飲む」の部分
「y = xをする」ということは即ち「yにx」を入れるという意味です。
「y(いままで50が入っていた)に x に入っている 10 を入れてください」という意味になります。
つまり「もし、xが10と等しいなら yにx(10)を入れる」
という意味になります。また、逆にいえば「xと10が等しくなければ何もしない」という意味でもあるわけです。
一度にはなかなか覚えられないかもしれませんが使っていくうちに覚えていくでしょう。
つまり時間軸に沿って説明すると
x = 10; //xに10を入れる
y = 50; //yに50を入れる
println (y); //y(50)を表示する
if (x == 10) y = x; //x が 10 と等しいのであれば y に x(10) を入れる
println (y); //y(つまりx)を表示する。
ということになります。y = 50; //yに50を入れる
println (y); //y(50)を表示する
if (x == 10) y = x; //x が 10 と等しいのであれば y に x(10) を入れる
println (y); //y(つまりx)を表示する。
while文
それでは次にwhile文です。これは何度も何度も繰り返す場合に使います。
while(頭が痛い) 薬を飲む;
さて先ほどのif文とはどう違うのかというと、if文では「もし 頭が痛い のなら 薬を飲む」
で終わっていたのがwhileでは
「もし 頭が痛い のなら 薬を飲む もし 頭が痛い のなら 薬を飲む …」
つまり「頭が痛い」限り延々と「薬を飲みつづける」わけです。
別の言い方で言えば「頭が痛くなくなる」まで「薬を飲む」ということでもあるわけです
では次のスクリプトをプログラミングしてZeasyUOで動かしてみてください。
x = 10;
y = 50;
println (y);
while(x != y) y = y - 10;
println (y);
y = 50;
println (y);
while(x != y) y = y - 10;
println (y);
scriptwindowにいかの結果が出たと思います
50
10
10
それでは
while(x != y) y = y - 10;
について説明します。頭が痛いかどうかの部分に「x != y」がありますね。これはif文で説明した「x == y」の反対の意味になります。
つまり「 x と y が等しくない」という意味です。
そして 薬を飲む という部分には
y = y - 10;
これは一番初めの y が 50 の時には y = 50 - 10; という意味で y に 40 を入れる。という意味です。同様に y が 30 の時には y = 30 -10; で y に 20 を入れるという意味。
つまり「今の y から10を引く」という意味になります。
違う書き方に y -= 10 というのがあります。
どちらでもかまいませんし見た目をすっきりさせるにはこちらの方がいいのでしょうが
誰もが見てすぐに分かる書き方であれば前者の方ですのでこのような書き方をしています。
つまり、while(x != y) y = y - 10; とは
「 x と y が等しくない時は y から 10 を引きつづけていく」という事です。
これを if(x != y) y = y - 10; でやると
yは1度だけ10を引いて終わりますがwhile文を使うことにより
x と y が等しくなるまで(x != y では無くなるまで) y から 10 を引きつづけていく
という動作ができるわけです。
ところで「頭が痛い 時に 水を飲んで 薬を飲む」という2つのアクションをしたい場合はどうでしょうか?
そういう時も深く考えなくても大丈夫です
while (頭が痛い){ 水を飲む; 薬を飲む; }
のようにおっぱいカッコ「{」と「}」で囲ってあげれば
その中のことを一つのまとまりとして判断してくれます。
コンピューターって頭いいですね。
for文
さて、最後にfor文です。これはif文とwhile文をあわせたようなものです。
書き方が多少複雑になりますががんばってください。
for (1日目から 7日目まで 1日おきに) 薬を飲む;
今度は頭が痛いことを前提とした説明をしていきます。次のコードを入力して実行してください。
y = 10;
for ( x = 0; x < 5 ; x = x + 1) println (x + y);
for ( x = 0; x < 5 ; x = x + 1) println (x + y);
実行すると
10
11
12
13
14
11
12
13
14
となりましたね?たった1行ですが使う機会は多いのでしっかり覚えてください。
まず「一日目から」の部分である
x = 0
これは簡単ですね。「x に 0 を入れる」という意味です。次に「7日目まで」の部分である
x < 5
これは「x が 5 よりも小さい」という比較を行う部分です。if文で使えば if (x <5)ですね。次に「1日おき」の部分である
x = x + 1
これも普通に「x に 1 を足していく」という意味です。最後の
println (x + y);
はxとyを足した数を表示するという意味ですね。つまりこれは
「x に 0 をいれてから x が5以上になるまで(5未満である限り)xを1つ増やして xとyを足した数を表示しつづけていく」
という意味です。
動き自体はわかりましたか?では、これと同じ事を while文を使ってやってみます。
x = 0;
y = 10;
while ( x < 5) {
println (x + y);
x = x + 1; //x++; や x += 1 とおなじ意味です。
}
y = 10;
while ( x < 5) {
println (x + y);
x = x + 1; //x++; や x += 1 とおなじ意味です。
}
どうでしょう。同じ結果になりましたね。for文を使うとx = 0; x = x + 1;の部分を減らすことができるということです。
どちらが正解かというものはありません。スクリプトでは同じ結果でもいろんな書き方がありますので
好きなように、自分のわかりやすいように書いていってください。