假想你在火星探索团队中负责软件开发。现在你要给登陆火星的探索小车编写控制程序,根据地球发送的控制指令来控制火星车的行动。
火星车收到的指令分为:
- 初始化信息:火星车的降落地点(x, y)和朝向(N, S, E, W)信息;
- 移动指令:火星车可以前进(M),一次移动一格;
- 转向指令:火星车可以左转90度(L)或右转90度(R)。
由于地球和火星之间的距离很远,指令必须批量发送,火星车执行完整批指令之后,再回报自己所在的位置坐标和朝向。
-
新需求1,加一个新指令,如果接受到B指令,那么久会进入倒车状态,这个时候MLR跟正向的时候是反的。注意,指令的操作虽然反了,但是朝向不能变。比如朝北的M之后,y坐标是减了,但是朝向必须还是北。
-
新需求2,有一个雷达功能,执行完判断一下自己是不是掉沟里了,如果掉沟里了,就再map上打个记号X(只是表达这个意思,不一定非要是字符串X),后面的rover会忽略走向这个记号的命令(当火星车掉到沟里时,调用init方法创建一辆新的火星车,但旧的火星车还要在沟里,不能消失)。判断无法动的方式目前先用随机数吧,正好练练mock。
-
新需求3,地图有不同的地形,有的地形能触发无法移动,有的不能。掉沟里是火星车自己在地图上打的标记,不同地形是火星车在来到火星时就知道的地图信息(考虑,X标在哪?真实的地图上吗?真实的世界的映射的地图,和标记了X的地图应该是个什么关系?)
-
新需求4,车也有状态,有的状态,车会忽略一些指令,比如左转坏了,会忽略左转指令
-
新需求5,车还分类型,比如Bus,占两格,他的坐标是车头的坐标,但是它左拐时周边必须有可以拐的空间(右侧两格都不能是X),否则会忽略掉指令。 Bus可能会在拐弯时坏掉, 引入卡车,卡车占两格,不同于Bus的是,卡车如果车头处没有坏掉,可以接受特殊指令来脱钩车头,其他车接受这个指令无反应。