少しだけ分かりやすいグローバル変数の使い方を。

投稿者:         png  mini 月村 投稿日:2014/07/10 00:59

こちらの企画ブログにて、
グローバル変数を利用したゲーム参加部門がありますが、
「グローバル変数???」な感じでよく分からないものだと思われる方もいると思われますので、
そんな方たちに向けて、ちょっとだけ分かりやすく説明するのがこのブログの目的です。


……ということで!






アルア
「おう、流行に乗り遅れまくりな形式だな!
 ってことで、Rなアルアがグローバル変数の組み込み方について教えるぜ!
 使いこなしたいって奴はよぉーく聞け!!」








グローバル変数 ~一本道なゲームにグローバル変数でちょっとした隠しを!~



アルア
「ここで言う『一本道』は、エンディング数が1つってことだな!
 勇者が魔王を倒す王道な物語とかは大体そんなものだな!
 そんなありきたりな話に、課題を付け加えるだけで
 違って見えるようになる……かもな!」



(早速、そんなありきたりな一本道ゲームを月村が用意)







アルア
「…………。

 いくらなんでも手抜きじゃねーかよコレ……」




アルア
「とりあえず、ここから手を加えるぜ!
 今回グローバル変数として使う条件は
 『伝説の剣を持っているか』だ!
 とりあえず、新しいイベントでも作って説明するぜ!」








アルア
「今回は分かりやすいように、
 伝説の剣を持っているかどうかは『フラグ』を使うぜ!
 setFlag("伝説の剣", ture) がフラグを立てる命令だ!
 これで、変化があったかどうかを気軽に確認できるぜ!」







アルア
「何回も『伝説の剣をもらった!』なんて表示されたらおかしいから、
 if文を使って分岐させたぜ!
 このif文は後でも使うことになるから、
 しっかりとっ!覚えておくといいぞ!
 分からないなら、とりあえず下の文章をコピーして会話文でもいじればいい!
 動くところを見るのが一番の学習法だからな!」


伝説の剣をもらう用のスクリプトのサンプル
#伝説の剣を手に入れた後
if getFlag("伝説の剣") 
 speak("「さあ勇者よ、\n 早く魔王を倒すのです!」")

#伝説の剣を手に入れる前
else
 speak("「さあ勇者よ、\n この剣を使って魔王を倒すのです!」")
 speak("伝説の剣をもらった!")
 setFlag("伝説の剣", true)
end







アルア
「そして、ここからが本番、グローバル変数を使っての保存だ!
 エンディングへの道がある魔王のイベントを編集するぜ!
 完成品を見せるから、そこから順に説明していくぜ!」






アルア
「まず最初に、さっきのif文を使っているぞ!
 剣を持っているかどうか判定して、判定して飛んでった所に
 xに結果の文を入れているぜ!
 今回は、このxをグローバル変数に入れるための器になるぜ!」



アルア
「次に、おまじないって書いてあるのは、
 グローバル変数を保存するためのテーブルを綺麗にしている所だ!
 そう、グローバル変数はテーブルに置いてある皿みたいに並べて置くんだぜ!
 置けるのは8個までって決まりがあるから、
 たくさん用意できない点には注意だ!」



アルア
「綺麗にしたテーブルに、保存するための皿を用意するぜ!
 皿は料理という名の変数が盛られる場所!
 『伝説の剣』って書いてあるのは料理名だな!
 皿の上に乗っかる物は x ……さっきのif文で入れたやつだな!
 剣を持っていれば『持っている』が中身に入るぞ!」



アルア
「そして……、エンディングへ行く命令が最後に入っている!
 とまあ、思ってたのよりは簡単にグローバル変数は保存できるもんだぜ!
 こういう一本道のゲームなら、エンディングを表示する前に、
 条件を適当に入れるだけでグローバル変数を分けて用意できるのさ!」



魔王のスクリプトのサンプル
speak("「ぐわぁあぁぁぁぁああああああああ!!!!!」")
speak("こうして、この世界の平和は取り戻された。\n\n\nおわり。")

if getFlag("伝説の剣") #剣を持っている
 x = "持っている"
else #剣を持っていない
 x = "持っていない"
end

#念の為のおまじない。
clearSaveGlobalVariable()

# x に入っている文章をグローバル変数として保存
addSaveGlobalVariable("伝説の剣", x)

#エンディングへ
goEnding()




アルア
「保存はできたが、やっぱりちゃんと中身が入っているか知りたいよな!?
 だから、読み込み用のスクリプトも用意したぜ!
 ただし!
 グローバル変数は『ゲームクリア』した時にしか保存されないから
 ひとまず上のスクリプトを使ったゲームをクリアしてくるんだ!」










アルア
「クリアしたな?テストキャラでプレイしていないよな?
 最後のスクリプトは『開始スクリプト』に書くから、
 マップ編集から離れて、開始スクリプトって場所を探すんだ!」








アルア
「最後のスクリプトも割とシンプルだ!
 今度は、読み込むためのテーブルを綺麗にして、
 読み込むための皿を持ってくるって感じだな!
 皿の場所がゲームIDで、今回は適当に1って書いてあるが
 そこには自分のゲームのIDを入れてくれ!」



アルア
「そうしたら、グローバル変数を読み込む命令がその下にあるぞ!
 『この皿に盛る料理を持ってこい!』って感じだな!
 さらにその下にある命令は、完成品が置いてある皿から
 自分の皿に盛るって感じだな!
 ここでは、tesにID1という皿の、伝説の剣の料理を盛っているぞ!」




アルア
「皆が気になる、その料理の味!……というか変数の中身!
 人に味を聞くには感想で!……ということで、speakで聞き出しているぞ!
 普通に聞くんじゃつまんないから、自然な会話になるように
 ひと工夫入れているぞ!……だが……」






アルア
「クリアせずにグローバル変数を保存していなかったり、
 テストキャラでプレイしてクリアしていたら
 nullという訳分からない感想が来るから気をつけろよ!」






アルア
「こんな感じに表示されれば成功だ!
 お前はグローバル変数を見事使うことができたって訳だ!
 ここに用意されたスクリプトを参考にするだけで、
 グローバル変数はそれなりに使いこなせるはずだから、
 是非使ってくれよな!」






アルア
「あ、そうそう大事な事が1つ!!
 こういうグローバル変数の中身を確認する時に、
 『ゲーム公開』を前提としているならば、
 以下のように分岐させておくのをオススメしておくぜ!」






アルア
「ゲームをクリアしているかどうかを判定するやつだ!
 ただ、判定するゲームを公開していない場合は、
 どんなにテストプレーをしていても「false」……
 ……つまり、ゲームクリアしていない扱いにされるから、
 『ゲーム公開』の直前に付け加えるのがベストかもな!」




開始スクリプトのサンプル(実験用)
#gameIDには、自分のゲームのID(基本情報とかに書いてある!)を入れること

#グローバル変数を読み込むための準備
clearLoadGlobalVariable()
addLoadGlobalVariable(gameID, "伝説の剣")
#グローバル変数を読み込む
loadGlobalVariable()

# tes にグローバル変数の内容を入れてみる。
tes = getLoadedGlobalVariable(gameID, "伝説の剣")

# tes にグローバル変数の中身を喋らせてみる。
speak("あなたは前回のクリアの時、\n伝説の剣を",tes,"状態でした!")



アルア
「以上で終了だ!
 最後まで聞いてくれて、ありがとな!
 なお、ここにあるスクリプトは自由に使っていいぞ!
 思う存分試してみてくれ!」



コメントする

コメントするには、ログインする必要があります。

コメント一覧

コメントはありません。