RPGツクール技術部門

RPGツクールで学ぶjavascriptその3〜ループ〜

2019/02/05

こんにちは!yatsureです。
前回は条件分岐で力尽きてしまいましたので、今日はループについて。



早速javascriptでのループの書き方

for (var i = ループ開始数字; i < ループ終了数字; i++) {
ループで行いたい処理;
}

シンプルに終わってしまったので解説

var i = という記述がありますね?そうです。その1辺りでvarは変数を作り出す言葉だと伝えました。
ここでは、iという変数が作り出されて居ます。
んで、iはループを開始する数字を入れる、と書きましたがそれってどういう意味やねんって感じですよね。
そのまんまなんですが、迷ったら0でも入れといてください。僕は基本0で使ってます。

んで、i < ループ終了数字; の件なんですけど、これは条件式です。その2の記事に少し出て来ますね。
これは、これが満たされているときはループするよ、という意味です。

例えば10回ループさせたい時、
開始数字が0
終了数字が10
と設定する形になるんですが、1回目はi=0なので、i<10=0<10で条件式が満たされているのでループ内の処理が行われる、という理屈です。

え、2回目は?っていうか11回目はどうしてループしないの?

僕と同じでせっかちな人はそう思うでしょう。答えはその後のi++にあります。
このi++は、ループする毎にiに+1するよ、という意味です。
なので、2回目はi=1、11回目はi=10になって居て、i<10が11<10となり満たされなくなるのでループが終わる、という理屈になります。

いやこれ何が便利なんだよって思うじゃないですか。僕もそう思います(´・∀・`)
何が悲しくてたかがループを使うのにこんな事やらなあかんねん。バカなの?いいえアホです
なので、今の時点では真面目に読んでくれた貴方はアホという事がわかりました♨︎

しかしこのまま私のブログを読んでくれている貴重なアホ唯のアホしておくのは勿体無いので、これがどう生きるのか、どうかお付き合いください。

配列という概念

話は変わりますが、実は配列という考え方がプログラミングには存在します。

var member = ["主人公","魔法使い","脳筋","踊り子","賢者"];

変数を作る事を"宣言する"とよく言いますので、今後はそう呼ばせて頂きますが、こんな感じで配列は宣言できます。
これは何か、というと、今まで変数は 数字 または 文字 が入れられる、と説明をして来ました。
実はこれ、という考えがあります。 わかりやすいのが、1"1"の違いです。 ここで、問題です(・∀・)

var hensu1 = 1 + 1;
console.log(hensu1);

これをスクリプトとしてツクールでイベントに組み込んで実行した時、あのF8を押すと出てくる白いウインドウ(多分デバッグウインドウ的な名前)になんと表示されるでしょうか?
答え2ですね。これは簡単です。

var hensu2 = "a" + "b";
console.log(hensu2);

これはどうでしょうか?
答え"ab"ですね。エビです。なんでもないです。

では

var hensu3 = "1" + "1";
console.log(hensu3);

これはどうでしょうか?悩ましいですよね。

答え"11"です。
概念として、数字の11(ジュウイチ)ではなく、文字としての"11"(イチイチ)です。
これを、型の違い、と言います。

数字int
文字string

と呼ばれて居ます。 まぁ、今はあんまり気にしなくて良いです♨︎時期が来れば、あは体験する時がくると思います。

んで
配列array型と呼ばれて居て、全く別のものになります。

考え方としては、マンション1階のイメージで、上の宣言で言うと 勇者は0番目 魔法使いは1番目 脳筋は2番目 。。。 って感じに見ます。
プログラミングの世界では、数を数えるときに大体0から始まります。

var member = ["主人公","魔法使い","脳筋","踊り子","賢者"];
console.log(member);

これを実行するとわかりやすいと思います。string型の配列ですね。

問題です

console.log(member[2]);

とすると、どうなるでしょうか?

察しがいいですね。

脳筋と表示されます。貴方のことですね。私のことではありません。私はmember[4]です。

これが、配列と言う考え方です。 [1,2,3,4,5]と言う、int型の配列も作れます。

連想配列と言う考え方

これがクッソ便利で、何かっていうと

var member = ["主人公","魔法使い","脳筋","踊り子","賢者"];
これって、member[0]で"主人公"、という事は

0 => "主人公",
1 => "魔法使い",
2 => "脳筋",
3 => "踊り子",
4 => "賢者"

ですよね。
この時、01234の事を添え字と言います。つまり、0と"主人公"は紐づけられています。
これを

var nomimember = {"一人目":"主人公", "二人目":"魔法使い", "三人目":"踊り子", "四人目":"賢者"};
console.log(nomimember["四人目"]);

として、"賢者"、つまり私を呼び出す事ができます。

いやだからなんなのよ!って皆さんなってる感じありますね?
やれやれ、だからnomimemberに誘われないんですよ?

まとめるとこうなります。

var member = ["主人公","魔法使い","脳筋","踊り子","賢者"];
var kinnikuFlag = 0;
message = "";
for (var i = 0; i < 5; i++) {
    if (member[i] == "筋肉") {
        if (kinnikuFlag >= 10) {
            message = "やらないか";
        }else{
            message = "君、頭を使ったらいけないよ";
        }
        // ループを強制終了させる言葉breakを記述
        break;
    }else{
    message = "噂は聞いてるよ、頑張ってね!";
    }
}

console.log(message);

という事で、メンバーに脳筋がいるかどうかでメッセージが変わる、というシステムを作りました。
いや、本当に脳筋がいるかどうかだけ考える+まともな書き方なら

var member = ["主人公","魔法使い","脳筋","踊り子","賢者"];
var kinnikuFlag = 0;
message = "噂は聞いてるよ、頑張ってね!";
for (var i = 0; i < member.length; i++) {
    if (member[i] == "筋肉") {
        message = "君、頭を使ったらいけないよ";
if (kinnikuFlag >= 10) {

            message = "やらないか";
        }
        break;
    }
}

console.log(message);

かな。処理結果は、どっちも同じはずです。

と、いった感じで、なんとなく基本的な読み方がわかっていただけたかなぁと思います。
あと1つだけ、記事にしたい基礎がございまして。

関数というんですけれどね。




これはまた次回にいたしましょう!
因みに、javascriptに置けるfunctionの読み方、あんまりよくわかって居ません♨︎
なので、本当に基本的な内容になりますが、プログラミングの基本がちょっと知りたい、という方々には丁度いい内容になるかと思います。

20190205追記

RPGツクールの変数やコモンイベントを使えるようになるため〜javascript入門として、問題集&模範解答集を作りました!

RPGツクールMV中級〜上級問題&解答集(ツクールMVプロジェクトデータ)

DLsite様 商品ページ

FANZA(旧DMM)様 商品ページ

模範解答は、イベントとしてがっつり組んでありますので、【シンボルエンカウント】とか【畑】は、そのままコピペで使えると思います!

是非ご活用ください!

それではまた明日とか!!

-RPGツクール技術部門