是否可以控制rand的输出,例如,如果我只想让rand给我变量$ roll1的输出,其值为或者在rand运行时的六种可能性中的一半时间的数量或者刷新浏览器时,如何实现?
我的代码很糟糕,但我正在努力学习,我偶尔会得到一个,但它不一致,我每次刷新页面时都想要1。
所以,如果我刷新页面6次,我应该从变量$ roll1中获得1次三次,而$ roll1的其余值应该是随机的。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>loaded dice</title>
</head>
<body>
<h1>loaded dice</h1>
<h3>loaded dice</h3>
<?php
// loaded dice, should roll the number 1 half the time out of a total of 6.
// So if I refreshed my browser six times I should at least see three 1's for roll1.
$roll1 = rand(1, 6);
// Okay is it possible to divide rand by two or somehow set it up
// so that I get the the value 1 half the time?
// I am trying division here on the if clause in the hopes that I can just have
// 1 half the time, but it's not working,maybe some type of switch might work? :-(.
if ($roll1 == 3) {
$roll1 / 3;
}
if ($roll1 == 6) {
$roll1 / 6;
}
if ($roll1 == 1) {
$roll1 / 1;
}
// This parts works fine :-).
// Normal random roll, is okay.
$roll2 = rand(1, 6);
print <<<HERE
<p>Rolls normal roll:</p>
You rolled a $roll2.
<p>Rolls the number 1 half the time:</p>
<p>You rolled a $roll1.</p>
HERE;
// Notice how we used $roll1 and 2, alongside the HERE doc to echo out a given value.
?>
<p>
Please refresh this page in the browser to roll another die.
</p>
</body>
</html>
答案 0 :(得分:6)
你可以做这样的事情
if (rand(0,1))
{
$roll = rand(2,6);
}
else
{
$roll = 1;
}
答案 1 :(得分:4)
你不能直接让rand()这样做,但你可以这样做:
<?PHP
function roll(){
if(rand(0,1)) //this should evaluate true half the time.
return 1;
return rand(2,6); //the other half of the time we want this.
}
答案 2 :(得分:0)
略有不同的解决方案。它不是那么优雅,但也许更有利于更精细地装载模具?
$i = rand(1, 9);
if($i<=3)
{
$num = 1;
}
else $num = $i-2;
答案 3 :(得分:0)
因此,如果你想保证在最后6卷中它们总是至少有3个,我认为你必须跟踪卷的历史。这是一种方法:
<?php
if (array_key_exists('roll_history', $_GET)) {
$rollHistory = unserialize($_GET['roll_history']);
} else {
$rollHistory = array();
}
$oneCount = 0;
foreach($rollHistory as $roll) {
if ($roll == 1) {
$oneCount++;
}
}
if (6 - count($rollHistory) + $oneCount <= 3) {
$roll = 1;
} else {
if (rand(0,1)) {
$roll = rand(2,6);
} else {
$roll = 1;
}
}
$rollHistory[] = $roll;
if (count($rollHistory) > 5) {
array_shift($rollHistory);
}
echo '<p>Weighted Dice Role: ' . $roll . '</p>';
echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="get" >';
echo '<input type="hidden" name="roll_history" value="' . htmlspecialchars(serialize($rollHistory)) . '" />';
echo '<input type="submit" value="Roll Again" name="roll_again" />';
echo '</form>';
答案 4 :(得分:0)
而不是两次调用rand(),你可以简单地做一些额外的数学运算。
$roll = $x = rand(1,12)-6 ? $x : 1;