2010-10-11 2 views
0

Это # программа C, предполагают, чтобы быть программой блэкджек, но мне нужно «SHUFFLE» карта и просто отобразить «HAND»C# Blackjack - Нужна помощь

Остальное я думаю, что я могу управлять ... может кто-то Помоги мне?

+2

Похоже, кто-то обманывает его/ее назначение программирования. Я уверен, что вы вырастут, чтобы стать миллионером в любом случае ... – danijels

+1

Если это домашнее задание, можем ли мы перенаправить его как таковое? – jcolebrand

+0

'public static int' запрашивает проблемы. Либо 'public static readonly int', либо' public const int'. По умолчанию константы являются статическими. –

ответ

0

Я думаю, что он уже был покрыт here.

+3

Вы должны были добавить этот комментарий, а не как ответ. – ChrisF

+0

@ChrisF: Я бы согласился, что это больше похоже на комментарий, но знаете ли вы какие-либо фактические рекомендации относительно того, что делает комментарий, а не ответ? Я попытался найти его на мета, но не смог найти ничего подходящего. – Patrick

+0

@Patrick - может быть, нам нужно, чтобы некоторые из них задавали вопросы (ссылка на меня убегает прямо сейчас) – ChrisF

1

Один из способов перетасовать является создание нового массива и перемещения карты в этом массиве в случайном порядке

List<Card> unshuffled = new List<Card>(pack); 
pack = new Card[NUM_CARDS]; 
Random r = new Random() 
for(int card = 0; card < NUM_CARDS; card++) 
{ 
    pack[card] = unshuffled[r.Next(0, unshuffled.Count -1)]; 
    unshuffled.remove(pack[card]); 
} 

Вы можете сделать экземпляр Random глобальным, как создание нового случайного каждый раз уменьшает энтропию в некотором роде. Это может быть неважно, если вы не перетасовываете много.

+0

Большое спасибо .. это поможет: D это работает – Sydney

1

Я бы рекомендовал просто переключение каждый элемент случайным образом другой, вот как:

private void switchElements(Card[] pack, int nr_1, int nr_2) { 
    Card temp = pack[nr_1]; 
    pack[nr_1] = pack[nr_2]; 
    pack[nr_2] = temp; 
} 

public void shuffle(Card[] pack) { 
    for (int i = pack.length - 1; i > 0; i--) 
     switchElements(pack, i,random.Next(0,i)); 
} 
+1

Ум, разве это не гарантирует, что какая-либо последняя карта в пакете [] перед вызовом shuffle не может быть последней карточкой в ​​пакете [] после тасования? –

+0

Это так же просто, как: выберите случайную карту и положите ее на палубу 2, пока вы не сделаете это для всех карт в колоде 1. Единственное отличие состоит в том, что нет колоды 2, собранные карты хранятся на верхней палубе 1 Это также работает Java ** Collections.shuffle() **. – Margus

1

Вы можете «перетасовать» пакет с чем-то же просто, как:

var shuffled = pack.OrderBy(c => random.NextDouble()); 
+0

Может ли это вызвать бесконечный цикл? Будет зависеть от того, какой тип типа LINQ использует здесь. – Bryan

+0

Нет, это не вызовет бесконечный цикл - это тоже не оптимальное решение, но, учитывая уровень домашней работы (хотя кажется, что исходный исходный код теперь удален), было бы просто реализовать, в отличие от Fisher-Yates –