空想曲線

吉里吉里2/KAG3でのゲーム制作に使える小ネタ置き場。ゲーム用素材も置いてます。

吉里吉里/KAG:式中辞書配列の使い方とそのメリット  

2012-08-02
2017-06-14
cm0
tb0

吉里吉里/KAGちょいネタシリーズ。今回は式中辞書配列についてのお話です。
そんなに難しいことは書きませんので、パピコでも食べながらのんびりお読みください。


式中辞書配列ってなに?


式の中に辞書配列が入ったもの。文字通りです(´ω`)
例を上げてみましょう。

[ iscript ]

// 今夏もアイスがないと乗り切れない
f.ice = %["パピコ"=>"おいしい", "爽"=>"ウマー", ”白くま”=>"デリシャス"];

[ endscript ]

変数f.iceの中にアイスの名前とそれにつけられた評価(値)が入っています。
アクセスする場合は次のように書きます。


*hoge
;表示させる
[ emb exp="f.ice.パピコ" ]

実行すると、画面にはパピコに与えられた「おいしい」という値が表示されます。
辞書配列には普通の配列のような添字がないので、どの辞書を参照するのかこちらで指定しないといけません。



ステータスの格納場所として使用する


キャラクタごとのステータスを格納するのに式中辞書配列を使ってみます。
(量が多いときは素直にcsvファイルを作って管理した方がいいと思います)

[ iscript ]

f.hoge = [

%["name"=>'ねこ', "pow"=>100, "def"=>70],
%["name"=>'いぬ', "pow"=>120,"def"=>80],
%["name"=>'とり', "pow"=>80, "def"=>100],
%["name"=>'ぱんだ', "pow"=>90, "def"=>75]

];

[ endscript ]

配列変数f.hogeの要素0~3のそれぞれに辞書配列が入っています。
nameはキャラの名前、powは攻撃力、defは防御力とします。

辞書配列の最後にカンマをつけないよう気をつけましょう。
配列f.hogeの添字がひとつ増えてしまいエラーになります。

アクセスの仕方は以下のとおりです。


;ねこの攻撃力を表示したい
[ emb exp="f.hoge[0].pow" ]

;いぬの攻撃力に10を足したい
[ eval exp="f.hoge[1].pow += 10" ]

;とりの防御力を1.5倍にしたい
[ eval exp="f.hoge[2].def *= 1.5" ]



式中辞書配列の便利な使い方


今回の本題です。何が便利かというと次のようなときです。

キャラ全員の攻撃力を20ずつ上げたいなぁ」というとき。

キャラが2~3人であれば個別にスクリプトを書いてやればいいのですが、
10人、20人に増えてくると面倒くさがりの自分はコピペすらイヤになってきます。
そこで、for構文を使ってループ処理をさせることにします。

[iscript]

// こう書けば一行で済む
for (i=0; i < f.hoge.count; i++){f.hoge[i].pow += 20;}

[endscript]


f.hogeの要素の数だけループしてpowに20を足していってくれるので、
キャラクタの数が100人になろうが65535人になろうが修正の必要はありません。



▼KAGで書きたいときはこんなカンジで

*pre
;カウント用の一時変数(上の例で言えば i に当たる部分)を評価
[eval exp="tf.ck = 0"]

*loop
;f.hogeの添字tf.ckのpowに20を足す
[eval exp="f.hoge[tf.ck].pow += 20"]
;tf.ckに1を足す
[eval exp="tf.ck++"]

;tf.ckの値がf.hogeの要素数未満なら*loopへ戻る
[if exp="tf.ck < f.hoge.count"]
[jump targt=*loop]

;そうでないとき(tf.ck==f.hoge.count)はループを抜ける
[else]
[jump target=*exit]
[endif]


*exit
[cm]
処理が終わったよ。

状況に応じて使いやすい方を選べば良いと思います。
ただ、こうした繰り返し演算はTJSの方が強いと言われてます(処理が速い)

シミュレーション系のゲームなんかで使えると思うので、よければお試しください。
それでは、また次回(´∀`*)ノシ < コミケに行く人、体調気をつけてね!


関連記事

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://kopacurve.blog33.fc2.com/tb.php/247-6513b13d
この記事にトラックバックする(FC2ブログユーザー)

Author

Recent

Category

Link

Comment

Mailform

Twitter