歡迎回到我們的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中查看。其中會顯示所有和視圖控制器相關的關聯。

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

答疑說明:

1.為了方便大家對課程中的問題提問,創建了一個問答社區。大家後續有開發相關的問題請到課程答疑專區提問icode.fun/ask/forum.php

2.請大家在提問之前建議先看一下這個帖子:icode.fun/ask/forum.php?

聯繫方式:

公眾號:icodefun

個人微信: iseedo

QQ討論群:375143733

示例項目:

github.com/eseedo/iOSCo

最後送福利一張。

推薦閱讀:

相关文章