青少年编程Playgrounds之十三--逻辑运算

青少年编程Playgrounds之十三–逻辑运算

第四关 检查这个或那个

与第三关一字之差
在这里插入图片描述
地图
在这里插入图片描述
本关练习使用逻辑

分析一下循环

for i in 1 ... 12 {
    
}

也就是说,Byte需要走12步,则完成本关。当前方或者左边没有障碍这两个条件都不满足时,前进。而任一条件满足时,则先右转,然后前进一步。

for i in 1 ... 12 {
    if isBlocked || isBlockedLeft{
        turnRight()
    }
    moveForward()
    
}

再加上宝石检查功能,即可

for i in 1 ... 12 {
    if isBlocked || isBlockedLeft{
        turnRight()
    }
    moveForward()
    if isOnGem{
        collectGem()
    }
}

该检查功能,可以针对宝石出现在路径中的任一位置,如果仅是针对本关地图,可以直接放在循环外,一句两句代码的差异,相较于以我代码水平编写的冗余代码,这都不是事儿。
放在循坏外代码如下:

for i in 1 ... 12 {
    if isBlocked || isBlockedLeft{
        turnRight()
    }
    moveForward()
    
}
collectGem()

在这里插入图片描述

逻辑运算Boss战 逻辑迷宫

在这里插入图片描述

地图
在这里插入图片描述
如果单纯完成本关完全没有难度,关键是怎么找到最优的方式解决本关问题。依然抛砖引玉中…

首先根据主程序给定循环,那么Byte需要在8步内解决问题。地图中有三种情况
未点亮开关–直接点亮,然后左转
宝石–搜集
宝石+未点亮开关–右边通路中有宝石需要搜集

三种情况是互斥的,所以可以使用条件if else if

先完成两个简单的条件代码

if isOnClosedSwitch{
        turnLeft()
        toggleSwitch()
    }
if isOnGem{
        collectGem()
    }

代码编写界面添加的函数没法调用,所以所有东西直接扔到主程序中了。

然后关键点,解决同时出现宝石和开关时情况,首先,当Byte走到此处时,需要右转,然后4步回到原位。

if isOnGem && isOnClosedSwitch{
        turnRight()
        for i in 0..<4{
            if isBlocked{
                turnLeft()
                turnLeft()
            }
            moveForward()
            if isOnGem{
                collectGem()
            }
        }
        turnRight()
    }

先右转,然后循环走四步,每次检查是否有宝石,循环结束后,回到原来位置,右转,面对下一步。
将所有主路的开关和宝石处理留给主程序
所以主程序变为

for i in 1 ... 8 {
    moveForward()
    //处理右边支路宝石
    if isOnGem && isOnClosedSwitch{
        turnRight()
        for i in 0..<4{
            if isBlocked{
                turnLeft()
                turnLeft()
            }
            moveForward()
            if isOnGem{
                collectGem()
            }
        }
        turnRight()
    }
    //当仅遇到未切换(点亮)开关时转向
    else if isOnClosedSwitch{
        turnLeft()
    }
    //遇到宝石,搜集
    if isOnGem{
        collectGem()
    }
    // 遇到未点亮开关,点亮
    if isOnClosedSwitch{
        toggleSwitch()
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值