Существуют некоторые причуды для знания здесь.
HTMLIFrameElement.contentWindow
, вероятно, более легкий путь, но это - не совсем стандартное свойство, и некоторые браузеры не поддерживают его, главным образом более старые. Это вызвано тем, что стандарт HTML Уровня 1 DOM не имеет ничего для высказывания об эти window
объект.
можно также попробовать HTMLIFrameElement.contentDocument.defaultView
, который позволяют несколько более старых браузеров, но IE не делает. Несмотря на это, в стандарте явно не говорится, что Вы возвращаетесь эти window
объект по той же причине как (1), но можно взять несколько дополнительных версий браузера здесь, если Вы заботитесь.
window.frames['name']
возврат окна является самым старым и следовательно самый надежный интерфейс. Но тогда необходимо использовать name="..."
атрибут, чтобы быть в состоянии получить кадр по имени, который является немного ужасен / <забастовка>, удержанная от использования забастовка> / переходный. (id="..."
было бы лучше, но IE не нравится это.)
window.frames[number]
также очень надежно, но знание правильного индекса является приемом. Можно сойти с рук это, например, если Вы знаете, что у Вас только есть один iframe на странице.
совершенно возможно, что дочерний iframe еще не загрузился, или что-то еще пошло не так, как надо для создания его недоступным. Можно найти легче инвертировать поток связи: то есть, имейте дочерний iframe, уведомляют window.parent
сценарий, когда это закончилось загруженный и готово быть призванным обратно. Путем передачи одного из его собственных объектов (например, функция обратного вызова) к родительскому сценарию, тот родитель может тогда связаться непосредственно со сценарием в iframe, не имея необходимость волноваться о том, с чем HTMLIFrameElement это связано.
Use Fisher-Yates shuffle.
Your C# code should look something like this:
static public class FisherYates
{
static Random r = new Random();
// Based on Java code from wikipedia:
// http://en.wikipedia.org/wiki/Fisher-Yates_shuffle
static public void Shuffle(int[] deck)
{
for (int n = deck.Length - 1; n > 0; --n)
{
int k = r.Next(n+1);
int temp = deck[n];
deck[n] = deck[k];
deck[k] = temp;
}
}
}
Shuffling a deck of cards is something that seems trivial at first, but usually the algorithm that most people come up with is incorrect.
Jeff Atwood (Coding Horror) wrote a few very good articles on the subject:
http://www.codinghorror.com/blog/archives/001008.html
http://www.codinghorror.com/blog/archives/001015.html
(especially the second one is a must-read)
Я думаю, что это тот случай, когда вы, возможно, слишком увлеклись абстракцией.
Перетасовка колоды карт в программном обеспечении - это вопрос обеспечения колода пользователю в случайном порядке. На самом деле это не требует от вас тасовать их заранее.
Запустите вашу колоду. (Обычно я использую число от 1 до 52 для представления карты и математически вычисляю, какая карта.)
Правка : И вообще, если у вас есть хороший генератор случайных чисел, ничего не получится от "перемешивания" его несколько раз.
Это должно быть так. возможно с использованием показанных вами структур данных. Вам просто нужно добавить метод «Draw» и переменную-член, чтобы отслеживать конец колоды. Если вы без ума от того, чтобы на самом деле выполнить «тасование» заранее, то A ваш профессор придурок, B каждый раз, когда вы берете 52 карты, колода будет перетасована. После того, как вы вытащили все карты, вам необходимо предоставить метод «DeckEmpty» и метод для сброса конца колоды, чтобы снова включить все карты.
это должно быть несколько раз.Это должно быть возможно, используя структуры данных, которые вы показали. Вам просто нужно добавить метод «Draw» и переменную-член, чтобы отслеживать конец колоды. Если вы без ума от того, чтобы на самом деле выполнить «тасование» заранее, то A ваш профессор придурок, B каждый раз, когда вы берете 52 карты, колода будет перетасована. После того, как вы вытащили все карты, вам необходимо предоставить метод «DeckEmpty» и метод для сброса конца колоды, чтобы снова включить все карты.
это должно быть несколько раз.Это должно быть возможно, используя структуры данных, которые вы показали. Вам просто нужно добавить метод «Draw» и переменную-член, чтобы отслеживать конец колоды. Если вы без ума от того, чтобы на самом деле выполнить «тасование» заранее, то A ваш профессор придурок, B каждый раз, когда вы берете 52 карты, колода будет перетасована. После того, как вы вытащили все карты, вам необходимо предоставить метод «DeckEmpty» и метод сброса конца колоды, чтобы снова включить все карты.
B каждый раз, когда вы берете 52 карты, колода перетасовывается. После того, как вы вытащили все карты, вам необходимо предоставить метод «DeckEmpty» и метод сброса конца колоды, чтобы снова включить все карты. B каждый раз, когда вы берете 52 карты, колода перетасовывается. После того, как вы вытащили все карты, вам необходимо предоставить метод «DeckEmpty» и метод сброса конца колоды, чтобы снова включить все карты.Перемешивание должно работать следующим образом:
Вы берете две случайные карты из колоды (индекс карты в колоде - это случайные числа) И поменяйте местами две карты. Например, возьмите карту с индексом 2 и карту с индексом 9 и попросите их поменять местами.
И это можно повторить определенное количество раз.
Алгоритм должен выглядеть примерно так:
int firstNum = rnd.Next(52);
int secondNum = rnd.Next(52);
Card tempCard = MyCards[firstNum];
MyCards[firstNum] = MyCards[secondNum];
MyCards[secondNum] = tempCard;