梭哈人生第一章

最近太多事情忙,本來想寫梭哈App的計劃一直延宕,如果要等到全部寫完再po到部落格,可能這幾週都不會有產出,所以決定將寫這個App的過程分成幾個章節,寫到什麼進度就先po個文章。

這週的進度主要是構思兩個功能:

  1. 發牌
  2. 如何讓兩個玩家可以在同一台手機玩這個遊戲。

第一點主要是亂數的應用,第二點比較特別。因為我希望這個App在兩個玩家之間能夠很smooth地輪流玩。何謂smooth?就是輪到某個玩家時,拿到手機看到的畫面是自己的牌在自己的面前,而且對方該蓋住的牌是蓋住的,不能打開來看,自己該蓋住的牌也是蓋住的,只有自己可以打開來看。

這裡要先請大家先看一下梭哈的遊戲規則:

在進行梭哈的遊戲過程中,每個玩家一定有一張牌是蓋著,這張牌就是第一張發的牌。只有屬於這張牌的玩家自己可以看這張牌的內容,其它玩家都不能看。直到五張牌都發完,而且遊戲結束前大家決定亮牌時,才可以把這張牌打開,這張牌就是俗話說的底牌。這週的進度我簡化成一開始都先發五張牌給兩個玩家,每個玩家可以看到自己所有的牌,但只能看到另一個玩家的四張明牌,底牌看不到,輪換玩家時也是維持這樣的畫面。只是輪換玩家時,必須先點擊自己的底牌,底牌才會被打開。這樣很合理,因為如果不先蓋起來,上一個玩家就會看到下一個玩家的底牌。

這週就是先把這兩大功能寫好,接下來再思考如何完成梭哈App其它的功能。這週完成的執行結果動畫如下:

App執行畫面截圖如下:

剛發好牌
玩家一按下輪到玩家二後的畫面
玩家二點擊底牌讓底牌掀開
玩家二按輪到玩家一後的畫面

這個App使用到最近學的技術有以下幾個:

  1. 亂數。
  2. 傳遞參數到下一個頁面。
  3. 使用append新增字串陣列
  4. 實作func viewWillAppear(_ animated: Bool)

比較重要的程式碼節錄如下:

var first=1

override func viewDidLoad() {

super.viewDidLoad()

// Do any additional setup after loading the view, typically from a nib.

cards.shuffle()

button_card.setBackgroundImage(UIImage(named: cards[0].image), for: .normal)

for i in 1…9 {

image_card[i-1].image = UIImage(named: cards[i].image)

}

image_card[0].image=UIImage(named: “back”)

}

override func viewWillAppear(_ animated: Bool) {

if first != 1 {

button_card.setBackgroundImage(UIImage(named: “back”), for: .normal)

}

}

@IBAction func open_card(_ sender: Any) {

button_card.setBackgroundImage(UIImage(named: cards[0].image), for: .normal)

}

@IBAction func button_changeplayer(_ sender: Any) {

first=0

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

// Get the new view controller using segue.destination.

// Pass the selected object to the new view controller.

let controller = segue.destination as! SwitchPlayerViewController

for i in 0…9 {

controller.cards.append(self.cards[i])

}

}

GitHub連結如下:

我自己評估接下來還有一堆功能要做,包括實現完整的梭哈遊戲過程,如下注、牌型比較、跟與不跟、籌碼計算……所以我想這個梭哈人生應該還有好幾集,下次見了。