空想曲線

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

吉里吉里/KAG:edit 欄に入力された文字列を数値に変換する  

2013-04-19[Fri]
cm0
tb0

吉里吉里/KAGちょいネタシリーズ。

input もしくは edit タグを使った時に入力された数値は全て文字列として認識されます。
この文字列を数値に変換するには次のようなスクリプトを書きます。



文字列を数値に変換する


*edit
; エディット欄を作る
[ edit name="f.b" maxchars=4 length=200 ]
[ link target=*check ] これでOK [ endlink ][ s ]

*check
; 入力内容を確定する
[ commit ]
[ eval exp="f.b = +f.b" ] ← 文字列を数値に変換
[ emb exp="f.b" ]

変数の前に「+」を書くだけです。簡単簡単。



文字列を数値に変換しながら別の変数と計算する


*test
; 変数 f.atk に500,000を代入
[ eval exp="f.atk = 500000" ]
; f.hoge の中身は空っぽにしておく
[ eval exp="f.hoge = ''" ]

*edit
[ cm ]
; エディット欄を作る
[ edit name="f.hoge" maxchars=5 length=200 ]
[ link target=*check ] これでOK [ endlink ][ s ]

*check
; 入力内容を確定する
[ commit ]
; f.atk に f.hoge を数値化したものを足した結果を表示する
[ emb exp=@"私の戦闘力は${f.atk+ +f.hoge}です。"]

f.atk の後ろの「+」と f.hoge の前の「+」の間にスペースを入れないと
インクリメント演算子「++」と判断されてしまうので注意が必要です。



おまけ・入力した数値を順番に配列に放り込む


edit で入力した数字を数値にして、配列に1つずつ入れていく方法です。

[ iscript ]

/*
 引数 arr は配列変数、user はエディット欄に入力した文字列。
 入力した文字列を頭から1つずつ拾って配列の頭から入れていく。
 そのあと配列に入ってる文字列変数を数値に変換する
 ……という処理を配列の長さ分だけ繰り返す
*/

// 関数の名前は適当でいいです

function Foo(arr, user)
 {
  for(var i=0; i < arr.count; i++)
   {
     arr[ i ] = user.substring(i, 1);
     arr[ i ] = +arr[ i ];
   }
 }


// 変数類
f.arr = []; // 配列の宣言
f.arr.count = 7; // 配列変数 f.arr の長さを7にしておく
f.hoge = ''; // エディット欄に入力した文字を格納する変数

[ endscript ]

では、KAG に戻ってスクリプトを書きます。
*edit
[ edit name="f.hoge" maxchars=7 ]
[ link target=*check ]
これでOK [ endlink ][ s ]

*check
[ commit ]
; 何も入力してない、または7文字じゃないときは入力画面に戻す
[ if exp="f.hoge == void || f.hoge.length != 7" ]
[ jump target=*edit ]


; スペースや数字以外ものが入っているときは f.hoge を空にして戻す
[ elsif exp="/[\s]/.test(f.hoge) || /[^0-9]/.test(f.hoge)" ]
[ eval exp="f.hoge = ''" ]
[ jump target=*edit ]

; どれにも当てはまらなければ変数を配列に放り込む
[ else ]
[ eval exp="Foo(f.arr, f.hoge)" ]
[ endif ]


※条件式も関数に入れてしまえば、もう少しスッキリ書けます

このスクリプトはマグマグガンバ支援ツールを作るときにゴリゴリ書いたのですが、
それ以外の使い道が思いつかないので substring の使い方でも書いてごまかします。

変数名.substring(位置, 長さ)
 位置:変数の何文字目から取り出すか
 長さ:どれだけの長さを取り出すか

たとえば主人公の名前 f.p_name に「かぐこ」という文字列変数が入っているとして
[ eval exp="f.p_name = 'かぐこ'" ]

f.p_name の最初の2文字を抜き出したものを f.p_nickname に代入して
[ eval exp="f.p_nickname = f.p_name.substring(0, 2)" ]

こう書けば「かぐちゃん」って呼んでもらえる
[ emb exp=@"こんにちは、${f.p_nickname}ちゃん。"]

友情度や好感度に応じて呼び方を変えたいときに使うと楽しいかもしれません。
ただ、これ日本名でしか使えねっス(´ε`;)< Catherine とか入力されたらもうムリ


関連記事

コメント

コメントの投稿

Secret

トラックバック

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

現在のページ

Category

Link

Comment

Mailform

Author

Twitter