トップ 新規 一覧 Farm 検索 ヘルプ RSS ログイン

乱数ロールプログラムの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!{{category SOS2改造}}乱数ロールプログラム

!!概要
TRPGではダイスを振ることをロールすると言います。
というわけで乱数支援用のルーチンを2つ用意してみました。

:ランダムロール:
これは単に乱数を発生するだけですが、サブルーチン化すると便利……かもしれません。
少し多機能になっています。

:ダイスロール:
これは何面体ダイスを何回ロールしたか、という結果を出すことが出来ます。
洋ゲーやTRPG、某所Shattered Legacyなどで多用されている手法です:)

!!ランダムロール

!サブルーチン
 sub rnd_roll {
 	$Roll  = int(rand($_[0] - $_[2])) + $_[1];
 	$Roll -= $_[3];
 	$Roll  = 0     if $Roll < 0;              # 戻り値の最低値を 0 と指定
 	$Roll  = $_[1] if $_[1] && $Roll < $_[1]; # $b が代入された場合、その値を最低値と指定
 
 	return($Roll);
 }

!リクワイア
 $scalar = &rnd_roll($a,$b,$c,$d);

!使い方
上記のリクワイアを記述することで実行します。
まず、各変数の説明が以下のようになります――

,変数,説明
,$scalar,発生した乱数が戻り値として代入されます。
,$a,乱数の分母です。
,$b,戻り値に+する数値です。
,$c,乱数の分母から−させる数値(分母ボーナス)です。
,$d,乱数の結果から−させる数値(分子ボーナス)です。

!注意
戻り値の最低値は 0 と指定しています。
$b が代入された場合、その値を最低値と指定しています。
サブルーチン内のコメントアウトを参照してください。

!ケーススタディ
 $a = 100; only
 $scalar = 0 〜 99;

 $a = 100; $b = 1;
 $scalar = 1 〜 100;

 $a = 100; $b = 1; $c = 50;
 $scalar = 1 〜 50;

 $a = 100; $d = 50;
 $scalar = 0 〜 49;

 $a = 100; $b = 10; $d = 100;
 $scalar = 10 〜 10;


!!ダイスロール

!サブルーチン
 sub dice_roll {
 	if (!$_[0] || !$_[1]) { return('0') }
 
 	$Dice = $Roll = 0;
 	while ($Roll < $_[0]) { 
 	while ($Dice < $_[0]) { 
 		$Roll += int(rand($_[1]));
 		$Roll ++;
 		$Dice ++;
 	}
 	$Roll += $_[2];
 
 	return($Roll);
 }

!リクワイア
 $scalar = &dice_roll($a,$b,$c);

!使い方
上記のリクワイアを記述することで実行します。
まず、各変数の説明が以下のようになります――

,変数,説明
,$scalar,発生した乱数が戻り値として代入されます。
,$a,ダイスをロールする回数です
,$b,ダイスの種類です、$b面体ダイスという意味です。
,$c,ボーナス値を設定できます。

!ケーススタディ
 ショートソード(1D6)
 $scalar = &dice_roll(1,6);
 $scalar = 1 〜 6;

 ロングソード+1(1D8+1)
 $scalar = &dice_roll(1,8,1);
 $scalar = 2 〜 9;

 カシナートの剣(1D3+9)
 $scalar = &dice_roll(1,3,9);
 $scalar = 10 〜 12;