实例变量sideLength的作用是什么?
- 答:sideLength这个变量在BoxBug这个类中规定每一次bug沿着某一条边走的最远步长(在不遇到障碍或者边界的情况下),在达到这个步长后,Boxbug就要调转运动方向。
- 举例:
// @file: GridWorldCode/projects/BoxBug
// @line: 45
if (steps < sideLength && canMove())
if (steps < sideLength && canMove()){}
实例变量steps的作用是什么?
- 答:steps用于记录BoxBug这个类中任一个Boxbug在当前所处的这条边上已经移动的步数
- 举例:
// @file: GridWorldCode/projects/BoxBug
// @line: 45~50
if (steps < sideLength && canMove()){
move();
steps++;
}
为什么当步长等于sideLength时,turn方法被调用两次?
- 答:因为当bug在某一条边上移动的步数达到最大时候也即(sideLength == steps)的时候,Boxbug需要转移方向,进入下一条边进行移动;又由于turn()函数调用一次只旋转45°,而Boxbug自身需要旋转90°才可以进入下一条边,所以要旋转两次。
- 举例:
// @file: GridWorldCode/projects/BoxBug
// @line: 19
import info.gridworld.actor.Bug;
//@file:GridWorldCode/framework/info/gridworld/actor/Bug
// @line: 62~65
public void turn()
{
setDirection(getDirection() + Location.HALF_RIGHT);
}
//BoxBug中达到临界条件执行的部分
// @file: GridWorldCode/projects/BoxBug
// @line: 50~55
else
{
turn();
turn();
steps = 0;
}
当BoxBug代码中没有move方法时,为什么可以在BoxBug类中调用move方法?
- 答:由于BoxBug继承Bug,并且在BoxBug中并没有重载Bug的move()函数,所以BoxBug就继承了Bug的move()函数,也就可以在直线运动遇到障碍无法行动时候选择调整自己的运动方向。
- 举例:
// @file: GridWorldCode/projects/BoxBug
// @line: 19
import info.gridworld.actor.Bug;
//@file:GridWorldCode/framework/info/gridworld/actor/Bug
//@line: 76~81
Location loc = getLocation();
Location next = loc.getAdjacentLocation(getDirection());
if (gr.isValid(next))
moveTo(next);
else
removeSelfFromGrid();
构造BoxBug之后,其正方形图案的大小是否将始终相同?为什么或者为什么不?
- 答:正方形图案的大小会始终相同。当BoxBug被创建之后,由于sideLength已经在构造函数中被限定,同时Boxbug类也未提供其他可用的方法来改变sideLength。
- 举例:
// @file: GridWorldCode/projects/BoxBug
// @line: 34~37
public BoxBug(int length)
{
steps = 0;
sideLength = length;
}
BoxBug的行进路径会改变吗?为什么或者为什么不?
-
答:会改变。因为Boxbug继承了Bug,所以BoxBug也拥有对障碍物的判定与处理能力,当遇到阻碍自己运动的物体时,Boxbug会作出相应的反应(改变方向)同时自身的运动轨迹也就会发生变化。
-
举例:
// @file: GridWorldCode/projects/BoxBug
// @line: 19
import info.gridworld.actor.Bug;
//@file:GridWorldCode/framework/info/gridworld/actor/Bug
// @line: 76~81
Location loc = getLocation();
Location next = loc.getAdjacentLocation(getDirection());
if (gr.isValid(next))
moveTo(next);
else
removeSelfFromGrid();
steps的值何时将为零?
-
答:在三种情况下Boxbug的steps被重新设置为零: ①.初次调用构造函数创建一个新的Boxbug对象时候 ②.当Boxbug遇到障碍物改变自身运动方向之后 ③ 当Boxbug在某条道路上运动的最大步长达到sideLength的限制,进行转换运动方向之后
-
举例:
//构造函数初始化steps=0
// @file: GridWorldCode/projects/BoxBug //@line: 34~37
public BoxBug(int length)
{
steps = 0;
sideLength = length;
}
//在act()函数中设置steps=0;
// @file: GridWorldCode/projects/BoxBug //@line: 43~56
public void act()
{
if (steps < sideLength && canMove())
{
move();
steps++;
}
else
{
turn();
turn();
steps = 0;
}
}