我正试图快速制作一个simon记忆游戏,其中4个按钮依次闪烁,用户必须记住顺序和猜测。现在,我正在生成诸如[绿色,红色,绿色,蓝色,黄色]之类的随机序列,并且在生成这些序列时,我要使绿色按钮闪烁,然后依次为红色,绿色等等。我该怎么做呢?
@IBOutlet weak var green: UIButton!
@IBOutlet weak var red: UIButton!
@IBOutlet weak var yellow: UIButton!
@IBOutlet weak var blue: UIButton!
enum Block {
case green
case red
case yellow
case blue
}
//Block button action
@IBAction func greenButton() {
if playerTurn && (blocksPressed < signals.count ){
blocksPressed += 1
guesses.append(Block.green)
guess()
}
}
@IBAction func redButton() {
if playerTurn && (blocksPressed < signals.count) {
blocksPressed += 1
guesses.append(Block.red)
guess()
}
}
@IBAction func yellowButton() {
if playerTurn && (blocksPressed < signals.count) {
blocksPressed += 1
guesses.append(Block.yellow)
guess()
}
}
@IBAction func blueButton() {
if playerTurn && (blocksPressed < signals.count ){
blocksPressed += 1
guesses.append(Block.blue)
guess()
}
}
let randomSource = GKARC4RandomSource() //for random number generation
var signals:[Block] = []
func giveSignal() {
disableButton()
signals = []
for _ in 0...levelNum {
let randomSignal:Int = randomSource.nextInt(upperBound: 4)
switch randomSignal {
//Green
case 0:
signals.append(Block.green)
//Red
case 1:
signals.append(Block.red)
//Yellow
case 2:
signals.append(Block.yellow)
//Blue
case 3:
signals.append(Block.blue)
default:
break
}
}
let finalSeq:String = makeString()
statusBar.text = finalSeq
}
这里是伪代码。
有两个部分。
Firstly,动画。您应该使用KeyFrame动画。
这里是对应的apple doc
第二,Block枚举的信号,您应该使用它。
这里有点棘手,有点算法。
switch case
适合您。
let blink: (Block) -> Void = {(option) in
switch option {
case .green:
self.green.backgroundColor = UIColor.green
case .red:
self.red.backgroundColor = UIColor.red
case .yellow:
self.yellow.backgroundColor = UIColor.yellow
case .blue:
self.red.backgroundColor = UIColor.blue
}
}
let total: TimeInterval = 1.2
UIView.animateKeyframes(withDuration: total, delay: 0, options: .repeat, animations: {
let proportion: TimeInterval = 0.25
UIView.addKeyframe(withRelativeStartTime: total * proportion * 0, relativeDuration: total * proportion) {
blink(self.signals.removeFirst())
}
UIView.addKeyframe(withRelativeStartTime: total * proportion * 1, relativeDuration: total * proportion) {
blink(self.signals.removeFirst())
}
UIView.addKeyframe(withRelativeStartTime: total * proportion * 2, relativeDuration: total * proportion) {
blink(self.signals.removeFirst())
}
UIView.addKeyframe(withRelativeStartTime: total * proportion * 3, relativeDuration: total * proportion) {
blink(self.signals.removeFirst())
}
}) { (_) in }
您已经有一个array of randomly generated colors
,只需要通过它们loop
,并根据颜色在相应的颜色按钮上进行闪烁动画即可。
for signal in signals {
switch signal {
case .green:
blink(greenButton) //Blink your button based on the color.
default:
break
}
}