如何将变量传递给javascript math.random

时间:2014-01-01 21:52:59

标签: javascript php jquery html ajax

所以我完全不知道如何实现这一目标。希望有人可以提供一些指导。我已经构建了一个聊天系统,允许随机掷骰子(用于D& D游戏)。在聊天div中,我有一个表格,允许选择骰子的数量,以及骰子类型(即4面,6面,10面等)。然后它将带有php的表单输入传递给chat.txt文件。我正在使用ajax在chat div中显示chat.txt。

因此,当我最初开始时,我使其功能为1d20(1 20个骰子)。并使用x.value = Math.floor((Math.random()* 20)+1)使其选择1到20之间的随机数。现在我需要它能够检测骰子的数量,如以及骰子的侧面量(d4,d6,d8)。有没有办法将数量和骰子变量传递给math.random?甚至更好,然后分别显示每个数字(意思是说你滚动2 d6并获得5和3 3.我希望它分别显示5和3。但这不是完全需要的,大多数我需要知道如何根据$ quantity和$ dice获得不同的随机范围。或者可能采用一种完全不同的方法?任何和所有的帮助都非常受欢迎。

<div id="pageWrap">

<div id="expander"> Expand</div>

<?php
if(isset($_POST['submit']))//on submit
{
    $roll = $_POST['roll'];
    $quantity= $_POST['quantity'];
    $dice = $_POST['dice'];
    $nickname = htmlentities(strip_tags($_POST['nickname']));
    $file = fopen('chat.txt', 'a');
    fwrite($file, "<span>". $nickname . " :</span>" . $roll = str_replace("\n", " ", "    <em> Rolls </em>$quantity $dice <em>for</em> $roll") . "\n");
    fclose($file);
}
?>

<form action="" id="rollBox" name="rollBox" method="post">
    <input type="text" name="roll" id="demo">
    <input type="number" name="quantity" min="1" max="10">
    <select name="dice">
        <option value="d4">d4</option>
        <option value="d6">d6</option>
        <option value="d8">d8</option>
        <option value="d10">d10</option>
        <option value="d12">d12</option>
        <option value="d20">d20</option>
    </select>
    <button type="submit" name="submit" >Roll</button>
</form>

<script>
$(document).ready(function () {
$('#rollBox').submit(function(e) {
var x=document.getElementById("demo")
x.value=Math.floor((Math.random()*20)+1);
e.preventDefault();
var obj = $(this), // (*) references the current object/form each time
                        url = obj.attr('action'),
                        method = obj.attr('method'),
                        data = {};
                        obj.find('[name]').each(function(index, value) {
                        var obj = $(this),
                            name = obj.attr('name'),
                            value = obj.val();
                        data[name] = value;
                    });
$.ajax({
                        url: url,
                        type: method,
                        data: data,
                        success: function(response2) {}
                        });
                        return false; 
});
});

</script>
</form>
<p id="name-area"></p>
<div id="chatWrap"><div id="chat-area"></div></div>

<form id="send-message-area">
    <p>Your message: </p>
    <textarea id="sendie" maxlength = '200' ></textarea>
</form>

</div>

1 个答案:

答案 0 :(得分:2)

此函数采用骰子数和骰子类型,并返回一个填充随机数的数组。但是,你需要的是循环,javascirpt循环通过骰子的数量循环并获得每个骰子的随机值。

 function getRandome (num_dice , dice_type) {
    var result=[];
    for (var i = 0 ; i < num_dice; i++) {
        result[i] = Math.floor((Math.random()*dice_type)+1)
    }    

    return result;

}

由您决定如何获取输入值,但这是一个完整的答案JS FIDDLE

现在让我们看看这个例子

var num_dice = 5;// number of dices
var dice_type = 3;//3 faces
var randomArray = [] ;//will store the random result here as an array
 randomArray  =  getRandome (num_dice , type );
var randomString  = randomeArray.join(",");//convert the array to string adding a comma "," between indexes;  
//assign the string result of random to a text field, div, span etc
$("#demo").val(randomString);//jquery
//OR
document.getElementById("demo").value = randomString;//javascript