我正在从 Allen B. Downey 所写的书“Think Java”中学习 Java。在第 5 章中,将介绍一个概念,GridWorld
即您基本上有一个 10x10 的网格,其中包含“演员”,例如 Bug、Rocks 和网格本身,它们代表对象。安装代码后,GridWorld
GUI 将显示一个包含两个参与者的网格,一个“bug”和一个“rock”。
通过单击演员,有一个带有方法的下拉菜单,可以在该演员上调用。
其中一项任务是编写一个方法,通过使用Math.random();
以randomBug
Bug 作为参数并将 Bug 的方向设置为 0、90、180 或 270 之一的方法,即北、东、南、西,概率相等,如果可以的话,然后移动错误。
下一个任务是修改randomBug
为取整数n
并重复n
次数。
这是我的代码:
/*
* AP(r) Computer Science GridWorld Case Study:
* Copyright(c) 2005-2006 Cay S. Horstmann (http://horstmann.com)
*
* This code is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* @author Cay Horstmann
*/
import info.gridworld.actor.ActorWorld;
import info.gridworld.actor.Bug;
import info.gridworld.actor.Rock;
/**
* This class runs a world that contains a bug and a rock, added at random
* locations. Click on empty locations to add additional actors. Click on
* populated locations to invoke methods on their occupants. <br />
* To build your own worlds, define your own actors and a runner class. See the
* BoxBugRunner (in the boxBug folder) for an example. <br />
* This class is not tested on the AP CS A and AB exams.
*/
public class BugRunner
{
public static void main(String[] args)
{
ActorWorld world = new ActorWorld();
Bug redbug = new Bug();
world.add(redbug);
System.out.println(redbug.getLocation());
world.show();
randomBug(redbug, Math.random(), 5);
}
public static void randomBug(Bug x, double y, int n){
if (y <= 0.2 && n >= 0){
x.setDirection(0);
if (x.canMove()) x.move();
} else if (y >= 0.3 && y <= 0.5 && n >= 0){
x.setDirection(90);
if (x.canMove()) x.move();
} else if (y >= 0.6 && y <= 0.8 && n >= 0){
x.setDirection(180);
if (x.canMove()) x.move();
} else {
x.setDirection(270);
if (x.canMove()) x.move();
}
randomBug(x, Math.random(), n-1);
}
}
我正在尝试使用递归函数重复该过程五次,因此 Bug 应该移动五次,除非它到达网格的边缘。有时会出现的问题是,Bug 移动了 5 次以上,它做了 6 或 10 步,尽管我通过使用 condition 来限制它n <= 0
。
我应该在代码中更改或添加什么以便完成分配?