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

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

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

Доброго всем дня. Есть прога которая рисует круг при нажатии мышки и теперь мне нужно заставить этот круг двигатся и отбиватся от краев.Это нужно зделать с помощью цыкла(или цыклов).Только я вот не понимаю какой и как цыкл здесь задействовать . Вот часть кода где я описываю панельку где рисую круг и событие(нажатие мышки) при котором появляется круг. Если нужно будет скину весь код.
Листинг программы
  1. pan = new Panel() {
  2. public void paint(Graphics g) {
  3. Color newColor = new Color((int) (Math.random() * 255), (int) (Math.random() * 255),(int) (Math.random() * 255));
  4. g.setColor(newColor);
  5. g.fillOval(X, Y, r, r);
  6. }
  7. };
  8. pan.addMouseListener(new MouseAdapter() {
  9. public void mousePressed(MouseEvent e) {
  10.  
  11. r = 70;
  12. X = e.getX() - r / 2;
  13. Y = e.getY() - r / 2;
  14. pan.repaint();
  15. }
  16. });

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

textual
Листинг программы
  1. package movingball;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Dimension;
  5. import java.awt.Graphics;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.awt.image.BufferedImage;
  9. import javax.swing.JFrame;
  10. import javax.swing.JPanel;
  11.  
  12. public class MovingBall extends JPanel {
  13.  
  14.     BufferedImage img;
  15.     int WIDTH;
  16.     int HEIGHT;
  17.     int X, Y, dx, dy, R;
  18.  
  19.     MovingBall() {
  20.         WIDTH = 640;
  21.         HEIGHT = 480;
  22.  
  23.         X = 0;
  24.         Y = 0;
  25.         dx = 1;
  26.         dy = 1;
  27.         R = 15;
  28.  
  29.         JFrame frame = new JFrame("movement");
  30.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  31.         this.setPreferredSize(new Dimension(WIDTH, HEIGHT));
  32.         img = new BufferedImage(WIDTH + R, HEIGHT + R, BufferedImage.TYPE_INT_BGR);
  33.  
  34.         frame.add(this);
  35.         frame.pack();
  36.  
  37.         javax.swing.Timer timer = new javax.swing.Timer(20, new ActionListener() {
  38.             @Override
  39.             public void actionPerformed(ActionEvent e) {
  40.                 if (X + R < 0 | X + R > WIDTH) {
  41.                     dx *= (-1);
  42.                 }
  43.  
  44.                 if (Y + R < 0 | Y + R > HEIGHT) {
  45.                     dy *= (-1);
  46.                 }
  47.  
  48.                 X += dx;
  49.                 Y += dy;
  50.  
  51.                 paintOnImg();
  52.             }
  53.         });
  54.  
  55.         timer.start();
  56.  
  57.         frame.setResizable(false);
  58.         frame.setVisible(true);
  59.  
  60.     }
  61.  
  62.     public void paintOnImg() {
  63.         Graphics g = img.createGraphics();
  64.         g.setColor(Color.WHITE);
  65.         g.fillRect(0, 0, WIDTH + R, HEIGHT + R); //cleaning the image;
  66.  
  67.         g.setColor(Color.RED);
  68.         g.fillOval(X + R, Y + R, R, R);
  69.  
  70.         g.dispose();
  71.  
  72.         repaint();
  73.     }
  74.  
  75.     @Override
  76.     public void paint(Graphics g) {
  77.         g.drawImage(img, 0, 0, null);
  78.     }
  79.  
  80.     @Override
  81.     public void update(Graphics g) {
  82.         paint(g);
  83.     }
  84.  
  85.     public static void main(String[] args) {
  86.         new MovingBall();
  87.     }
  88. }

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


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

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

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы