練習筆記50 : 猜拳遊戲 App

這個作業是參考Apple官方的剪刀石頭布(RPS)範例 製作猜拳遊戲App

並練習使用enum~

這次做的猜拳遊戲是 左一拳,右一拳,大家一起收一拳~~

先在File裡建立enum~

//剪刀石頭布
enum Sign:String{
case rock = "✊🏻"
case paper = "🖐🏻"
case scissor = "✌🏻"
}

//遊戲結果
enum GameState:String{
case leftHand = "左一拳"
case rightHand = "右一拳"
case oneHand = "大家一起收一拳"
case win = "你贏了"
case lose = "你輸了"
case draw = "平手"
}

建立畫面及宣告各個需要用到的東西~~

 //玩家剪刀石頭布判斷
var sign : Sign!
//玩家出左右拳判斷
var count = 0
//建立遊戲狀態的array
let gameState = [GameState.leftHand,GameState.rightHand,GameState.oneHand]
//講話功能
let synthesizer = AVSpeechSynthesizer()


//顯示電腦出拳emoji的Label
@IBOutlet var computerSignLabel: [UILabel]!
//顯示玩家出拳emoji的Label
@IBOutlet var playerSignLabel: [UILabel] = []
//顯示目前遊戲狀態的Label
@IBOutlet weak var gameStateLabel: UILabel!
//出拳Button
@IBOutlet weak var rockButton: UIButton!
@IBOutlet weak var scissorButton: UIButton!
@IBOutlet weak var paperButton: UIButton!

開始做功能

    //電腦出拳
func play(){
let computerSign = randomSign()
//用count判斷這次電腦出拳是左手還右手
computerSignLabel[count-1].text = computerSign.rawValue

}

//唸出遊戲狀態
func speak(){

let speechUtterance = AVSpeechUtterance(string: gameStateLabel.text!)
speechUtterance.voice = AVSpeechSynthesisVoice(language: "zh-TW")
synthesizer.speak(speechUtterance)

}
//玩家出拳
@IBAction func chooseSign(_ sender: UIButton) {
//計算出拳次數 判斷遊戲階段
count += 1
if count < 3{
//判斷玩家出什麼拳
switch sender.tag{
case 0: sign = .rock
case 1: sign = .scissor
case 2: sign = .paper
default: break
}
//用count判斷這次玩家出拳是左手還右手
playerSignLabel[count-1].text = sign.rawValue
//判斷遊戲狀態要顯示的文字
gameStateLabel.text = gameState[count].rawValue
//唸出遊戲狀態
speak()

//玩家出拳後電腦也隨機出拳
play()

//設定button可否點選
if count == 2{
rockButton.isEnabled = false
scissorButton.isEnabled = false
paperButton.isEnabled = false
playerSignLabel[0].backgroundColor = .tintColor
playerSignLabel[1].backgroundColor = .tintColor

}
}
}

//大家一起收一拳
@IBAction func selectOneHand(_ sender: UIButton) {
//畫面設定
gameStateLabel.text = " "
gameStateLabel.backgroundColor = .systemCyan
playerSignLabel[0].backgroundColor = .systemGray5
playerSignLabel[1].backgroundColor = .systemGray5
//電腦隨機收拳及玩家收拳
let randomNumber = Int.random(in: 0...1)
playerSignLabel[sender.tag].text = " "
computerSignLabel[randomNumber].text = " "

//判斷輸贏
let player = playerSignLabel[1 - sender.tag].text
let computer = computerSignLabel[1-randomNumber].text

if player != computer{
switch player{
case Sign.rock.rawValue:
if computer == Sign.scissor.rawValue{
gameStateLabel.text = GameState.win.rawValue

}else{
gameStateLabel.text = GameState.lose.rawValue
}
case Sign.paper.rawValue:
if computer == Sign.rock.rawValue{
gameStateLabel.text = GameState.win.rawValue
}else{
gameStateLabel.text = GameState.lose.rawValue
}
case Sign.scissor.rawValue:
if computer == Sign.paper.rawValue{
gameStateLabel.text = GameState.win.rawValue
}else{
gameStateLabel.text = GameState.lose.rawValue
}
default:break
}

}
else{
gameStateLabel.text = GameState.draw.rawValue
}
}

//reset
func reset(){
count = 0
gameStateLabel.text = gameState[0].rawValue
gameStateLabel.backgroundColor = .clear
speak()
playerSignLabel[0].text = " "
playerSignLabel[1].text = " "
computerSignLabel[0].text = " "
computerSignLabel[1].text = " "
rockButton.isEnabled = true
scissorButton.isEnabled = true
paperButton.isEnabled = true
playerSignLabel[0].backgroundColor = .systemGray5
playerSignLabel[1].backgroundColor = .systemGray5

}

做好的樣子~

完成~~

--

--