1

私は最近、プログラム (テキストベースのゲーム) を書こうとしていますが、いくつかのコマンドしか知らず、すべてのコマンドをよく理解していません。

私がやろうとしているのはヒットチャンスです。プログラムに

  • 90% の確率で 1 番 (ヒットを意味する) を選択し、
  • 10% で番号 0 を選択します (つまり、ミスを意味します)。

同じ質問 Hereを見ました が、コマンドを使用したことがないため、コマンドを理解できません ( 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

あなたが知っている「コマンド」がわからないので、一般化せずに答えるのは難しいです。

2 つの値から選択する必要があるだけの場合は、方法を知っている任意の範囲でランダムな値を生成し、確率に基づいて分割線を計算します。したがって、あなたの例では、0 と 1 の間の値を生成できる場合、それが <= 0.9 の場合、ヒットします。

これは、連続する確率を追加することにより、複数の値に拡張できます。したがって、4 つの値から選択する場合、それぞれ 25% の確率で、0 と 1 の間のランダムな値を取得します。0.25 未満の場合は 0 を選択し、0.5 未満の場合は 1 を選択し、0.75 未満の場合は 1 を選択します。それ以外の場合は 2 を選択します。 3を選びます。

于 2014-11-24T20:31:56.413 に答える