一定期間更新がないため広告を表示しています
音楽系個人サークルNo Modeのサイトを立ち上げました。別にStudio F#を脱退したわけじゃないです。ゲームも作ってますよ。
まだ開設したてなのでコンテンツがほとんどありませんが、楽曲素材を二曲だけ置いてあるので、お時間とご興味のある方は是非に。beatmania風にいえば、Funky Jazz Breakです(謎
そろそろ実際的な内容に入っていくことにしましょう。用例をまじえつつ綴っていくので、気が向いたら制作中のゲームに活かしちゃってください。
さて、最初はプログラミングの基本中の基本。変数について述べていきます。
変数とは何か、ということを簡潔に表現すると、「データの一時的な容器」です。
私たちの身の回りにある容器には、大きなものから小さなものまで、様々なものがあります。コップや茶碗も容器ですが、冷蔵庫や食器棚も容器であると言えないこともありません。それどころか、あなたが今居る部屋や、倉庫やビルといった建築物、自動車や電車といった乗り物も、ものすごく極端に解釈すれば、容器の一形態です。
変数にも色々な種類がありますが、普通、単に「変数」といった場合は、コップや茶碗のような比較的小さい容器を指します。つまり、ひとつの変数にはあまり大きなデータを入れられません。その代わり、TJSにおいては、どんなデータを変数に入れてもあまり問題は生じません。数でもいいし、文字列でもいいし、グラフィックでもいいし、とにかくかなり色々なものを入れることが出来ます。変「数」なのに文字が入るの? と、不思議に思うかもしれませんが、そのことについてはいずれ機会があったら触れてみたいと思います。
変数はKAGシステムだけでゲームを作る時にも、よく使われます。例えば、主人公の名前をプレイヤーに入力してもらう場合、f.charnameというような変数を用意して、[edit]タグで作ったフォームに入力してもらった内容を入れておく、というようなことをします。こういう使い方は本家のKAGリファレンスで解説されていますので、是非参考にしてください。
ところで、普通、ゲームには主人公以外の人物も数人〜多人数登場しますね。既に実践されている方もいらっしゃるかもしれませんが、彼らの名前を変数に入れておいて、シナリオからはそれを呼び出す、ということをすると、作業が効率的になる場合があります。
ひとつ例を挙げてみましょう。主人公の他に、二人の登場人物が居るものとします。彼らの名前をあらかじめ変数に入れておいて、シナリオでは彼らの名前を直接呼び出すのではなく、[emb]タグで埋め込む、という作業を想定します。
まず、first.ksなど、ゲーム起動時に最初の方で読み込まれるファイルに、次のように記述します:
[iscript]次に、どこかシナリオファイルの会話シーンなどで、次のように記述します:
var hito1 = 'ルート';
var hito2 = 'ウィル';
[endscript]
[emb exp="hito1"]:なあ、ちょっと買い物に行かないか?[l]すると、ゲーム画面には「ルート:なあ、ちょっと買い物に行かないか?」というように表示されます。人名を変数に入れておいて[emb]タグで呼び出せるようにしておくと何が便利かというと、制作も大詰めに来た時に急に設定が変更されて名前が変わってしまったときに迅速に対処できるとか、登場人物の名前をランダムに設定したりとか、クリア後は全登場人物の名前を設定できるようにしたりとか、記述次第で色々とつぶしが効く……かもしれません(笑)。
さて。
[iscript]タグと[endscript]タグはシナリオファイル(.ksファイル)の中でTJSを記述する時に使うタグの一種で、吉里吉里は、この二つのタグに挟まれた行を、KAGタグではなくTJSのプログラムとして解釈・実行します。
上のTJS文を日本語に翻訳すると、「hito1という名前の変数を用意して、そこにはルートという文字列を入れておく。」「hito2という名前の変数を用意して、そこにはウィルという文字列をいれておく。」という意味になります。分解すると、
- var ……「という名前の変数を用意して」
- hito1 ……(変数の名前)
- = ……「を入れておく」
- 'ルート' ……「ルートという文字列」
- ; ……「。」
上の例文にも、早速TJS文法で最も重要な規則が現れています。箇条書きにすると、
- プログラムは、必ず半角英数字で記述しなければならない。ただし変数の名前には全角文字を使っても良い(ちなみに変数の名前のことを識別子といいますが、まあ覚えなくても問題ありません)。
- 変数を使う時は、必ず「var」という単語を使って、あらかじめ明示的に用意しなければならない(これを「変数を宣言する」といいます。また、このような特別な働きをする単語のことを予約語と言いますが、これまた覚えなくても問題ありません)。
- 変数にデータを入れるときは、「=」を使って、「変数の名前 = データ」というようにする(これを「変数に値を代入する」といいます。これは覚えておきましょう)。
- 変数に文字列を入れるときは、半角だろうと全角だろうと、必ず「'」か「"」で囲まなければならない。
- 文は、必ず「;」で終わらなければならない(日本語の文章が「。」で終わるようなものですね)。
ちなみに、「f.param」や「sf.param」、「tf.param」といった、f.やsf.、tf.が頭につく変数は、KAGシステムが面倒を見てくれるため、明示的に用意しなくてもエラーにはなりません。また、これらの変数は、.tfを除いて、KAGシステムが自動的に栞などにセーブしてくれます。ただ、大きいデータになると動作速度やセーブデータの大きさなどに影響する場合もありますし、また後々説明する特殊なデータにはKAGシステムが完全に面倒をみてくれないものもあります。
状況に応じて変数を使い分けるのが、TJSプログラマの第一歩と言えるかもしれません。