2016-12-29 72 views
0

我的代码存在问题,我试图做一个简单的战争游戏应用程序,在开始时一切正常,但在10-20点击按钮随机化新卡片后我得到错误:UIImage错误:索引超出范围

fatal error: Index out of range

我知道的变量名是不正确的,但我来自英国没有,所以我很快键入它们和英语单词与波兰gramar:d,karty意味着卡)

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var LeftCardOutlet: UIImageView! 
    @IBOutlet weak var RightcardOutlet: UIImageView! 
    @IBOutlet weak var LeftScoreOutlet: UILabel! 
    @IBOutlet weak var RightscoreOutlet: UILabel! 

    var karty = ["card2","card3","card4","card5","card6","card7","card8","card9","card10","jack","queen","king"] 

    var scoreplayer:Int=0 
    var CPUscore:Int=0 
    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 

    } 
    @IBAction func DealClicked(_ sender: UIButton) { 
     var random1:Int = 0 
     var random2:Int = 0 
     random1 = Int(arc4random_uniform(UInt32(12))) 
     random2 = Int(arc4random_uniform(UInt32(12))) 
     var im1=UIImage(named:"\(karty[random1+1])") 
     var im2=UIImage(named: "\(karty[random2+1])") 
     LeftCardOutlet.image=im1 
     RightcardOutlet.image=im2 
     if random1>random2 { 
      scoreplayer+=1 
      LeftScoreOutlet.text=String(scoreplayer) 
     } 
     if random1<random2 { 
      CPUscore+=1 
      RightscoreOutlet.text=String(CPUscore) 
     } 
    } 

} 

我在这一行中有错误:

var im2=UIImage (named: "\ (karty[random2+1])") 

,我在斯威夫特是新的,它的我的第三,他们所以请理解:)

+1

*不要*加1到随机数,数组索引从*零开始* –

+0

即时通讯如此愚蠢.....我必须从“karty [random2 + 1”中删除“+1”:D –

+0

另请参见[从数组中挑选一个随机元素](http://stackoverflow.com/questions/24003191/pick-a-random-element-from-an-array)。 –

回答

0

在几乎所有的编程语言,随机数生成器返回一个数> = 0和<(严格小于)论据。

所以Int(arc4random_uniform(UInt32(12)))返回0到11(含)之间的数字。

另外,在几乎所有的编程语言中,数组的元素的索引都是从第一个元素的0开始。因此,这将解决您的代码:

var im1=UIImage(named:"\(karty[random1])") 
var im2=UIImage(named:"\(karty[random2])") 

一旦你有你的代码的工作,你可以去我们的姊妹网站Code Review,要求改进。

+0

感谢您的评论,但我自己解决:),我会检查该页面 –