挑战如下图所示:
1.挑战先给一个常量,这个常量等于随机宝石的数量;例如:宝石随机5个,totalgems就=5
这个常量作用不大,主要是后面使用whlie语句时,使宝石数小于随机数时,可以一直循环whlie内语句用的
let totalGems = randomNumberOfGems
2.我们先设2个常量,初始值都=0;一个是宝石数,一个是“转身”数(这才是最有用的!!!)
var numberOfGem = 0
var numberOfGoback = 0
3.定义一个“转身”函数,这个函数就是当前方遇到阻碍时,2次左转来实现转身的
�funcgoback()
{
turnLeft()
turnLeft()
}
4.定义获取宝石和前方遇到阻碍时,主角的动作;当然,宝石数和转身数都要相应增加 +=1
funcgetgem()
{
ifisBlocked
{
goback()
numberOfGoback +=1
}
ifisOnGem
{
collectGem()
numberOfGem +=1
}
}
5.再定义一个转身次数与粉开关&蓝开关的对应关系,false为关,true为开
场景:【转身1,粉关】、【转身2,粉开】、【转身3,粉关&蓝关】
【转身4,蓝开】、【转身5,蓝关】
说明:转身次数1~5的条件都是有必要的,多运行几次就会发现宝石的分布会出现在
一些角落里,如果条件少了,宝石就会获取不到(代码还可以优化,不过我懒得改了)
functwoswitch()
{
ifnumberOfGoback ==1
{pinkPortal.isActive = false}
ifnumberOfGoback ==2
{pinkPortal.isActive = true}
ifnumberOfGoback ==3
{
pinkPortal.isActive = false
bluePortal.isActive = false
}
ifnumberOfGoback ==4
{bluePortal.isActive = true}
ifnumberOfGoback ==5
{bluePortal.isActive = false}
}
6.下面为简单代码,函数变量等说明都是上面了⬆️
whilenumberOfGem != totalGems
{
moveForward()
getgem()
twoswitch()
}
7.最后就是所有代码了,大家可以参考一下;另外,宝石数不能决定开关是否开关啊喂(反正我是没找到方法),后面灵光一闪,发现转身的次数用来决定粉色和蓝色开关是否开关才是最佳的办法啊!!!果断被宝石数和随机宝石数所迷惑了,并且“提示”还建议比较2者进行写代码?!
//随机数totalgems
lettotalGems = randomNumberOfGems
//设变量宝石数,初始值为0
varnumberOfGem =0
varnumberOfGoback =0
//定义转身函数
funcgoback()
{
turnLeft()
turnLeft()
}
//定义获取宝石和转身的函数
funcgetgem()
{
ifisBlocked
{
goback()
numberOfGoback +=1
}
ifisOnGem
{
collectGem()
numberOfGem +=1
}
}
//定义开关的函数
functwoswitch()
{
ifnumberOfGoback ==1
{pinkPortal.isActive =false}
ifnumberOfGoback ==2
{pinkPortal.isActive =true}
ifnumberOfGoback ==3
{
pinkPortal.isActive =false
bluePortal.isActive =false
}
ifnumberOfGoback ==4
{bluePortal.isActive =true}
ifnumberOfGoback ==5
{bluePortal.isActive =false}
}
//*****正式代码正式代码正式代码正式代码*****
whilenumberOfGem != totalGems
{
moveForward()
getgem()
twoswitch()
}
//转身1,粉关
//转身2,粉开
//转身3,粉关,蓝关
//转身4,蓝开
//转身5,蓝关