Skip to content

超革命的ゲームスクリプト言語アトラスXの使い方 #2 フラグを使おう

やあみんな。元気かな?

アトラスXは使いこなせているじゃろうか。

はやくもアトラスXを駆使したゲームがちらほら投稿されてきているぞ!

冒険アドベンチャーの火の国YAMATO

推理ものの秋葉原ネットカフェ殺人事件

火の国YAMATOは、アトラスXを使って作られた本格的な冒険ノベルゲーム。
日本書紀の英雄、ヤマトタケルを主人公にした壮大な物語だ。

けっこう、シビアに死ぬので、クリアするのはなかなか手強いぞ。

さてさて、今日学ぶのは、「フラグ」の使い方について、だ。
「フラグ」とはなにかというと、「旗」だと思えばいい。

よく、「あいつは死亡フラグが立った」なんて言わない?
これはゲーム開発用語から来た言葉なんだ。

「死亡フラグ」とは、「この人はこれから死亡します」という流れが決定した、という意味。
だいたいのアニメやマンガで、普段目立たないキャラクターがたまに英雄的な働きをしたり、「おれ、この戦争が終わったら、ブラジルでコーヒー園をやるんだ」などと、遠い未来の話をしたりすると、だいたいこの「死亡フラグが立った」と言われる。

で、だいたいその台詞の直後に死んじゃうんだよね。

とはいえ、実際のゲームでは「死亡フラグ」なんてのはまず使わない。
ではどんなフラグがあり得るか?

実際の例を示そう。

var 周囲を見た=NO; //A 「周囲を見た」フラグはデフォルトでNO

プロローグ= function(){
     台詞("どうする?");
     if(周囲を見た){  //B フラグをチェック
          選択肢("ドアに近づく",ドア);
          選択肢("壁に近づく",壁);
          選択肢("パイプ椅子を見る",パイプ椅子);
     }else{ //C ifが不成立のとき
          選択肢("あたりをみまわす",周囲を見回す);
     }
};

周囲を見回す = function(){
   周囲を見た=YES; //D ここで「周囲を見た」フラグを立てる
     台詞("周囲をみまわした");
     台詞("白い壁に、頑丈そうなドアがある");
     台詞("それから、いまのいままで自分が");
     台詞("座っていたパイプ椅子");
     台詞("それ以外はなにもなかった");
     次へ(プロローグ); //E 前のシーンにもどる
};

前回に比べるとややプログラムっぽく見えるかもしれないね。

ここでは周囲を見たかどうかを確認する、「周囲を見た」フラグを使っている。
Aの行で「周囲を見た」フラグを宣言し、デフォルトでNOを入れている。
ちなみにアトラスXでは、「NO」「まだ」は同じ意味だ。だから「周囲を見た=まだ」でもいい。
ただし、「=(イコール)」などの記号は半角でないとダメだから注意しよう。

さて、Bの行では、「周囲を見た」フラグを確認している。
if(周囲を見た)とすると、「周囲を見た」フラグが立っていれば、続く大括弧{〜}の中身を実行するが、そうでなければ、Cの行(else)に続く大括弧{〜}の中身が実行される。

最初は「周囲を見た」フラグがNOだから、Cの行以降が実行されることになる。
その結果、最初、「あたりをみまわす」という選択肢しか表示されていない。

ここで「あたりをみまわす」と、次は「周囲を見回す」というシーンにジャンプする。
このシーンの冒頭であるDの行では、「周囲を見回す=YES」という行がある。

これはまさに「周囲を見回す」というフラグを立てたということになる。

そしてEの行で、「プロローグ」のシーンに戻る。

再びプロローグに戻ると、今度は「周囲を見回す」というフラグが立っている(YES)だから、今度はさっきとは違い、C行のifの直後に続く大括弧{〜}の中身が実行される。


選択肢が増えたね。
フラグはこんなふうに使うんだ。

また、選択肢を選んだだけでフラグを操作したくなることもあるかもしれない。
そういうときは、こんなふうにすることもできる。

プロローグ= function(){
     台詞("どうする?");
     if(周囲を見た){  
          選択肢("ドアに近づく",ドア);
          選択肢("壁に近づく",壁);
          選択肢("パイプ椅子を見る",パイプ椅子);
     }else{
          選択肢("あたりをみまわす",プロローグ,"周囲を見た=YES"); //A フラグを操作する
     }
};

こうすると、別のシーンにジャンプしなくても、フラグをいきなり操作することができる。
ただし、注意しなくてはならないのは、この「周囲を見た=YES」というフラグ操作は、引用符(“” ダブルクオーテーション)で囲まなければならないという点だ。

また、フラグにはYESやNOだけでなく、数字や文字を入れることもできる。

var カウンタ=0;
var 名前="shi3z";
プロローグ= function(){
     台詞("こんにちは。私は"+名前+"です"); // A文字列を入れた変数をつかう
     台詞("これは"+カウンタ+"回目の表示です"); // B数字を入れた変数をつかう
     選択肢("もう一回",プロローグ,"カウンタ=カウンタ+1"); //C カウンタに1を足す
};

実行すると以下のようになる。

「もう一回」を何回か押すと「これはxxx回目の表示です」という数字が少しずつ繰り上がっていくのがわかると思う。

ここまで来ると立派にプログラミングだ。

たとえば10回目には違ったメッセージを出したい、という時は以下のようにする。

var カウンタ=0;
プロローグ= function(){
      台詞("これは"+カウンタ+"回目の表示です");
      if(カウンタ==10){ // カウンタがちょうど10回なら実行する
           台詞("これは記念すべき10回目です");
     }
     選択肢("もう一回",プロローグ,"カウンタ=カウンタ+1");
};

「==」とイコールを二回繰り返すと、「等しいか」を調べる式となる。
カウンタがちょうど10のときだけ、表示するわけだ。

不等号も使うことができる。

var カウンタ=0;
scene1= function(){
      台詞("これは"+カウンタ+"回目の表示です");
      if(カウンタ==10){
           台詞("これは記念すべき10回目です");
     }
      if(カウンタ<20){ //A 20回未満の場合
           選択肢("もう一回",scene1,"カウンタ=カウンタ+1");
     }else{
           台詞("いい加減にしないとボタンが壊れますよ"); //B 選択肢は出さない
     }
};

これだと、カウンタが20回未満なら繰り返し、ちょうど10回目には「記念すべき10回目です」と表示し、20回を超えると「いい加減にしないとボタンが壊れますよ」と表示して選択肢を出さないようにしている。

フラグをうまく使うことでより高度なゲームを作ることができるぞ。

以下は、フラグを使って作った脱出ゲームだ。

ソースもダウンロードできるようにしているので、ぜひ参考にしてくれ!

ではまた次回

このエントリーをはてなブックマークに追加
はてなブックマーク - 超革命的ゲームスクリプト言語アトラスXの使い方 #2 フラグを使おう
Post to Google Buzz
Share on GREE

Related posts:

  1. 超革命的スクリプト言語 アトラスXの使い方 #1
  2. [enchant.js]shi3z式ゲームプログラミング #7 タイムアタックは神!
  3. enchant.js用マップエディタenchantMapEditorが大幅にパワーアップ!
  4. shi3z式ゲームプログラミング入門 #8 enchant.jsでプチ物理シミュレースゲームを作ってみた
  5. shi3z式ゲームプログラミング入門 #3 “ゲームらしく”する

Facebook comments:

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*