Java Bouncing Ball

前端 未结 4 1582
天涯浪人
天涯浪人 2020-11-22 04:57

I am trying to write a Java application which draws multiple balls on screen which bounce off of the edges of the frame. I can successfully draw one ball. However when I add

4条回答
  •  心在旅途
    2020-11-22 05:40

    package BouncingBallApp.src.copy;
    import java.awt.*;
    
    
    public class Ball {
        private Point location;
        private int radius;
        private Color color;
        private int dx, dy;
        //private Color[] ballArr;
    
        public Ball(Point l, int r, Color c){
            location = l;
            radius = r;
            color = c;
        }
    
        public Ball(Point l, int r){
            location = l;
            radius = r;
            color = Color.RED;
    
        }
    
        public Point getLocation() {
            return location;
        }
    
        public void setLocation(Point location) {
            this.location = location;
        }
    
        public int getRadius() {
            return radius;
        }
    
        public void setRadius(int radius) {
            this.radius = radius;
        }
    
        public Color getColor() {
            return color;
        }
    
        public void setColor(Color color) {
            this.color = color;
    
        }
    
        public void setMotion(int dx, int dy){
            this.dx = dx;
            this.dy = dy;
        }
    
        public void move(){
            location.translate(dx, dy);
        }
    
        public void moveTo(int x, int y){
            location.move(x, y);
        }
    
        public void paint (Graphics g) {
            g.setColor (color);
            g.fillOval (location.x-radius, location.y-radius, 2*radius, 2*radius);
        }
    
        public void reclectHoriz() {
            dy = -dy;       
        }   
    
        public void reclectVert() {
            dx = -dx;       
        }
    }
    
    
    
    
    
    
    
    package BouncingBallApp.src.copy;
    
    public class MyApp {
    
        public static void main(String[] args) {
            MyFrame frm = new MyFrame(10);
            frm.setVisible(true);           
    
            for (int i=0; i<1000; i++){
                frm.stepTheBall();
            }
        }
    }
    
    
    
    
    
    package BouncingBallApp.src.copy;
    
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.util.Random;
    
    import javax.swing.JFrame;
    
    
    public class MyFrame extends JFrame {
        public final int FRAMEWIDTH = 600;
        public final int FRAMEHEIGHT = 400;
    
        private Ball[] ballArr;
    
        private Random random =new Random ();
        private Color[] colors={Color.RED,Color.blue,Color.yellow}; 
        private int ballCnt;
    
        public MyFrame(int ballCnt){
            super();
            setSize(FRAMEWIDTH, FRAMEHEIGHT);
            setTitle("My Bouncing Ball Application");
    
            ballArr = new Ball[ballCnt];
            this.ballCnt = ballCnt;
             int c;
    
            for (int i=0; i < ballCnt; i++){
                int bcn =random.nextInt(colors.length);
                Color ballcolor=colors[bcn];
                ballArr[i] = new Ball(new Point(50,50),c=(int) (Math.random()*10+3)%8,ballcolor);
    
    
                int ddx = (int) (Math.random()*10+2)%8;
                int ddy = (int) (Math.random()*10+2)%8;         
                ballArr[i].setMotion(ddx, ddy); 
                //c++;
            }
        }
    
        public void paint(Graphics g){
            super.paint(g);
            for (int i=0; i < ballCnt; i++){
                ballArr[i].paint(g);    
            }
        }
    
        public void stepTheBall(){
            for (int i=0; i < ballCnt; i++){        
                ballArr[i].move();
    
                Point loc = ballArr[i].getLocation();
    
                if (loc.x < ballArr[i].getRadius() ||
                    loc.x > FRAMEWIDTH-ballArr[i].getRadius()){
                    ballArr[i].reclectVert();
                }
    
                if (loc.y < ballArr[i].getRadius() ||
                        loc.y > FRAMEHEIGHT-ballArr[i].getRadius()){
                    ballArr[i].reclectHoriz();
                }
            }   
            repaint();
            try {
                Thread.sleep(20);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
    }
    

提交回复
热议问题