Light app — 修正版
Aug 23, 2017 · 17 min read
進階版寫了一個在一個畫面,隨機出現七種顏色(彩虹,顏色不能重覆),但是原本寫的有很大錯誤,程式碼如下:
這樣的寫法持續寫下去,要寫5000多個才能完全得到所有的可能。第二種寫法可以使用比較的方法,第一個格子跟第二個格子一樣的時候,在重新run一次顏色,第三個在跟第一個和第二個比較……..到七個在跟前六個比較……這樣就能得到結果。
@IBAction func pressButtin(_ sender: Any) {let number = Int(arc4random())if number % 7 == 0 {view1.backgroundColor = UIColor(red: 148/255, green: 0/255, blue: 211/255, alpha: 1)view2.backgroundColor = UIColor(red: 75/255, green: 0/255, blue:130/255, alpha: 1)view3.backgroundColor = UIColor(red: 0, green: 0, blue: 255/255, alpha: 1)view4.backgroundColor = UIColor(red: 0, green: 255, blue: 0, alpha: 1)view5.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view6.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view7.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)} else if number & 7 == 1 {view7.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view1.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view2.backgroundColor = UIColor(red: 0, green: 0, blue: 255, alpha: 1)view3.backgroundColor = UIColor(red: 0, green: 255, blue: 0, alpha: 1)view4.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view5.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view6.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)} else if number % 7 == 2 {view6.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view7.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view1.backgroundColor = UIColor(red: 0, green: 0, blue: 255/255, alpha: 1)view2.backgroundColor = UIColor(red: 0, green: 255/255, blue: 0, alpha: 1)view3.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view4.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view5.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)}else if number % 7 == 3 {view5.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view6.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view7.backgroundColor = UIColor(red: 0, green: 0, blue: 255, alpha: 1)view1.backgroundColor = UIColor(red: 0, green: 255/255, blue: 0, alpha: 1)view2.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view3.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view4.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)}else if number % 7 == 4{view4.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view5.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view6.backgroundColor = UIColor(red: 0, green: 0, blue: 255/255, alpha: 1)view7.backgroundColor = UIColor(red: 0, green: 255/255, blue: 0, alpha: 1)view1.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view2.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view3.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)}else if number % 7 == 5{view3.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view4.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view5.backgroundColor = UIColor(red: 0, green: 0, blue: 255/255, alpha: 1)view6.backgroundColor = UIColor(red: 0, green: 255/255, blue: 0, alpha: 1)view7.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view1.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view2.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)}else {view2.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view3.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view4.backgroundColor = UIColor(red: 0, green: 0, blue: 255/255, alpha: 1)view5.backgroundColor = UIColor(red: 0, green: 255/255, blue: 0, alpha: 1)view6.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view7.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view1.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)}}var initValue = Int(arc4random())func initColor(){if initValue % 7 == 0 {view1.backgroundColor = UIColor(red: 148/255, green: 0/255, blue: 211/255, alpha: 1)view2.backgroundColor = UIColor(red: 75/255, green: 0/255, blue:130/255, alpha: 1)view3.backgroundColor = UIColor(red: 0, green: 0, blue: 255/255, alpha: 1)view4.backgroundColor = UIColor(red: 0, green: 255, blue: 0, alpha: 1)view5.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view6.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view7.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)} else if initValue & 7 == 1 {view7.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view1.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view2.backgroundColor = UIColor(red: 0, green: 0, blue: 255, alpha: 1)view3.backgroundColor = UIColor(red: 0, green: 255, blue: 0, alpha: 1)view4.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view5.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view6.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)} else if initValue % 7 == 2 {view6.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view7.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view1.backgroundColor = UIColor(red: 0, green: 0, blue: 255/255, alpha: 1)view2.backgroundColor = UIColor(red: 0, green: 255/255, blue: 0, alpha: 1)view3.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view4.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view5.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)}else if initValue % 7 == 3 {view5.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view6.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view7.backgroundColor = UIColor(red: 0, green: 0, blue: 255, alpha: 1)view1.backgroundColor = UIColor(red: 0, green: 255/255, blue: 0, alpha: 1)view2.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view3.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view4.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)}else if initValue % 7 == 4{view4.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view5.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view6.backgroundColor = UIColor(red: 0, green: 0, blue: 255/255, alpha: 1)view7.backgroundColor = UIColor(red: 0, green: 255/255, blue: 0, alpha: 1)view1.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view2.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view3.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)}else if initValue % 7 == 5{view3.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view4.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view5.backgroundColor = UIColor(red: 0, green: 0, blue: 255/255, alpha: 1)view6.backgroundColor = UIColor(red: 0, green: 255/255, blue: 0, alpha: 1)view7.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view1.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view2.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)}else {view2.backgroundColor = UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1)view3.backgroundColor = UIColor(red: 75/255, green: 0, blue: 130/255, alpha: 1)view4.backgroundColor = UIColor(red: 0, green: 0, blue: 255/255, alpha: 1)view5.backgroundColor = UIColor(red: 0, green: 255/255, blue: 0, alpha: 1)view6.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1)view7.backgroundColor = UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1)view1.backgroundColor = UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)}}}
本週上課有教GameplayKit framework的GKRandomDistribution和GKShuffledDistribution。可以解決這樣的狀況,程式碼如下:
程式碼簡單明暸可以表達,其時也試了好多遍才OK。
@IBAction func pressButton(_ sender: UIButton) {var colorSelection = [UIColor(red: 148/255, green: 0, blue: 211/255, alpha: 1), UIColor(red: 75/255, green: 0/255, blue:130/255, alpha: 1),UIColor(red: 0, green: 0, blue: 255/255, alpha: 1),UIColor(red: 0, green: 255/255, blue: 0,alpha:1),UIColor(red: 255/255, green: 255/255, blue: 0, alpha: 1),UIColor(red: 255/255, green: 127/255, blue: 0, alpha: 1),UIColor(red: 255/255, green: 0, blue: 0, alpha: 1)]let colorAmount = GKShuffledDistribution(lowestValue: 0, highestValue: 6)view1.backgroundColor=colorSelection[colorAmount.nextInt()]view2.backgroundColor = colorSelection[colorAmount.nextInt()]view3.backgroundColor = colorSelection[colorAmount.nextInt()]view4.backgroundColor = colorSelection[colorAmount.nextInt()]view5.backgroundColor = colorSelection[colorAmount.nextInt()]view6.backgroundColor = colorSelection[colorAmount.nextInt()]view7.backgroundColor = colorSelection[colorAmount.nextInt()]}

