我最近一直在尝试编写一个程序(基于文本的游戏),但我只知道一些命令并且不太了解每个命令。
我想做的是一个成功的机会。可以说我希望程序具有
- 90% 的机会选择数字 1(这意味着命中)和
- 10% 选择数字 0(这意味着错过)。
我在这里看到了同样的问题 ,但我不明白这些命令,因为我从未使用过它们(我说的是set.seed和sample)。有人可以向我解释他们是如何工作的吗?还有另一种方法(更容易理解?我不介意它是否消耗更多资源)
我最近一直在尝试编写一个程序(基于文本的游戏),但我只知道一些命令并且不太了解每个命令。
我想做的是一个成功的机会。可以说我希望程序具有
我在这里看到了同样的问题 ,但我不明白这些命令,因为我从未使用过它们(我说的是set.seed和sample)。有人可以向我解释他们是如何工作的吗?还有另一种方法(更容易理解?我不介意它是否消耗更多资源)
program Project1;
{$ASSERTIONS ON}
function getProb(aProbability: Integer): boolean;
begin
result := aProbability > (100 - random(100));
end;
procedure miss;
begin
writeln('miss');
end;
procedure hit;
begin
writeln('hit');
end;
var
i, success, probability, errorMarge: Integer;
const
combat: array[boolean] of procedure = (@miss, @hit);
begin
// show that getProb() is reliable
errorMarge := 4;
success := 0;
probability := 80;
for i in [0..99] do
Inc(success, Byte(getProb(probability)));
assert(success >= probability - errorMarge);
success := 0;
probability := 50;
for i in [0..99] do
Inc(success, Byte(getProb(probability)));
assert(success >= probability - errorMarge);
// example usage
combat[getProb(20)];
combat[getProb(80)];
combat[getProb(90)];
readln;
end.
不知道你知道什么“命令”,这很难在没有概括的情况下回答。
如果您只需要在两个值之间进行选择,则在您知道的任何范围内生成一个随机值,并根据您的概率计算分界线。因此,对于您的示例,如果您可以生成介于 0 和 1 之间的值,如果它 <= 0.9,请点击。
这可以通过添加连续的概率扩展到多个值。因此,如果您有 4 个值可供选择,每个值都有 25% 的概率,则在 0 和 1 之间获得随机值:如果小于 0.25,则选择 0,否则如果小于 0.5,则选择 1,否则如果小于 0.75,则选择 2选择 3。