软工中级实训Stage2-Part2:Bug Variations

本文详细解析BoxBug类中实例变量sideLength与steps的功能与作用,阐述BoxBug如何通过这两个变量控制其移动路径与方向变化,并解释BoxBug继承Bug类并使用move方法的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例变量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;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值