犬を羊に向かって動かし、羊を犬からランダムな方向に遠ざけることで、ユーザーが羊をペンに入れるアプレットを作成しようとしています。羊と犬はオブジェクトとして定義されています。
アプレットはまだ初期段階です。これまでのところ、犬のオブジェクトを画面上でドラッグできます。犬のオブジェクトが羊のオブジェクトに近づくと、特定の領域内 (設定した境界内) でのみ移動します。私は解決策を探しているのではなく、助けを求めているだけです。
私が助けてほしいのは、犬のオブジェクトが私が設定した境界内に入ったときに羊のオブジェクトを犬からランダムな方向に動かすことであり、設定した境界内で移動するだけではありません。ヘルプやヒントをいただければ幸いです。これが私のコードです:
package mandAndDog;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class SheepDog extends Applet implements ActionListener, MouseListener, MouseMotionListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/
Dog dog;
Sheep sheep;
int xposR;
int yposR;
int sheepx;
int sheepy;
int sheepBoundsx;
int sheepBoundsy;
public void init()
{
addMouseListener(this);
addMouseMotionListener(this);
dog = new Dog(10, 10);
sheep = new Sheep(200, 100);
sheepx = 175;
sheepy = 75;
sheepBoundsx = 50;
sheepBoundsy = 50;
}
public void paint(Graphics g)
{
dog.display(g);
sheep.display(g);
}
public void actionPerformed(ActionEvent ev)
{}
public void mousePressed(MouseEvent e)
{}
public void mouseReleased(MouseEvent e)
{}
public void mouseEntered(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
public void mouseMoved(MouseEvent e)
{
}
public void mouseClicked(MouseEvent e)
{}
public void mouseDragged(MouseEvent e)
{
dog.setLocation(xposR, yposR);
if (xposR > sheepx&& xposR < sheepx+sheepBoundsx && yposR > sheepy
&& yposR < sheepy+sheepBoundsy){
sheep.setLocation(xposR + 50, yposR + 50);
}
xposR = e.getX();
yposR = e.getY();
repaint();
}
}
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 = 10;
int circleHeight = 10;
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);
}
}