#67 骰子遊戲-Pass the Pigs-Dice Game Pig-1

使用 Swift 設計的有趣的小遊戲,從簡單到複雜,慢慢實作~

題目介紹:

操作影片:

操作截圖

遊戲規則

  • 跟朋友一起用同一隻手機 PK。
  • 分數先超過 100 的獲勝(包含 100)。
  • 一次丟一顆骰子。
  • 玩家丟完骰子後可選擇 roll 再丟一次,因此玩家在一回合裡可點選多次 roll 丟多次骰子。
  • 玩家不想再丟骰子時須選擇 hold 結束回合。
  • 玩家在回合裡丟的骰子點數總合將成為他的分數。例如這回合丟了三次的點數依序是 6、5、3,因此這回合的分數將加 14 分。
  • 當玩家丟到 1 時,他將結束這回合,而且此回合丟出的骰子點數悲慘地全部不算分。
  • 顯示贏家的名字和雙方的分數,點選 Replay 可再玩一次。
  • 顯示累積的成績,比方左邊的玩家 3 勝 2 敗,右邊的玩家 2 勝 3 敗 。

那就來實作吧

從簡單到複雜~模式大概可以分成

  • 人 vs 人
  • 人 vs 電腦-交給電腦自己玩,要規劃設計停止(Hold)的策略
  • 電腦 vs 電腦

先從最簡單的開始,人 vs 人,就是可以二個人手動玩的情況。

UI 設計

介面的話,就先模仿 http://cs.gettysburg.edu/projects/pig/piggame.html

玩家資訊面版

  • 輪到你的指示號 ImageView
  • 玩家名字 Label
  • 進度條 View (已取得的分數,)
  • 目前總分 Label
  • 玩家的總勝利場次 Label

我們有二個玩家,所以做好第一個後,copy 就有第二個玩家資訊面版了。

回合訊息面版

  • 目前回合數的 Label,顯示二個訊息,第幾場 — 第幾回合
  • 插圖

回合操作面版

  • 骰子圖片 ImageView
  • 兩個按鈕,分別是 ”Roll” 和 ”Hold”,在按鈕背後加背景圖強化一下按鍵的樣子。
  • 這回合累積的分數 Label

整體的樣貌

插圖跟Icon

這次的美術,是請 Bing 叫 DALL.E.3 幫忙畫一下圖

選一個小圖切出來當 Icon,轉成 1024x1024尺寸。

跑起來的效果看起來還不錯。

就先這樣啦,先標記為 v1 Tag,有空來美化一下UI,還有處理一下人 vs 電腦的部份。

參考

wiki : Pig (dice game)

Pig 是一種簡單的骰子遊戲,由 John Scarne 於 1945 年首次在印刷品中描述。[1] 玩家輪流擲骰子,次數不限,將所有擲骰結果加到總分中,但如果擲出 1,則失去該回合獲得的分數。

影片: How To Play Pig (Dice Game)

數學: The Math of Being a Greedy Pig — Numberphile

--

--