2015-12-19 50 views
0

我在創建一個應用程序中有一種方法,可以用來玩戰爭,紙牌遊戲,這是一個故障。它應該隨機用arc4random_uniform生成一個數字,然後使用該數字來確定玩家擁有的牌,牌和等級。在此之後,套裝和等級用於顯示卡片圖像。除了它只顯示從8到Ace的牌之外,這種方法是有效的。我認爲這與我的randCard類型轉換有關,因爲我無法從邏輯上找到任何其他錯誤。Swift中的類型轉換arc4random_uniform()

@IBAction func showPlayerCard(sender: AnyObject) { 
     var randCard = arc4random_uniform(52)+1 
     var suit = "" 
     var rank = "" 
     var value = 0 

     if(randCard <= 13){ 
      suit = " of Clubs" 
     }else if(randCard <= 26){ 
      suit = " of Diamonds" 
      value = (Int)(randCard)/2 
     }else if(randCard <= 39){ 
      suit = " of Hearts" 
      value = (Int)(randCard)/3 
     }else if(randCard <= 52){ 
      suit = " of Spades" 
      value = (Int)(randCard)/4 
     } 

     switch value { 

     case 1: 
      rank = "2" 
      value = 2 

     case 2: 
      rank = "3" 
      value = 3 

     case 3: 
      rank = "4" 
      value = 4 

     case 4: 
      rank = "5" 
      value = 5 

     case 5: 
      rank = "6" 
      value = 6 

     case 6: 
      rank = "7" 
      value = 7 

     case 7: 
      rank = "8" 
      value = 8 

     case 8: 
      rank = "9" 
      value = 9 

     case 9: 
      rank = "10" 
      value = 10 

     case 10: 
      rank = "Jack" 
      value = 11 

     case 11: 
      rank = "Queen" 
      value = 12 

     case 12: 
      rank = "King" 
      value = 13 

     case 13: 
      rank = "Ace" 
      value = 14 

     default: 
      rank = "" 
      value = 0 
     } 

     var cardName = rank + suit 

     if(rank == ""){ 
      cardName = "Ace" + suit 
     } 

     self.firstCardImageView.image = UIImage(named: cardName) 

如果有人有如何解決這個問題的建議,將不勝感激。

哦,我忘了添加,我放在底部的if(rank ==「」),因爲有時隨機生成的卡片會是空白的;我相信是由於違約案件被觸發的結果。

回答

3

該問題與類型轉換無關。 您的邏輯計算value從範圍1 ... 52 的隨機數是錯誤的。而不是除以1,2,3或4,你將不得不減去 一個偏移量。 (試想什麼 value = (Int)(randCard)/4可能的結果是,如果randCard範圍爲40 ... 52)

一個更簡單的方法是使用「餘運算符」 %

let randCard = Int(arc4random_uniform(52)) // 0, 1, ..., 51 
let suit = randCard/13 + 1 // 1, 2, 3, 4 
let value = randCard % 13 + 1 // 1, 2, ..., 13 

或只是

let suit = Int(arc4random_uniform(4)) + 1 // 1, 2, 3, 4 
let value = Int(arc4random_uniform(13)) + 1 // 1, 2, ..., 13 
+0

謝謝。這是一個愚蠢的錯誤。 – Ulthran