概要

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 ($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;

コメント

コメントはありません。 Comments/改造/乱数ロールプログラム?

お名前:

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-04-30 (火) 00:57:44 (718d)