gpt4 book ai didi

java - 移动物体不会停留在设定的范围内?

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:36 25 4
gpt4 key购买 nike

我正在创建一个小程序,其中一只羊被一只狗放牧,当狗对象靠近羊时,两者都是对象,而羊则以随机方向远离。 (很抱歉,我知道我已经问了很多关于这个小程序的问题)。到目前为止,一切正常,除了羊对象不会停留在我设置的范围内并最终完全从屏幕上消失。我尝试了很多不同的方法,但似乎没有任何效果。知道为什么绵羊对象不会停留在边界内吗?任何帮助将非常感激。这是代码,有两个单独的java文件:

MainPanel.java

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.Random;


import javax.swing.JPanel;

public class MainPanel extends JPanel implements MouseMotionListener
{

private static final long serialVersionUID = 1L;
Dog dog;
Sheep sheep;
int[] directionNumbersLeft = {0, 1, 3};
int[] directionNumbersRight = {1, 2, 3};
int[] directionNumbersUp = {0, 1, 2};
int[] directionNumbersDown = {0, 2, 3};
int x;
int selection;
int xposR;
int yposR;
int sheepx;
int sheepy;
int sheepBoundsx;
int sheepBoundsy;
int MAX_DISTANCE = 50;
int direction;
int distance;

public MainPanel()
{

addMouseMotionListener(this);
sheepx = 175;
sheepy = 75;
dog = new Dog(22,22);
sheep = new Sheep(sheepx, sheepy);
sheepBoundsx = 30;
sheepBoundsy = 30;



}


public void paintComponent(Graphics g)
{
super.paintComponent(g);
dog.display(g);
sheep.display(g);
g.drawRect(20, 20, 600, 600);
}



public void mouseDragged(MouseEvent e)
{
xposR = e.getX();
yposR = e.getY();
dog.setLocation(xposR, yposR);
sheep.setLocation(sheepx, sheepy);
direction = (int)(Math.random()*4);
Random rand = new Random();
x = rand.nextInt(3);

if (xposR > sheepx&& xposR < sheepx+sheepBoundsx && yposR > sheepy
&& yposR < sheepy+sheepBoundsy && direction == 0){
sheepx = sheepx + 50;
}
if (xposR > sheepx&& xposR < sheepx+sheepBoundsx && yposR > sheepy
&& yposR < sheepy+sheepBoundsy && direction == 1){
sheepy = sheepy + 50;
}

if (xposR > sheepx&& xposR < sheepx+sheepBoundsx && yposR > sheepy
&& yposR < sheepy+sheepBoundsy && direction == 2){
sheepx = sheepx - 50;
}

if (xposR > sheepx&& xposR < sheepx+sheepBoundsx && yposR > sheepy
&& yposR < sheepy+sheepBoundsy && direction == 3){
sheepy = sheepy - 50;
}
if (sheepx <= 20){
direction = directionNumbersLeft[x];
}
if (sheepy <= 20){
direction = directionNumbersUp[x];
}
if (sheepx >= 600){
direction = directionNumbersRight[x];
}
if (sheepy >= 600){
direction = directionNumbersDown[x];
}
if (xposR < sheepx){
direction = directionNumbersLeft[x];
}
if (xposR > sheepx){
direction = directionNumbersRight[x];
}
if (yposR > sheepy){
direction = directionNumbersDown[x];
}
if (yposR < sheepy){
direction = directionNumbersUp[x];
}


repaint();
}



public void mouseMoved(MouseEvent e) {


}



}

SheepDog.java

import java.awt.Color;
import java.awt.Graphics;


import javax.swing.*;


public class SheepDog extends JApplet
{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/


MainPanel mainPanel;



public void init()
{
mainPanel = new MainPanel();
add(mainPanel);


}




}
class Dog
{
int xpos;
int ypos;
int circleWidth = 30;
int circleHeight = 30;

public Dog(int x, int y)
{
xpos = x;
ypos = y;

}

public void setLocation(int lx, int ly)
{
xpos = lx;
ypos = ly;
}

public void display(Graphics g)
{
g.setColor(Color.blue);
g.fillOval(xpos, ypos, circleWidth, circleHeight);
}
}

class Sheep
{
int xpos;
int ypos;
int circleWidth = 30;
int circleHeight = 30;

public Sheep(int x, int y)
{
xpos = x;
ypos = y;

}

public void setLocation(int lx, int ly)
{
xpos = lx;
ypos = ly;
}

public void display(Graphics g)
{
g.setColor(Color.green);
g.fillOval(xpos , ypos, circleWidth, circleHeight);
g.drawOval(xpos - 10, ypos - 10, 50, 50);
}


}

最佳答案

尝试将 else 添加到长串 if() 语句中,如下所示:

    if (sheepx <= 20){
direction = directionNumbersLeft[x];
} else if (sheepy <= 20){
direction = directionNumbersUp[x];
} else if (sheepx >= 600){
direction = directionNumbersRight[x];
} else ...

按照你之前的方式,如果羊 x 剩下 20 个,并且小于狗的 x,它仍然会远离狗,即使它应该担心边界。这是因为两个 if 语句都会触发并修改 direction,但由于您首先检查边界,因此尝试从狗身上逃跑会覆盖该边界。尝试这个解决方案,告诉我它是如何工作的

关于java - 移动物体不会停留在设定的范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12273164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com