swift if…else… 猜拳遊戲

上次看到跟同學 korn 寫的猜拳遊戲,覺得很有趣,所以也想要來自己試試看

但既然剪刀石頭布已經做過了,那在模仿的同時,應該要做出一點變化,所以我腦袋裡想出了小時候玩的「嘰咕帕」,原理基本是跟剪刀石頭布相同,只是變成雙手對戰雙手,左手出拳對應左手,右手對應右手,猜中對方出的拳則對方只能剩下一手出拳,玩到其中一方雙手都被猜到為止。

我的程式碼基本上的設定是玩家隨機出拳挑戰魔王,玩到魔王的雙手出拳都被猜中,擊敗魔王獲勝。

簡單說明規則後,我們先來看一下完成的成品

下面我們就來說明一下程式碼吧,首先先定義需要使用到的變數,

//針對需要變更的物件定義變數@IBOutlet weak var BossImageL: UIImageView!@IBOutlet weak var BossImageR: UIImageView!@IBOutlet weak var YourImageL: UIImageView!@IBOutlet weak var YourImageR: UIImageView!@IBOutlet weak var GameResult: UILabel!//定義魔王和玩家的圖片arraylet BossCompareImageL = ["剪刀-L-boss", "石頭-L-boss", "布-L-boss"]let BossCompareImageR = ["剪刀-R-boss", "石頭-R-boss", "布-R-boss"]let YourCompareImageL = ["剪刀-L", "石頭-L", "布-L"]let YourCompareImageR = ["剪刀-R", "石頭-R", "布-R"]

接著進行按鈕功能設定,其中需要讓魔王及玩家隨機出拳,這邊有一步要提醒的是有先判斷戰敗的那隻手,假如左手或右手其中一邊戰敗的話圖片會變灰,戰敗的那一邊(變灰)則不會再隨機出拳,

@IBAction func GameGO(_ sender: Any) {//從四個圖片array建立四個隨機圖片var RandomBossL = BossCompareImageL.randomElement()!var RandomBossR = BossCompareImageR.randomElement()!let RandomYoursL = YourCompareImageL.randomElement()!let RandomYoursR = YourCompareImageR.randomElement()!//定義兩個魔王圖片變數索引,先預設是空值var BossL = ""var BossR = ""//先進行灰色圖片判斷,當圖片是灰色的,則按下按鈕將不作變動if BossImageL.image == UIImage(named: "剪刀-L-灰") {RandomBossL = "剪刀-L-灰"}if BossImageL.image == UIImage(named: "石頭-L-灰") {RandomBossL = "石頭-L-灰"}if BossImageL.image == UIImage(named: "布-L-灰") {RandomBossL = "布-L-灰"}if BossImageR.image == UIImage(named: "剪刀-R-灰") {RandomBossR = "剪刀-R-灰"}if BossImageR.image == UIImage(named: "石頭-R-灰") {RandomBossR = "石頭-R-灰"}if BossImageR.image == UIImage(named: "布-R-灰") {RandomBossR = "布-R-灰"}//建隨機圖片套用到一開始定義的image變數,讓魔王和玩家隨機出拳BossImageL.image = UIImage(named: RandomBossL)BossImageR.image = UIImage(named: RandomBossR)YourImageL.image = UIImage(named: RandomYoursL)YourImageR.image = UIImage(named: RandomYoursR)

接下來開始讓魔王與王家隨機出拳,進行判斷,假如王家出拳猜中魔王的話,則魔王被猜中的那一邊會變成灰色圖片,下一輪出拳不能再參賽,

//開始進行判斷,當玩家出拳與魔王出拳相等時,則魔王圖片變成灰色if RandomYoursL == "剪刀-L" , RandomBossL == "剪刀-L-boss" {BossL = "剪刀-L-灰"BossImageL.image = UIImage(named: BossL)}if RandomYoursL == "石頭-L" , RandomBossL == "石頭-L-boss" {BossL = "石頭-L-灰"BossImageL.image = UIImage(named: BossL)}if RandomYoursL == "布-L" , RandomBossL == "布-L-boss" {BossL = "布-L-灰"BossImageL.image = UIImage(named: BossL)}if RandomYoursR == "剪刀-R" , RandomBossR == "剪刀-R-boss" {BossR = "剪刀-R-灰"BossImageR.image = UIImage(named: BossR)}if RandomYoursR == "石頭-R" , RandomBossR == "石頭-R-boss" {BossR = "石頭-L-灰"BossImageR.image = UIImage(named: BossR)}if RandomYoursR == "布-R" , RandomBossR == "布-R-boss" {BossR = "布-R-灰"BossImageR.image = UIImage(named: BossR)}

最後這邊重要,用兩個 if 判斷當魔王的左手和右手都變成灰色之後,則在勝負標籤顯示玩家獲勝,

/*這邊重要!!判斷當魔王左手圖片變索引文字包含“灰”這個字元,進行下一層判斷,當魔王右手圖片變索引文字也包含“灰”這個字元時,則在「勝/負」label顯示「贏了!🤩」*/if BossL.contains("灰") {print(BossL)}if BossR.contains("灰") {print(BossR)GameResult.text = "贏了!🤩"}

最後是設定 reset 按鈕功能,讓魔王和玩家出拳以及勝負標籤都回覆初始畫面,可以再進行下一輪遊戲。

//定義reset按鈕功能,將魔王和玩家圖片重新設定為開始畫面@IBAction func Reset(_ sender: Any) {BossImageL.image = UIImage(named: "boss")BossImageR.image = UIImage(named: "boss")YourImageL.image = UIImage(named: "QQ")YourImageR.image = UIImage(named: "QQ")GameResult.text = "勝/負?"}

這次的分享就到這邊,那一樣下次見囉!

--

--