这个赋值的目的是创建一个Field和Robot类以及这些类的对象。
单个场对象限于从(0,0)到(50,50)的点的平方,并包含3个金币和3个炸弹。
三个机器人对象从左到右(0,0)到(0,50)从字段(一个接一个)搜索黄金,然后通过字段(1,0)下降到1,50,依此类推。
机器人被炸弹摧毁,炸弹是用户输入的地方。一旦黄金被收集,它就不能被另一个机器人拾起,一个炸弹爆炸它就不会再这样做了。
到目前为止,这是我尝试解决问题的方法,我正在继续努力,但我会欣赏它上面的第二双眼睛来捕捉到我失踪的东西。该计划编制,但炸弹和黄金没有被发现"正确和输出表明以下机器人死在与之前的机器人相同的炸弹上。此外,有几段代码被评论删除,我这样做是为了测试程序的不同部分。我觉得这部分是我遇到麻烦的地方。方法field.alreadyFound()和field.alreadyBombed()返回一个值为true的布尔值。我的if语句应该说是否已找到黄金/炸弹,请忽略它。
while(x <= 50 && y <= 50 && alive2 == true) {
foundGold1 = robot2.look(field.locateGold1());
foundGold2 = robot2.look(field.locateGold2());
foundGold3 = robot2.look(field.locateGold3());
foundBomb1 = robot2.look(field.locateBomb1());
foundBomb2 = robot2.look(field.locateBomb2());
foundBomb3 = robot2.look(field.locateBomb3());
/*gotBomb1 = field.alreadyBombed1();
gotBomb2 = field.alreadyBombed2();
gotBomb3 = field.alreadyBombed3();
gotGold1 = field.alreadyFound1();
gotGold2 = field.alreadyFound2();
gotGold3 = field.alreadyFound3();*/
if (foundGold1 == true){
if (field.alreadyFound1() == true){}
else {robot2.addGold();
field.foundGold1();}
}
if (foundGold2 == true) {
if (field.alreadyFound2() == true){}
else {robot2.addGold();
field.foundGold2();}
}
if (foundGold3 == true) {
if (field.alreadyFound3() == true){}
else {robot2.addGold();
field.foundGold3();}
}
if (foundBomb1 == true) {
if (field.alreadyBombed1() == true){}
else alive2 = false;
}
if (foundBomb2 == true) {
if (field.alreadyBombed2() == true){}
else alive2 = false;
}
if (foundBomb3 == true) {
if (field.alreadyBombed3() == true){}
else alive2 = false;
}
y = y + 1;
robot2.setLocation(x, y);
//System.out.println(y);
if (y == 50)
{x = x + 1;
y = 0;}
}
答案 0 :(得分:4)
我没看到你设置炸弹爆炸的地方,所以从我在这里看到的,你错过了那部分。
下面是重新格式化和稍微重组的代码:我发现代码很难按原样使用。使用这个更短,更规范,更IMO更具沟通性的版本可能更容易。
while (x <= 50 && y <= 50 && alive2 == true) {
foundGold1 = robot2.look(field.locateGold1());
foundGold2 = robot2.look(field.locateGold2());
foundGold3 = robot2.look(field.locateGold3());
foundBomb1 = robot2.look(field.locateBomb1());
foundBomb2 = robot2.look(field.locateBomb2());
foundBomb3 = robot2.look(field.locateBomb3());
/*gotBomb1 = field.alreadyBombed1();
gotBomb2 = field.alreadyBombed2();
gotBomb3 = field.alreadyBombed3();
gotGold1 = field.alreadyFound1();
gotGold2 = field.alreadyFound2();
gotGold3 = field.alreadyFound3();*/
if (foundGold1 && !field.alreadyFound1()) {
robot2.addGold();
field.foundGold1();
}
if (foundGold2 && !field.alreadyFound2()) {
robot2.addGold();
field.foundGold2();
}
if (foundGold3 && !field.alreadyFound3()) {
robot2.addGold();
field.foundGold3();
}
if (foundBomb1 && !field.alreadyBombed1()) {
alive2 = false;
}
if (foundBomb2 && !field.alreadyBombed2()) {
alive2 = false;
}
if (foundBomb3 && !field.alreadyBombed3()) {
alive2 = false;
}
y = y + 1;
robot2.setLocation(x, y);
if (y == 50) {
x = x + 1;
y = 0;
}
}
您可能还会受到执行此工作所需的代码量的限制:我假设您的robot1
和robot2
代码基本相同,唯一的区别是您当前的机器人处理
不要重复代码,而应考虑将currentRobot
传递给单个方法。处理这类问题的方法有很多,但这与你已经完成的工作非常吻合。您可能希望向机器人类添加isAlive
方法/属性。