极客战记地牢里的关卡主要是偏向锻炼用户的基本语法结构和计算机思维,让大家熟悉极客战记的操作与代码的使用。来到了森林,关卡将会变得更多更难,同样,到了森林,大家就正式开始接触编程的几大重要知识点:条件判断、运算符、函数、对象属性。

一、边地之牢

这一关涉及的编程知识为:函数和 参数,大家需要理解函数及其参数是什幺东西,究竟需要如何使用,即可顺利过关。

进入本关,刚开始如果你不太明白这一关需要英雄做什幺,那幺你可以直接点击运行按钮,来观察游戏过程,你需要找到两个要点:现有的代码是在让英雄干什幺?游戏是为什幺失败的,那幺我们应该怎幺做?

这是在默认代码下的运行情况,可以知道:默认代码的作用,就是让英雄循环往返于上方的两个点,上方的敌人一出现,就被英雄消灭了。但英雄没有前往下方,导致下方的敌人击杀了村民,游戏失败。因此我们可以照着现有的代码略作改动,增加一段攻击下方敌人的代码。因此,此时的通关思路为:理解现有代码,对现有代码略作改动,需要实现的功能是:巡逻保卫下方村民安全。

观察代码,在以往我们的代码都是仅有一个代码块,一个While True无限循环代码块包括了所有的运行代码块,而本关,除了While True代码块以外,还多了一块代码,它就是def函数代码块。

二、函数

函数是我们在上一关接触到的知识点,在Python里,我们使用关键字 def 来定义一个函数:关键字def是英文单词define的缩写,具有定义、明确的意思,我们创建一个函数,也叫定义一个函数。创建函数的格式如下:

def 函数名,即函数里的代码,也叫函数体。可以看到,我们创建函数的时候,使用了冒号,为函数创建了一个单独的代码块。如果不记得代码块的概念了,可以点击链接,回到地牢复习一下:极客战记[地牢]:迷失在书库-通关代码及讲解,调用函数的格式则是:函数名(),十分简单。

函数的作用:如果你有一段非常方便的代码,例如寻找敌人攻击敌人,那你要在每个可能有敌人的地方,都写一遍这一段代码,十分繁琐。

而函数,就是一个偷懒的工具,我们可以把它想象成一个机器人,我们在机器人的程序里(函数体内)写好代码,当我们需要使用这段代码时,呼叫机器人的名字(函数名加括号),就能叫出这机器人来帮忙,而不需要总是写一大串同样的代码了。

也因此,函数内的代码,它在没被调用时,是不会执行的。就像图中的函数checkAndAttack,虽然它的代码在最上面,但它的代码不会被执行,而是直接跳过,当后面有需要调用函数时,才运行这一段代码。了解了函数以后,我们再来了解一下参数。

三、参数

我们刚刚说,函数就像一个机器人,代码写在机器人的程序里,因此我们可以这幺理解,函数和其他的代码,它们是互不相关的,机器人的程序(函数)和正常运行的代码,是两个相互独立的程序。

因此,我们在正常运行的代码里写的一些变量,它们是不能直接使用到函数里的,因为它们是互不相关的两个程序。而参数,就是帮我们把外界变量传入函数内的工具。

创建参数的方法:def 函数名(参数名),直接在函数名的括号内写上你要创建的参数名即可,你还可以创建不止一个参数:def 函数名(参数名1,参数名2,参数名3……):参数就是一个变量,它是专门用在函数里的,你可以提前写好它们各自要做的工作:

def Test(t1,t2):

hero.attack(t1)

hero.say(t2)

然后我们再按顺序,在调用的时候把我们的变量传入参数里:

def Test(t1,t2):

hero.attack(t1)

hero.say(t2)

enemy1 = hero.findNearest

Enemy()

word = "你好!"

Test(enemy1,word)

Test(enemy1,word),就是把enemy1作为t1,word作为t2传入了Test函数里,这样此时执行Test函数的时候,英雄就是去攻击enemy1,并说“你好!”

明白了这两个知识点以后,我们再看到关卡里的代码:此时我们就知道,上方一个代码块,是系统已经帮我们写好的攻击敌人,并回到中心点的代码块,无需修改。那幺我们以目前while True内的代码作为模板,写出攻击底部敌人的代码:移动到下方X标记处。

到达下方后,寻找最近的敌人,使用checkAndAttack()函数攻击下方新找到的敌人,通关代码。