Как заставить шарик двигаться используя цикл? - Java

Узнай цену своей работы

Формулировка задачи:

Доброго всем дня. Есть прога которая рисует круг при нажатии мышки и теперь мне нужно заставить этот круг двигатся и отбиватся от краев.Это нужно зделать с помощью цыкла(или цыклов).Только я вот не понимаю какой и как цыкл здесь задействовать . Вот часть кода где я описываю панельку где рисую круг и событие(нажатие мышки) при котором появляется круг. Если нужно будет скину весь код.
pan = new Panel() {
            
            public void paint(Graphics g) {
                
    Color newColor = new Color((int) (Math.random() * 255), (int) (Math.random() * 255),(int) (Math.random() * 255));
                    g.setColor(newColor);
                    g.fillOval(X, Y, r, r);
                            
            }   
        };
          pan.addMouseListener(new MouseAdapter() {
                
                public void mousePressed(MouseEvent e) {

                    r = 70;
                    X = e.getX() - r / 2;
                    Y = e.getY() - r / 2;
                    pan.repaint();
                }
            });

Решение задачи: «Как заставить шарик двигаться используя цикл?»

textual
Листинг программы
package movingball;
 
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class MovingBall extends JPanel {
 
    BufferedImage img;
    int WIDTH;
    int HEIGHT;
    int X, Y, dx, dy, R;
 
    MovingBall() {
        WIDTH = 640;
        HEIGHT = 480;
 
        X = 0;
        Y = 0;
        dx = 1;
        dy = 1;
        R = 15;
 
        JFrame frame = new JFrame("movement");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setPreferredSize(new Dimension(WIDTH, HEIGHT));
        img = new BufferedImage(WIDTH + R, HEIGHT + R, BufferedImage.TYPE_INT_BGR);
 
        frame.add(this);
        frame.pack();
 
        javax.swing.Timer timer = new javax.swing.Timer(20, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (X + R < 0 | X + R > WIDTH) {
                    dx *= (-1);
                }
 
                if (Y + R < 0 | Y + R > HEIGHT) {
                    dy *= (-1);
                }
 
                X += dx;
                Y += dy;
 
                paintOnImg();
            }
        });
 
        timer.start();
 
        frame.setResizable(false);
        frame.setVisible(true);
 
    }
 
    public void paintOnImg() {
        Graphics g = img.createGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, WIDTH + R, HEIGHT + R); //cleaning the image;
 
        g.setColor(Color.RED);
        g.fillOval(X + R, Y + R, R, R);
 
        g.dispose();
 
        repaint();
    }
 
    @Override
    public void paint(Graphics g) {
        g.drawImage(img, 0, 0, null);
    }
 
    @Override
    public void update(Graphics g) {
        paint(g);
    }
 
    public static void main(String[] args) {
        new MovingBall();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы