Увеличить вероятность вытягивания игральной карты из колоды?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Увеличить вероятность вытягивания игральной карты из колоды?

Сообщение Anonymous »


Я пытаюсь выполнить следующие требования:
[*]
Карты должны вытягиваться в псевдослучайном порядке. Червы и Пиковый туз будут считаться особыми картами с повышенными шансами на выпадение. Вероятность вытягивания каждой карты червовой масти должна быть в 2 раза выше, чем обычной карты. Вероятность выпадения пикового туза должна быть в 3 раза выше, чем у обычной карты.
[*]
Вышеуказанные шансы на вытягивание относятся к вероятности того, что следующей вытянутой картой станет следующая карта. Ровно одна карта каждой масти и числового значения должна быть видна ровно один раз за время прохождения колоды.

Сначала я думал добавить в колоду больше карт особого типа, чтобы увеличить шансы. Если посмотреть на требования, колода будет состоять из более чем 52 карт и в каждом запуске будет отображаться более одной карты. Правильно ли я понимаю требования?

Интерпретируя это по-другому, я бы сместил специальные карты в начало списка, чтобы вероятность вытягивания СЛЕДУЮЩЕЙ карты была высокой. Но что делает одну карту в 3 раза более вероятной, а другую — в 2 раза?

Вот что у меня есть актуального на данный момент:
public void ShuffleDeck() { for (int i =eck.Count - 1; i > 0; i--) { int j = Random.Range(0, i + 1); SwapCards(i, j); } } Private void SwapCards (int i, int j) { Температура карты = колода; палуба = палуба[j]; колода [j] = температура; } открытая карта DrawCard() { если (палуба.Count > 0) { Вытянутая картаCard = колода[0]; колода.RemoveAt(0); нарисованные карты.Добавить (нарисованная карта); вернуть нарисованную карту; } вернуть ноль; } public void ApplyDrawingOdds(int chancesMultiplier, string SpecialSuit, string SpecialRank = "") { // ищем специальные карты в колоде List SpecialCards = Deck.FindAll(card => card.Suit == SpecialSuit && (specialRank == "" || card.Rank == SpecialRank)); // цикл по специальным картам foreach (карта SpecialCard в SpecialCards) { // извлекаем индекс в колоде int index =eck.IndexOf(specialCard); // рассчитываем целевой индекс для свопа на основе OddsMultiplier int targetIndex = System.Math.Max(0, index - OddsMultiplier + 1); // заменяем текущую специальную карту другими картами в колоде for (int k = 0; k
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»