no-image

出目の範囲と回数を指定できるさいころjs

Pocket

タイトルまんまです。こちらをご覧ください。

左側のテキストボックスに出目の範囲、右側にさいころを投げる回数を入力しボタンを押します。

1~6の出目を100ふってくれました。

HTML入力フォーム

<form name ="js">
1~
<input type="text" name="x" value="">
までの目を
<input type ="text" name = "y" value ="">

<input type="button" value="さいころをふる" onclick="go()">
</form>
ボタンを押すと関数go()を実行するようになっています。

javascript

function go(){
let a=parseInt(document.js.y.value);
let b=parseInt(document.js.x.value);
for (let i=0;i<a;i++){
document.write(Math.ceil(Math.random()*b)+" ");
}}

何とたったの5行!

parseInt()というのは、()の中の数を数値として認識させるための呪文です。

こいつなしに数を直接書き込むと、数値ではなく文字として認識されてしまいます。

Math.ceil()は、数の小数点以下を切り上げる呪文です。

Math.random()は、0以上1未満のランダムな数値を吐いてくれる呪文です。

こいつと出目の最大値の積にMath.ceil()をチチンプイプイすると、

Math.ceil(Math.random()*出目の最大値)

サイコロの完成です。

ちなみに、Math.random()君は世界中のjavascriptユーザーに嫌われています。

seed値というものが設定できないのです。

seed値?何それマイクラ?って思った人、ggrksですすいません。

seed値がないとどう不便なのか?

ゲームでよくある「リプレイ」ができなくなります。

リプレイには「再現性のある乱数」というものが必要です。

たとえば、

ゲームプレイ時、ランダム性のあるイベントに差し掛かり、seed値1が選ばれたとします。

最初の出目が6でした。

リプレイのときにseed値が設定できれば、リプレイ開始時にseed値を1とすると、初プレイ時と同じ出目がでて、同じようにゲームが進行します。

seed値が設定できないと、毎回違う出目が出てしまう(初プレイ時の状況を再現できない)ので、リプレイができません。

という理由から、Math.random()よりもメルセンヌツイスターという乱数発生の呪文がよく使われています。