2015-02-13 2 views
0

Итак, я играю с несколькими идеями WatchKit в быстром темпе и решил создать случайный генератор игровых карт. Прилагаемое изображение показывает мой код и вывод, который я получаю, когда я запускаю функцию «перетасовки». Обратите внимание на то, как на выходе, кажется, помещаются 2 значения, добавьте случайные числовые значения из, казалось бы, нигде, и он даже отобразил 12 вариантов пик, хотя в массиве значений нет записи для «12».Печать Случайные значения в swift

Я новичок в программировании, и я делаю это только для того, чтобы поиграть с несколькими идеями и получить захватывающие возможности. Так может ли кто-нибудь помочь мне понять, почему это происходит и как его предотвратить?

Большое спасибо заранее, ребята. Code for the shuffle method as well as output when the function is called

+4

Было бы очень полезно, если бы вы разместили свой код в текстовом формате, а не как скриншот - изображения могут помочь, но они не могут быть скопированы и вставлены в редактор :) – Antonio

+0

Eoin, когда вы говорите «это даже отобрал вариант с 12 пиками «... Я не вижу 12 в консоли на скриншоте. Не могли бы вы объяснить это немного больше? – kbpontius

+0

Да, конечно, он не показывал его в этом конкретном случае. Но он случайным образом генерирует 52 разных выхода каждый раз, поскольку это является целью метода. Он не показывал 12 пиков в этом примере запуска метода, но он делал это ранее. –

ответ

0

Возможно, вы захотите создать колоду, а затем перетасовать ее. Что-то вроде:

var deck = [String]() 
for value in values { 
    for suite in suites { 
     deck.append(value+suite) 
    } 
} 

var shuffledDeck = [String]() 
for i in 0..<52 { 
    let seed = UInt32(deck.count - 1) 
    let randomCardIndex = Int(arc4random_uniform(seed)) 
    shuffledDeck.append(deck.removeAtIndex(randomCardIndex)) 
} 
0

Опираясь на ответ @Jeremy Папы и один из моих old answers вот площадка, которая показывает, как перетасовать 52 случайных объектов.

import Foundation 

extension Array 
{ 
    func shuffled() -> Array 
    { 
     var result:Array = [] 

     result.append(self[0]) 

     for index in 0..<self.count 
     { 
      let j = Int(arc4random_uniform(UInt32(index))) 
      result.append(result[ j ]) 
      result[ j ] = self[ index ] 
     } 

     return result ; 
    } 
} 

let suits = ["♠️", "♥️", "♣️", "♦️"] 
let ranks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"] 
var stringArray = Array(0...51).map { number in 
    "\(suits[number/13])\(ranks[number % 13])" 
} 
stringArray = stringArray.shuffled() 

результат:

[♥ ️8, ♣ ️7, ♠ ️4, ♦ ️J, ♦ ️10, ♦ ️7, ♠ ️A, ♠ ️9, ♥ ️A, ♥ ️7, ♦ ️4, ♠ ️8, ♠ ️A, ♦ ️A, ♠ ️2, ♠ ️3, ♣ ️6, ♣ ️2, ♣ ️A, ♥ ️5, ♥ ️K, ♣ ️10, ♦ ️3, ♥ ️3, ♥ ️2, ♠ ️6, ♣ ️J, ♠ ️10, ♥ ️9, ♦ ️5, ♠ ️5, ♠ ️7, ♦ ️9, ♣ ️4, ♣ ️Q, ♣ ️8, ♠ ️K, ♦ ️6, ♥ ️J, ♣ ️5, ♠ ️J, ♣ ️9, ♦ ️8, ♥ ️4 , ♥ ️10, ♥ ️Q, ♦ ️2, ♦ ️Q, ♦ ️K, ♣ ️3, ♥ ️6, ♠ ️Q, ♣ ️K]

Смежные вопросы