a boot-camp project
- Z公司是一家无人机制造商,拟制造一款简易的无人机,它可以接受无线遥感指令,进行简单的动作。
- 工程师使用四元组(x,y,z,d)表示无人机位置,其中(x,y,z)为其三维坐标位置,d为其朝向(包括East,West,South,North)
- Aircraft初始位置为(0,0,0,N),表示在原点,朝北。
- 当Aircraft收到UP指令后,向上移动一个坐标。
- 当Aircraft收到DOWN指令后,向下移动一个坐标。
- 当Aircraft收到FORWARD指令后,向前移动一个坐标。
- 当Aircraft位于地面时(z为0),执行Down指令无响应。
- 例如:Aircraft位于(0,0,5,N)当收到UO时,新的位置为(0,0,6,N),继续收到DOWN时,新的位置为(0,0,5,N),继续收到FORWARD时,新的位置为(0,1,5,N)
- 当Aircraft收到LEFT指令后,向左转90度。
- 当Aircraft收到RIGHT指令后,向右转90度。
- 当Aircraft收到ROUND指令后,顺时针旋转180度。
- 例如:当Aircraft位于(0,0,0,N),当收到LEFT时,新的位置为(0,0,0,W),继续收到ROUND,新的位置为(0,0,0,E),继续收到RIGHT后,新的位置为(0,0,0,S)。
- 当Aircraft收到FORWARD_N(n)指令后,向前移动n个坐标。
- 当Aircraft收到UP_N(n)指令后,向上移动n个坐标。
- 当Aircraft收到DOWN_N(n)指令后,向下移动n个坐标。
- 例如:Aircraft位于(0,0,0,N),当收到FORWARD_N(10),新的位置为(0,10,0,N),继续收到UP_N(10),新的位置为(0,10,10,N),继续收到DOWN_N(5),新的位置为(0,10,5,N)。
- 当Aircraft收到REPEAT(instruction,n)指令后,循环执行instruction指令n次。
- instruction指令是除REPEAT指令之外的任意指令,n的范围为[0,10]
- 例如:Aircraft位于(0,0,0,N),收到REPEAT(FORWARD,5),新的位置为(0,5,0,N),继续收到REPEAT(LEFT,1),新的位置为(0,5,0,W),继续收到REPEAT(FORWARD,5),新的位置为(-5,5,0,W),继续收到REPEAT(UP,5),新的位置为(-5,5,5,W)。
- 当Aircraft收到一系列组合指令时,能够一次完成响应的指令。
- 例如:Aircraft位于(0,0,0,N),收到指令序列[UP_N(10),RIGHT,FORWARD_N(10),LEFT,FORWARD_N(5),ROUND],新的位置为(10,5,10,S)。
TEST(UnmannedAircraftTest, should_init_at_0_0_0_N)
{
UnmannedAircraft ua;
ASSERT_TRUE(Position(0,0,0,N) == ua.getPosition());
}
TEST(UnmannedAircraftTest, should_position_up_a_step_given_aircraft_at_origin)
{
ASSERT_TRUE(Position(0,0,1,N) == UnmannedAircraft().on(UP));
}
TEST(UnmannedAircraftTest, should_position_down_a_step_given_position_is_0_0_5_N)
{
UnmannedAircraft ua(Position(0,0,5,N));
ASSERT_TRUE(Position(0,0,4,N) == ua.on(DOWN));
}
TEST(UnmannedAircraftTest, should_position_forward_a_step_given_aircraft_at_origin)
{
ASSERT_TRUE(Position(0,1,0,N) == UnmannedAircraft().on(FORWARD));
}