欢迎回到我们的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

最后送福利一张。

推荐阅读:

相关文章