Maison >Java >javaDidacticiel >Comment puis-je créer plusieurs balles rebondissantes dans une application Java en utilisant une liste pour les gérer ?

Comment puis-je créer plusieurs balles rebondissantes dans une application Java en utilisant une liste pour les gérer ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-26 14:09:20171parcourir

How can I create multiple bouncing balls in a Java application using a list to manage them?

Plusieurs balles rebondissantes en Java

Dessiner plusieurs balles rebondissantes sur une application Java peut être réalisé en utilisant une liste pour stocker les balles et en itérant à travers lui pour déplacer et dessiner chaque balle. Voici une version modifiée de votre code :

import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;

public class Ball extends JPanel implements Runnable {

    List<Ball> balls = new ArrayList<Ball>();   
Color color;
int diameter;
long delay;
private int x;
private int y;
private int vx;
private int vy;

public Ball(String ballcolor, int xvelocity, int yvelocity) {
    if(ballcolor == "red") {
        color = Color.red;
    }
    else if(ballcolor == "blue") {
        color = Color.blue;
    }
    else if(ballcolor == "black") {
        color = Color.black;
    }
    else if(ballcolor == "cyan") {
        color = Color.cyan;
    }
    else if(ballcolor == "darkGray") {
        color = Color.darkGray;
    }
    else if(ballcolor == "gray") {
        color = Color.gray;
    }
    else if(ballcolor == "green") {
        color = Color.green;
    }
    else if(ballcolor == "yellow") {
        color = Color.yellow;
    }
    else if(ballcolor == "lightGray") {
        color = Color.lightGray;
    }
    else if(ballcolor == "magenta") {
        color = Color.magenta;
    }
    else if(ballcolor == "orange") {
        color = Color.orange;
    }
    else if(ballcolor == "pink") {
        color = Color.pink;
    }
    else if(ballcolor == "white") {     
        color = Color.white;
    }
    diameter = 30;
    delay = 40;
    x = 1;
    y = 1;
    vx = xvelocity;
    vy = yvelocity;
}

protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    for (Ball ball : balls) {
        g.setColor(ball.color);
        g.fillOval(ball.x, ball.y, 30, 30); //adds color to circle
        g.setColor(Color.black);
        g2.drawOval(ball.x, ball.y, 30, 30); //draws circle
    }
}

public void run() {
    while(isVisible()) {
        try {
            Thread.sleep(delay);
        } catch(InterruptedException e) {
            System.out.println("interrupted");
        }
        for (Ball ball : balls) {
            ball.move();
        }
        repaint();
    }
}

public void move() {
    if(x + vx < 0 || x + diameter + vx > getWidth()) {
        vx *= -1;
    }
    if(y + vy < 0 || y + diameter + vy > getHeight()) {
        vy *= -1;
    }
    x += vx;
    y += vy;
}

private void start() {
    while(!isVisible()) {
        try {
            Thread.sleep(25);
        } catch(InterruptedException e) {
            System.exit(1);
        }
    }
    Thread thread = new Thread(this);
    thread.setPriority(Thread.NORM_PRIORITY);
    thread.start();
}

public static void main(String[] args) {
    Ball ball1 = new Ball("red",3,2);
    Ball ball2 = new Ball("blue",6,2);
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(ball1);
    f.getContentPane().add(ball2);
    f.setSize(400,400);
    f.setLocation(200,200);
    f.setVisible(true);
    ball1.start();
    ball2.start();
}
}

Dans ce code modifié :

  1. La liste des boules est utilisée pour stocker les instances de la classe Ball.
  2. La méthode paintComponent parcourt la liste des balles et dessine chaque balle sur le panneau.
  3. La méthode run parcourt également la liste des balles et se déplace chaque boule avant de repeindre le panneau.

Avantages de l'utilisation d'une liste :

  • Elle vous permet d'ajouter et de supprimer des boules de manière dynamique.
  • Vous pouvez facilement contrôler le nombre de balles dans l'application.
  • La liste gère les références à chaque balle, simplifiant gestion de la mémoire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn