1

我最近一直在尝试编写一个程序(基于文本的游戏),但我只知道一些命令并且不太了解每个命令。

我想做的是一个成功的机会。可以说我希望程序具有

  • 90% 的机会选择数字 1(这意味着命中)和
  • 10% 选择数字 0(这意味着错过)。

我在这里看到了同样的问题 ,但我不明白这些命令,因为我从未使用过它们(我说的是set.seedsample)。有人可以向我解释他们是如何工作的吗?还有另一种方法(更容易理解?我不介意它是否消耗更多资源)

4

2 回答 2

1
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.
于 2014-11-25T11:42:06.513 回答
0

不知道你知道什么“命令”,这很难在没有概括的情况下回答。

如果您只需要在两个值之间进行选择,则在您知道的任何范围内生成一个随机值,并根据您的概率计算分界线。因此,对于您的示例,如果您可以生成介于 0 和 1 之间的值,如果它 <= 0.9,请点击。

这可以通过添加连续的概率扩展到多个值。因此,如果您有 4 个值可供选择,每个值都有 25% 的概率,则在 0 和 1 之间获得随机值:如果小于 0.25,则选择 0,否则如果小于 0.5,则选择 1,否则如果小于 0.75,则选择 2选择 3。

于 2014-11-24T20:31:56.413 回答