空想曲線

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

吉里吉里/KAG:万能ダイスを作ってみよう 後編  

2016-05-31[Tue]
cm0
tb0

(_´Д`)ノ< つづきよ、奥さん。

 リンク:万能ダイスを作ってみよう 前編
 リンク:万能ダイスを作ってみよう 中編

万能ダイスを作ってみようシリーズ最後です。
今回は edit タグを使ってダイスの個数と面数を設定できるようにします。

それではスクリプトから


[ iscript ]

var dice = new Array(); // ダイスの出目を格納しておく配列変数
var diceNum; // ダイスの個数
var diceSide; // 追加:ダイスの面数

/* ダイスロール
---------------------------------------------------*/

// ※引数 num のデフォルト値をdiceNum、maxのデフォルト値をdiceSideに修正

function diceRoll(num=diceNum,min=1,max=diceSide){
 //diceNum = num; // 要らなくなったのでコメントアウト
  for(var i=0; i < num; i++){
   dice[i] = int(Math.floor(Math.random()*((max-min)+1))+min);
   }
  return;
 }
[ endscript ]


つぎはエディット欄を作成します。


*edit
[ cm ]
; エディット欄を作る(ダイスの個数)
[ edit length=50 maxchars=2 name=diceNum ][ r ]

; エディット欄を作る(ダイスの面数)
[ edit length=50 maxchars=3 name=diceSide ][ r ]

; ひとつめのエディット欄にフォーカス
[ eval exp="kag.fore.messages[0].links[0].object.focus()" ]

[ link target=*check ]ダイスロール[ endlink ]
[ s ]

*check
; エディット欄の内容を確定する
[ commit ]

; 数値が入ってない、0が先頭に入っている、どちらかに0が入力されている場合はNG
;ここでは途中で改行してるけどスクリプトは一行で書ききってください

[ if exp="!/^([1-9]\d*|0)$/.test(diceNum) || !/^([1-9]\d*|0)$/.test(diceSide)
|| diceNum == 0 || diceSide == 0" ]


; 変数をリセットして
[ eval exp="diceNum = diceSide = ''" ]

; エディット入力へ戻す
[ jump target=*edit ]

; きちんと入力されているとき
[ else ]

[ iscript ]

// editで入力された変数は全て文字列変数なので数値に変換
diceNum = +diceNum;
diceSide = +diceSide;

[ endscript ]

[ jump target=*diceroll ]
[ endif ]


エディット欄に入力した数値の判定については「正規表現」でググってちょーよ。
では、残りの処理をサクサク書いていきましょう。


*diceroll
; さいころコロコロするころん
[ eval exp="diceRoll()" ]

*result
; tf.count:「◯回目」用のカウンター
; tf.num:出目用のカウンター
[ eval exp="tf.count = 1, tf.num = 0" ]

*loop
; 出目表示:回数は2ケタ右詰め、出目は3ケタ右詰め
[ emb exp="@'${'%2d'.sprintf(tf.count)}回目:${'%3d'.sprintf(dice[tf.num])}'" ]
[ r ]

; カウンターをそれぞれ+1
[ eval exp="tf.count++, tf.num++" ]

; 出目カウンターとダイスの個数が同じになったらループを抜ける
[ if exp="tf.num < diceNum" ]
[ jump target=*loop ]

; それ以外はループ
[ else ]
[ jump target=*end ]
[ endif ]


*end
; ダイスロール終了
[ s ]


じつはワザと処理をスルーしていることがひとつあります。
TRPGをプレイされる方ならご存知だと思うのですが
10面ダイスって最小値が0で最大値が9じゃないですか。

そうなると出目の最小値も edit で指定できたほうがいいですよね。
でも「出目の最小値 > ダイスの面数」という入力ミスがあったら
出目がおかしくなっちゃうから対策を練らないとダメだよなとか。

…………
……………………

∠( ゚д゚)/< できるできるキミなら改造できる(最後の最後で丸投げしていくスタイル)


関連記事

コメント

コメントの投稿

Secret

トラックバック

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

現在のページ

Category

Link

Comment

Mailform

Author

Twitter