Как бы я go проверил, нажал ли пользователь на квадрат, созданный fillRect, и выполнил действие, когда они это сделали? - PullRequest
0 голосов
/ 17 апреля 2020

Я кодирую игру в Java об уклонении от оранжево-белых sh красных квадратов и нажатии на них, чтобы удалить их. Однако мне нужно выяснить, как я мог бы написать что-то для выполнения действия, когда в первую очередь щелкают fillRect, если это невозможно, есть хотя бы способ выяснить, где нажал пользователь, или проверить, если они щелкнул в определенной области вообще?

public void mouseClicked(MouseEvent e) { System.out.println(e.getXOnScreen()); }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { } 
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { } 

1 Ответ

1 голос
/ 19 апреля 2020

ClickCanvas. java

public final class ClickCanvas extends Canvas
{
 private final List<Rectangle> squares=new ArrayList();

 ClickCanvas()
 {
  addMouseListener(new OnClick());

  for(int x=5;x<=305;x+=150)//3 by 3 grid of squares to click
  {
   squares.add(new Rectangle(x,5,50,50));
   squares.add(new Rectangle(x,155,50,50));
   squares.add(new Rectangle(x,305,50,50));
  }
 }

 @Override
 public void paint(Graphics g) //Painting Your Squares Here Called By Swing
 {
  super.paint(g);

  Dimension size=getSize();

  g.setColor(Color.WHITE);

  g.fillRect(0,0,size.width,size.height);

  g.setColor(Color.ORANGE);

  squares.forEach(square->g.fillRect(square.x,square.y,square.width,square.height));
 }

 private class OnClick extends MouseAdapter
 {
  @Override
  public void mousePressed(MouseEvent m)
  {
   squares.removeIf(square->square.contains(m.getPoint()));//You do Your Action Here in this case i remove the square if it contains the mouse point

   repaint(); //Repaint The Canvas To Now Redraw Remaining Squares

   if(squares.isEmpty())
   {
    JOptionPane.showMessageDialog(null,"Congrats You Win");

    System.exit(0);
   }
  }
 }
}

MainClass

public class ClickTest 
{
 public static void main(String args[])
 {
  JFrame frame=new JFrame("Click Test");

  frame.add(new ClickCanvas());

  frame.setSize(400,450);

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  frame.setVisible(true);
 }
}

Я надеюсь, что это даст вам некоторое представление о том, что вы хотите сделать в своей игре

...