0

I have a problem with my code, I'm trying to make a simple war game app, at start everything is OK but after 10-20 clicked buttons to randomize new cards I'm getting error:

fatal error: Index out of range

I know that name of variables are incorrect but I'm not from England so I type them very quickly and its English words with polish gramar :D, karty means cards)

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)
        }
    }

}

I have error in this line:

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

and I'm new in Swift, its my 3rd they so please be understanding :)

Eric Aya
  • 69,473
  • 35
  • 181
  • 253
Jacob233
  • 312
  • 2
  • 4
  • 14

1 Answers1

0

In almost all programming languages, random number generators return a number >= 0 and < (strictly smaller than) the argument.

So Int(arc4random_uniform(UInt32(12))) returns a number between 0 and 11 (inclusive).

Also, in almost all programming languages, elements of an array have indexes starting with 0 for the first element. Therefore, this will fix your code:

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

Once you have your code working, you can go to our sister site Code Review to ask for improvements.

Community
  • 1
  • 1
Glorfindel
  • 21,988
  • 13
  • 81
  • 109