如何在Swift中生成1到75之间的随机数,每10秒重复一次

如何在Swift中生成1到75之间的随机数,每10秒重复一次,swift,Swift,我在Swift中有以下代码,试图获得一个简单的随机数生成器作为游戏模拟器 var randomNumber = 0 override func viewDidLoad() { super.viewDidLoad() randomNumber = Int(arc4random_uniform(74) + 1) label.text = "\(randomNumber)" } 我不熟悉Swift编程,但我知道使用timer()和import Foundation来使

我在Swift中有以下代码,试图获得一个简单的随机数生成器作为游戏模拟器

var randomNumber = 0

override func viewDidLoad() {
    super.viewDidLoad()

    randomNumber = Int(arc4random_uniform(74) + 1)

    label.text = "\(randomNumber)"

}

我不熟悉Swift编程,但我知道使用
timer()
import Foundation
来使用计时器功能,但我不知道如何实现并确保它,因此标签上每隔10秒会出现一个新的数字。感谢您的帮助。

使用间隔为
10秒的
计时器
数字数组中提取新数字。从阵列中删除该号码,这样您就不会两次呼叫同一号码。当按下
停止
按钮,或您的电话号码不足时,请在
计时器上调用
无效
以停止该按钮

class BingoCaller: UIViewController {
    @IBOutlet weak var label: UILabel!

    var numbers = Array(1...75)
    let letters = ["B", "I", "N", "G", "O"]
    var timer: Timer?

    override func viewDidLoad() {
        timer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { timer in
            let index = Int(arc4random_uniform(UInt32(self.numbers.count)))
            let number = self.numbers.remove(at: index)
            self.label.text = "\(self.letters[(number - 1) / 15])-\(number)"
            if self.numbers.isEmpty {
                timer.invalidate()
            }
        }
    }

    @IBAction func stop(_ button: UIButton) {
        timer?.invalidate()
    }
}
对下一步的建议:

  • 将已拉入的数字添加到第二个数组中。使用该数组填充tableView,这样Gran就可以在有人呼叫“Bingo!”时查看数字
  • 使用
    AVSpeechSynthesizer
    让iPhone实际说出数字
  • 添加重置按钮以开始新游戏。将
    编号
    初始化为
    数组(1…75)
    ,将
    调用的编号
    初始化为
    []
    ,然后重新启动。最好将
    计时器
    循环移动到它自己的函数,这样就可以从
    开始
    按钮调用它

  • 使用间隔为
    10
    秒的
    计时器
    数字数组中提取新数字。从阵列中删除该号码,这样您就不会两次呼叫同一号码。当按下
    停止
    按钮,或您的电话号码不足时,请在
    计时器上调用
    无效
    以停止该按钮

    class BingoCaller: UIViewController {
        @IBOutlet weak var label: UILabel!
    
        var numbers = Array(1...75)
        let letters = ["B", "I", "N", "G", "O"]
        var timer: Timer?
    
        override func viewDidLoad() {
            timer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { timer in
                let index = Int(arc4random_uniform(UInt32(self.numbers.count)))
                let number = self.numbers.remove(at: index)
                self.label.text = "\(self.letters[(number - 1) / 15])-\(number)"
                if self.numbers.isEmpty {
                    timer.invalidate()
                }
            }
        }
    
        @IBAction func stop(_ button: UIButton) {
            timer?.invalidate()
        }
    }
    
    对下一步的建议:

  • 将已拉入的数字添加到第二个数组中。使用该数组填充tableView,这样Gran就可以在有人呼叫“Bingo!”时查看数字
  • 使用
    AVSpeechSynthesizer
    让iPhone实际说出数字
  • 添加重置按钮以开始新游戏。将
    编号
    初始化为
    数组(1…75)
    ,将
    调用的编号
    初始化为
    []
    ,然后重新启动。最好将
    计时器
    循环移动到它自己的函数,这样就可以从
    开始
    按钮调用它

  • 您可以定义一个帮助器数组,该数组允许您检查该数字是否已返回:

    var array = [Int]()
    var timer: Timer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(ViewController.timerFunction), userInfo: nil, repeats: true)
    }
    
    func timerFunction(){
        var n = arc4random_uniform(75) + 1
        while array.contains(Int(n)){
            n = arc4random_uniform(75) + 1
        }
        array.append(Int(n))
        label.text = String(n)
        if array.count == 75{
            timer?.invalidate()
        }
    }
    

    通过这种方式,您可以确保计时器在所有数字都已使用时无效,并避免索引删除错误。

    您可以定义一个帮助器数组,该数组将允许您检查该数字是否已返回:

    var array = [Int]()
    var timer: Timer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(ViewController.timerFunction), userInfo: nil, repeats: true)
    }
    
    func timerFunction(){
        var n = arc4random_uniform(75) + 1
        while array.contains(Int(n)){
            n = arc4random_uniform(75) + 1
        }
        array.append(Int(n))
        label.text = String(n)
        if array.count == 75{
            timer?.invalidate()
        }
    }
    

    这样,当所有数字都已使用时,您可以确保计时器无效,并避免索引删除错误。

    只需在计时器回调中获取数字即可。但是你不想重复,所以你不能简单地每次生成一个介于1和75之间的随机数。只需在计时器回调中获取该数字。但是你不想重复,所以你不能简单地每次生成一个1到75之间的随机数。
    字母的意义是什么?用实际字母玩宾果游戏?在宾果游戏中,数字用字母“B-7”、“O-73”、“I-16”来调用,以便在卡上更容易找到数字。
    字母的意义是什么?用实际字母玩宾果游戏?在宾果游戏中,用字母“B-7”、“O-73”、“I-16”来调用数字,这样在卡片上更容易找到数字。这是非常低效的。看看大多数纸牌游戏是如何实现的。都一样。用数字填充数组。洗牌数组。然后在计时器关闭时逐个访问每个元素。这是非常低效的。看看大多数纸牌游戏是如何实现的。都一样。用数字填充数组。洗牌数组。然后在计时器关闭时逐个访问每个元素。