Имитация 6-ти гранного кубика в Аде-2005 - PullRequest
2 голосов
/ 09 марта 2010

Я очень определенно сталкивался с «имитацией кубика с шестью лицами» (который выдает случайное целое число от 1 до 6, все результаты одинаково вероятны) в Java, Python, Ruby и Bash. Тем не менее, я еще не видел подобную программу в Аде. Кто-нибудь сталкивался с одним?

Ответы [ 4 ]

4 голосов
/ 09 марта 2010

См. Генерацию случайных чисел (LRM A.5.2 ) для пакетов, помогающих сделать это. Либо Ada.Numerics.Float_Random для генерации единообразного случайного числа (диапазон 0,0 .. 1,0), который вы затем можете масштабировать самостоятельно, либо создать экземпляр Ada.Numerics.Discrete_Random с подходящим (под) типом (работает для d4, d10, d12, и d20s тоже!).

3 голосов
/ 10 марта 2010

Вам может понравиться этот симулятор детской карточной игры о войне , в которой используется экземпляр Ada.Numerics.Discrete_Random.

subtype Card_Range is Positive range 1 .. 52;
package Any_Card is new Ada.Numerics.Discrete_Random(Card_Range);
G : Any_Card.Generator;
…
N : Card_Range := Any_Card.Random(G);
2 голосов
/ 09 марта 2010

В Ada 95 генератор случайных чисел был определен как часть стандартной библиотеки, что делает его обязательным компонентом каждой системы компиляции Ada 95.

Следовательно, да, вы можете легко смоделировать 6-ти гранный кубик в Аде.

0 голосов
/ 11 февраля 2019

RossetaCode.org обычно содержит такие типичные программы. Вы можете найти простую реализацию 6-гранных костей в игре Pig the dice .

Это соответствующие части этой программы для реализации игры в кости.

Вы определяете требуемый диапазон в виде:

type Dice_Score is range 1 .. 6;

создать экземпляр Ada.Numerics.Discrete_Random с вашим типом:

with Ada.Numerics.Discrete_Random;

package RND is new Ada.Numerics.Discrete_Random(Dice_Score);

Используйте экземпляр, чтобы получить случайное значение в диапазоне:

Gen: RND.Generator; 

P.Recent_Roll := RND.Random(Gen);
...