#1 蹭個奧運的熱度(桌球計分板)

東京奧運打得正火熱,專題也陷入了水深火熱,不過該做的練習還是不能少,趁此機會藉由Switf來做個簡易的桌球計分板

功能需求

每局 11 分制,輸流發球,發球時每 2 球輪替一次,目前的發球方下方顯示 Serve並更換背景

點選數字會增加分數,上方的小數字代表雙方獲勝的局數,下方的大數字代表目前局數的比分。

其中一方達到 11 分時獲勝,上方獲勝的局數更新。

基本的功能,點擊兩邊的大數字可分別增加分數,發球方的部分是利用雙方分數合計為偶數的時候進行換邊,並同時更換背景顏色,不過這樣有沒有符合規則就不確定了。

點選set name可輸入雙方的名字。

點選 Change Side 將讓左右的分數互換。

點選 Reset 會將比數清空,大數字和小數字都清成 0。

設定名字的部分偷懶利用UIAlertController內塞入兩個對話框的方式來製作,就不要再另外作畫面了。

10 比 10 平手後(deuce),發球改成每 1 球輪替一次,先多得 2 分的獲勝。

利用一個變數來記錄是否進入deuce模式,藉此來控制不同的流程。

點選 Rewind 會回到上一步。

這部分是比較有難度的,這邊建立了一個Player物件來記錄所需的資料,分數、勝場、發球權之類的。

class Player {
var name = ""
var win = 0
var score = 0
var serve = false
var color = UIColor.black
}

再另外建立一個Step物件,並利用Array來記錄每一個步驟,如此一來上一步的動作就只是把Array的最後一筆資料刪掉即可

class Step {
var playerL: Player?
var playerR: Player?
var isDeuce = false
}

最後再把畫面顯示跟資料分離,每一次畫面都是從Array中取最後一筆資料來顯示。

--

--