
歡迎回到我們的iPhone開發教程系列,讓我們繼續前進吧。
重新來過
別害怕,哥不是讓你拋棄之前所有的源代碼,從零開始重新構建這個項目!
這里說的是游戲界面里面的“Start over”按鈕。
在我們的to-do清單里面曾經提到過,這個按鈕負責重置玩家的得分,同時讓游戲回合數重置為首回合。
如果你要和其他人一起來玩這款游戲,這個按鈕就會非常有用。比如你先來玩10個回合,記錄下總的得分,然后用“重新來過”按鈕重置游戲得分。接著你的朋友再來玩10個回合,并記錄下總的得分。最后比較下你們兩的得分就知道誰更厲害。
小練習:
現在可以自己嘗試著實現一下“重新來過”這個按鈕的功能。在之前的學習中,我們已經知道如何讓視圖控制器對按鈕的觸碰做出響應,當然現在你肯定也直到如何來更改score和round變量的數值了。
怎么樣?是否順利完成呢?如果沒有,那么就老老實實繼續看看下面的指導吧。
首先要在ViewController.swift中添加一個新的方法。至于具體的位置,我建議你放在startNewRound()這個方法的代碼下面。
func startNewGame(){
score = 0
round = 0
startNewRound()
}
這個方法的作用很簡單,就是重置玩家得分和游戲回合數,并開啟一個新的回合。
注意到這里的游戲回合數重置為0,而不是1,這是因為在startNewRound()方法里面會對round的數值加1.
如果我們將round設置為1,那么startNewRound()方法又會添加1個1,那么第一個回合時顯示的標簽數值就是2。
可能我這里有點啰嗦了,實際上你可以自己修改下代碼就知道了。(這就是為什么我們不用日常生活的語言來寫代碼,雖然符合人類的表達習慣,但不如編程語言簡潔,邏輯性也不夠嚴密)。
除此之外,我們還需要在ViewController.swift中添加一個動作方法來處理對“重新來過”按鈕的觸碰事件。
@IBAction func startOver(){startNewGame()
}
方法的位置不是很重要,不過一般是放在其它動作方法附近。
當玩家觸碰“重新來過”的按鈕后,startOver()動作方法會調用startNewGame()方法重新啟動新的游戲。同時,我們需要調用updateLabels()方法來更新相關的score,round和target標簽的數值。
當然,為了讓一切合乎邏輯,我們需要將viewDidLoad()方法中對startNewRound()方法的調用更改為startNewGame()。因為在應用啟動時score和round已經是0,所以這樣做其實不會對應用的實際運行產生任何影響,只是為了讓源代碼更加清晰易讀。
你看,只要你在寫代碼的時候給方法或者變量的定義比較符合語言習慣,即便是一個完全不懂編碼的人也大致能看懂。不過有些程序猿喜歡偷懶,讓你完全看不懂是什么意思。但很有些人喜歡這么干,還叫囂看不懂是你自己太嫩太菜鳥,圖洋圖森破,其實就是裝B,顯得自己逼格高。
更改viewDidLoad()方法的代碼如下:
override func viewDidLoad() {
super.viewDidLoad()
startNewGame()}
最后,我們還需要將“重新來過”按鈕和動作方法關聯在一起。
在Xcode中切換到storyboard界面,按住Ctrl鍵從“重新來過”按鈕拖出一條線到View Controller。松開鼠標,然后從彈出菜單中選擇startOver就好了。
這樣我們就把按鈕的Touch Up Inside 事件和動作方法關聯在一起了。
好了,現在可以點擊Run運行下游戲看看效果。
當你觸碰“重新來過”按鈕時,游戲就會重新開始。
提示:
如果你忘了storyboard界面文件中的控件具體和哪個動作方法關聯在一起,可以選中storyboard中的View Controller,然后在Xcode右側面板的Connections Inspector中查看。其中會顯示所有和視圖控制器相關的關聯。

好了,今天的學習暫時到此結束,下一篇我們將學習另一個非常重要的概念。同時將現在的單一界面應用擴展為多界面應用。讓我們共同期待吧。
最后送福利一張。
