Swift|22 撲克牌比大小遊戲

使用元件

  • Image View
  • Label
  • Button
  • Stepper

遊戲玩法

  • 撲克牌A最小,K最大
  • 玩家原本有一千元,猜對增加一百元,猜錯減少一百元
  • 玩家可以決定壓注的金額
  • 金額在零或零以下遊戲結束
  • 按Replay重新開始遊戲

定義撲克牌型別

把花色(suit)和數字大小(rank)分不同的array

import Foundationstruct Card {var suit:Stringvar rank:String}let suits = ["♣️", "♦️", "♥️", "♠️"]let ranks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
把變數或常數放在最外面,全部地方都可以使用

拉IBOutlet & IBAction

import UIKitclass ViewController: UIViewController {@IBOutlet weak var computerCardLabel: UILabel!@IBOutlet weak var playerCardLabel: UILabel!@IBOutlet weak var resultLabel: UILabel!override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.}@IBAction func play(_ sender: Any) {}

寫一個撲克牌的Array,裡面沒有裝東西

52張牌的兩層Loop寫法(Nested Loop)

var cards = [Card]()
func creatCards(){for suit in suits {for rank in ranks {let card = Card(suit: suit, rank: rank)cards.append(card)}}}

在ViewDidLoad呼叫出撲克牌

override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.creatCards()}

Play按下去之後

先洗牌(shuffle)
第一張牌先發給電腦
第二張牌再發給玩家

cards.shuffle()let computerCard = cards[0]computerCardLabel.text = "\(computerCard.suit) \(computerCard.rank)"let playerCard = cards[1]playerCardLabel.text = "\(playerCard.suit) \(playerCard.rank)"

用 if else 來比大小

因為電腦會用字串來比大小
英文字母排列J<K<Q
所以我們要幫撲克牌打分數來比大小
設A為最小,J為11,Q為12,K為13

其他的數字用Int把字串轉數字
因為有可能是nil
所以使用optional

var compuerCardNumber = 0if computerCard.rank == "A"{compuerCardNumber = 1}else if computerCard.rank == "J"{compuerCardNumber = 11}else if computerCard.rank == "Q"{compuerCardNumber = 12}else if computerCard.rank == "K"{compuerCardNumber = 13}else{compuerCardNumber = Int(computerCard.rank)!}var playerCardNumber = 0if playerCard.rank == "A"{playerCardNumber = 1}else if playerCard.rank == "J"{playerCardNumber = 11}else if playerCard.rank == "Q"{playerCardNumber = 12}else if playerCard.rank == "K"{playerCardNumber = 13}else{playerCardNumber = Int(playerCard.rank)!}

比完數字,再比花色

if compuerCardNumber < playerCardNumber{resultLabel.text = "You Win"}else if compuerCardNumber > playerCardNumber{resultLabel.text = "You Lose"}else {var playerSuitNumber = 0if playerCard.suit == "♣️"{playerCardNumber = 1}else if playerCard.suit == "♦️"{playerCardNumber = 2}else if playerCard.suit == "♥️"{playerCardNumber = 3}else{playerCardNumber = 4}var computerSuitNumber = 0if computerCard.suit == "♣️"{compuerCardNumber = 1}else if computerCard.suit == "♦️"{compuerCardNumber = 2}else if computerCard.suit == "♥️"{compuerCardNumber = 3}else{compuerCardNumber = 4}

輸贏後在結果欄中顯示文字,以及改變本金金額

if computerSuitNumber < playerSuitNumber {resultLabel.text = "You Win!"playerMoneyLabel.text = "\(playerMoney + bet)"} else {resultLabel.text = "You Lose"playerMoneyLabel.text = "\(playerMoney - bet)"}

本金少於等於0,遊戲結束

playerMoney = Int(playerMoneyLabel.text!)!if playerMoney <= 0{resultLabel.text = “Game Over!”}

按Reset之後的顯示結果

@IBAction func reset(_ sender: Any) {playerMoney = 10000playerMoneyLabel.text = "\(playerMoney)"bet = 1000moneyLabel.text = "\(bet)"computerCardLabel.text = ""playerCardLabel.text = ""resultLabel.text = ""moneyStepper.value = 1}

GitHub

https://github.com/ting3242006/BigSmall

參考資料

--

--