Java 使Finch对象跟随对象
在我的Java代码中,Finch机器人被命名为myF 我需要让myF执行以下操作:Java 使Finch对象跟随对象,java,finch,Java,Finch,在我的Java代码中,Finch机器人被命名为myF 我需要让myF执行以下操作: 轻触一次可向放置在其前面的对象移动,如果对象静止,则鸟嘴颜色(myF.setLED..)为红色,如果对象移动,则为绿色 雀鸟机器人应该跟随物体四处移动,如果物体停止,它的喙会亮起红色,如果物体移动,它的喙会亮起绿色 在运动时,雀鸟应该嗡嗡作响,但不要太大声。(myF.嗡嗡声(嗡嗡声,嗡嗡声持续时间) 然而,我的代码不能正常工作,我知道有一些错误,但我不知道如何继续进行多次尝试。请参阅下面的代码。任何帮助都将不胜感
import edu.cmu.ri.createlab.terk.robot.finch.Finch;
public class Main {
//Variable declaration.
static int Buzz = 300;
static int BuzzDuration = 1200;
static int R = 250;
static int G = 250;
static int velocityLeft = 150;
static int velocityRight = 150;
static int turnLeft = -50;
static int turnRight = -50;
static int time = 0;
static int tappedCount = 0;
//Initialization of Finch
static Finch myF = new Finch();
//Main method
public static void main(String[] args)
//TAP FINCH ONCE FOR IT TO DO EITHER OF THE FOLLOWING:
//Turn red and follow stationary object
//Turn green and follow an object in motion
//Do nothing if no object is in front of Finch
{
//while (myF.isFinchUpsideDown() == false)
{
if
(myF.isTapped() == true && myF.isObstacle() == true)
{
{
//Set Beak LED to Green if object in front is moving.
// *******need to add a conditional statement for whether obstacle in front of finch is moving.
myF.setLED(R,0,0);
//myF.setWheelVelocities(velocityLeft,velocityRight);
myF.buzz(Buzz, BuzzDuration);
if (myF.isObstacleRightSide() == false)
{
myF.setWheelVelocities(0, 255);
}
else if (myF.isObstacleLeftSide() == false)
{
myF.setWheelVelocities(255, 0);
}
else if (myF.isObstacle() == true)
{
myF.stopWheels();
}
}
}
//Beak supposed to be RED if object in front is stationary, Finch should move towards object.
else {
// if
//***beak should stay off unless object is placed ahead of it and/or is moving, respectively
// (myF.isTapped() == false)
{
myF.setLED(0,0,0);
myF.setWheelVelocities(0,0);
//myF.quit();
//myF.stopWheels();
tappedCount = 0;
}
}
}
myF.quit();
// FollowObjectAround();
//RUN AGAIN i.e. "the Move method" whilst running the first algorithms above.
// boolean RunAgain = true;
//
// while(RunAgain) {
//
// Move();
//
// }
} //main(String[] args) ends here.
//FIRST PART SUCCESSFUL
//Next part: follow object incorporating corresponding beak colour
//public Main() {
public static void FollowObjectAround() {
while (true){
//This begins the movement of the finch
//if (myF.isObstacleLeftSide() == false && myF.isObstacleRightSide() == false || myF.isObstacle() == false)
//LED colours are red, green and blue
//myF.setLED(R,0,0);
//myF.setWheelVelocities(velocityLeft, velocityRight);
//^^
//here, the robot runs straight into the object and keeps going.
//might be best to have the finch stop when it reaches the object, proceeding movement if that object moves also.
//Triggers the RunAgain function to true so that the program does not stop in one run so that the Finch will continue to move
boolean RunAgain = true;
while(RunAgain) {
//Calling of the Move method for the Finch movements.
Move();
while
(myF.isTapped()==true && myF.isTapped()==true)
//if (myF.isTapped()==true && myF.isTapped()==true)
{
myF.setLED(0,0,0);
myF.stopWheels();
//break;
}
} // I just added this brace, wasn't there before.
}
//Inside the while, RunAgain loop , there is a conditional statement that makes the program terminate if the Finch has been tapped twice
//if (myF.isTapped()==true && myF.isTapped()==true)
// {
// break;
// }
}
//}
//}
// Method for Finch movements
public static void Move() {
if (myF.isObstacleRightSide() == false && myF.isObstacleLeftSide() == false && myF.isObstacle() == true)
{
MoveStraight();
}
else if (myF.isObstacleRightSide() == false && myF.isObstacleLeftSide() == true)
{
MoveLeft();
}
else if ( myF.isObstacleRightSide() == true && myF.isObstacleLeftSide() == false)
{
MoveRight();
}
else if (myF.isObstacleRightSide()==true && myF.isObstacleLeftSide()==true)
{
StopMoving();
}
}
//=====================================================================================================
//If the finch is moving straight, the light will be green and both of the wheels will move at 150
public static void MoveStraight()
{
myF.setLED(0, G, 0);
myF.setWheelVelocities(velocityLeft, velocityRight);
myF.buzz(Buzz, BuzzDuration);
}
public static void MoveLeft()
{
//If the finch is moving left, the light will be green, the left wheel will move at -50 and the right wheel will move at 150
myF.setLED(0, G, 0);
myF.setWheelVelocities(turnLeft, velocityRight);
myF.buzz(Buzz, BuzzDuration);
}
public static void MoveRight()
//If the finch is moving right, the light will be green the left wheel will move at 150 and the right wheel will move at -50
{
myF.setLED(0, G, 0);
myF.setWheelVelocities(velocityLeft, turnRight);
myF.buzz(Buzz, BuzzDuration);
}
public static void StopMoving()
//if the Finch is not moving, the colour of the light will be red and the buzzing will stop
{
myF.setLED(R, 0 , 0);
myF.stopWheels();
myF.buzz(Buzz, BuzzDuration);
}
}
//while(myF.isFinchUpsideDown()==false)
{
这里的“{”是错误的,这里是错误的
{
//如果前面的物体正在移动,则将鸟嘴LED设置为绿色。
//*******需要为finch前面的障碍物是否移动添加一个条件语句。您可以格式化代码吗,实际上很难阅读,因为没有任何意图。您可能还需要包含
finch
类。感谢您的反馈,我现在已经添加了类文件。