欢迎回到我们的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中查看。其中会显示所有和视图控制器相关的关联。
好了,今天的学习暂时到此结束,下一篇我们将学习另一个非常重要的概念。同时将现在的单一界面应用扩展为多界面应用。让我们共同期待吧。
最后送福利一张。