1 / 12

MultiBallWorld - Creating a Ball World with Multiple Objects

Learn how to create a Ball World with multiple objects using the Ball class and arrays in Java.

ldana
Download Presentation

MultiBallWorld - Creating a Ball World with Multiple Objects

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MultiBallWorld.java A structured walkthrough Part 4: Multiple objects

  2. BallWorld import java.awt.*; public class Ball { protected Rectangle location; protected double dx, dy; protected Color color; public Ball (int x, int y, int r) { location = new Rectangle(x-r, y-r, 2*r, 2*r); dx = 0; dy = 0; color = Color.blue; } public void setColor (Color newColor) { color = newColor; } public void setMotion (double ndx, double ndy) { dx = ndx; dy = ndy; } public int radius () { return location.width / 2; } public int x () { return location.x + radius(); } public int y () { return location.y + radius(); } public double xMotion (){ return dx; } public double yMotion (){ return dy; } public Rectangle region () { return location; } public void moveTo (int x, int y) / { location.setLocation(x, y); } public void move () { location.translate ((int) dx, (int) dy); } public void paint (Graphics g) { g.setColor (color); g.fillOval (location.x, location.y, location.width, location.height); }} How is BallWorld using the Ball class? import java.awt.*; import java.awt.event.*; public class BallWorld extends Frame { public static void main (String [ ] args) { BallWorld world = new BallWorld (Color.red); world.show (); } private static final int FrameWidth = 600; private static final int FrameHeight = 400; private Ball aBall; private int counter = 0; private BallWorld (Color ballColor) { setSize (FrameWidth, FrameHeight); setTitle ("Ball World"); // initialize object data field aBall = new Ball (10, 15, 5); aBall.setColor (ballColor); aBall.setMotion (3.0, 6.0); } public void paint (Graphics g) { // first, draw the ball aBall.paint (g); // then move it slightly aBall.move(); if ((aBall.x() < 0) || (aBall.x() > FrameWidth)) aBall.setMotion (-aBall.xMotion(), aBall.yMotion()); if ((aBall.y() < 0) || (aBall.y() > FrameHeight)) aBall.setMotion (aBall.xMotion(), -aBall.yMotion()); // finally, redraw the frame counter = counter + 1; if (counter < 2000) repaint(); else System.exit(0); } } Recap

  3. Compiling Why only one ball? Running

  4. import java.awt.*; import java.awt.event.*; public class MultiBallWorld extends Frame { public static void main (String [ ] args) { MultiBallWorld world = new MultiBallWorld (Color.red); world.show (); } private static final int FrameWidth = 600; private static final int FrameHeight = 400; private Ball [ ] ballArray; private static final int BallArraySize = 6; private int counter = 0; private MultiBallWorld (Color ballColor) { // constructor for new ball world // resize our frame setSize (FrameWidth, FrameHeight); setTitle ("Ball World"); // initialize object data field ballArray = new Ball [ BallArraySize ]; for (int i = 0; i < BallArraySize; i++) { ballArray[i] = new Ball(10, 15, 5); ballArray[i].setColor (ballColor); ballArray[i].setMotion (3.0+i, 6.0-i); } } public void paint (Graphics g) { for (int i = 0; i < BallArraySize; i++) { ballArray[i].paint (g); // then move it slightly ballArray[i].move(); if ((ballArray[i].x() < 0) || (ballArray[i].x() > FrameWidth)) ballArray[i].setMotion (-ballArray[i].xMotion(), ballArray[i].yMotion()); if ((ballArray[i].y() < 0) || (ballArray[i].y() > FrameHeight)) ballArray[i].setMotion (ballArray[i].xMotion(), -ballArray[i].yMotion()); } // finally, redraw the frame counter = counter + 1; if (counter < 2000) repaint(); else System.exit(0); } } Only a name change from BallWorld.java

  5. import java.awt.*; import java.awt.event.*; public class MultiBallWorld extends Frame { public static void main (String [ ] args) { MultiBallWorld world = new MultiBallWorld (Color.red); world.show (); } private static final int FrameWidth = 600; private static final int FrameHeight = 400; private Ball [ ] ballArray; private static final int BallArraySize = 6; private int counter = 0; private MultiBallWorld (Color ballColor) { // constructor for new ball world // resize our frame setSize (FrameWidth, FrameHeight); setTitle ("Ball World"); // initialize object data field ballArray = new Ball [ BallArraySize ]; for (int i = 0; i < BallArraySize; i++) { ballArray[i] = new Ball(10, 15, 5); ballArray[i].setColor (ballColor); ballArray[i].setMotion (3.0+i, 6.0-i); } } public void paint (Graphics g) { for (int i = 0; i < BallArraySize; i++) { ballArray[i].paint (g); // then move it slightly ballArray[i].move(); if ((ballArray[i].x() < 0) || (ballArray[i].x() > FrameWidth)) ballArray[i].setMotion (-ballArray[i].xMotion(), ballArray[i].yMotion()); if ((ballArray[i].y() < 0) || (ballArray[i].y() > FrameHeight)) ballArray[i].setMotion (ballArray[i].xMotion(), -ballArray[i].yMotion()); } // finally, redraw the frame counter = counter + 1; if (counter < 2000) repaint(); else System.exit(0); } } Definition of an array The new frame (BallWorld)

  6. import java.awt.*; import java.awt.event.*; public class MultiBallWorld extends Frame { public static void main (String [ ] args) { MultiBallWorld world = new MultiBallWorld (Color.red); world.show (); } private static final int FrameWidth = 600; private static final int FrameHeight = 400; private Ball [ ] ballArray; private static final int BallArraySize = 6; private int counter = 0; private MultiBallWorld (Color ballColor) { // constructor for new ball world // resize our frame setSize (FrameWidth, FrameHeight); setTitle ("Ball World"); // initialize object data field ballArray = new Ball [ BallArraySize ]; for (int i = 0; i < BallArraySize; i++) { ballArray[i] = new Ball(10, 15, 5); ballArray[i].setColor (ballColor); ballArray[i].setMotion (3.0+i, 6.0-i); } } public void paint (Graphics g) { for (int i = 0; i < BallArraySize; i++) { ballArray[i].paint (g); // then move it slightly ballArray[i].move(); if ((ballArray[i].x() < 0) || (ballArray[i].x() > FrameWidth)) ballArray[i].setMotion (-ballArray[i].xMotion(), ballArray[i].yMotion()); if ((ballArray[i].y() < 0) || (ballArray[i].y() > FrameHeight)) ballArray[i].setMotion (ballArray[i].xMotion(), -ballArray[i].yMotion()); } // finally, redraw the frame counter = counter + 1; if (counter < 2000) repaint(); else System.exit(0); } } Creating a ball array Creating a loop that will run 6 times Constructor for the ball in the loop Setting properties for the ball in the loop

  7. import java.awt.*; import java.awt.event.*; public class MultiBallWorld extends Frame { public static void main (String [ ] args) { MultiBallWorld world = new MultiBallWorld (Color.red); world.show (); } private static final int FrameWidth = 600; private static final int FrameHeight = 400; private Ball [ ] ballArray; private static final int BallArraySize = 6; private int counter = 0; private MultiBallWorld (Color ballColor) { // constructor for new ball world // resize our frame setSize (FrameWidth, FrameHeight); setTitle ("Ball World"); // initialize object data field ballArray = new Ball [ BallArraySize ]; for (int i = 0; i < BallArraySize; i++) { ballArray[i] = new Ball(10, 15, 5); ballArray[i].setColor (ballColor); ballArray[i].setMotion (3.0+i, 6.0-i); } } public void paint (Graphics g) { for (int i = 0; i < BallArraySize; i++) { ballArray[i].paint (g); // then move it slightly ballArray[i].move(); if ((ballArray[i].x() < 0) || (ballArray[i].x() > FrameWidth)) ballArray[i].setMotion (-ballArray[i].xMotion(), ballArray[i].yMotion()); if ((ballArray[i].y() < 0) || (ballArray[i].y() > FrameHeight)) ballArray[i].setMotion (ballArray[i].xMotion(), -ballArray[i].yMotion()); } // finally, redraw the frame counter = counter + 1; if (counter < 2000) repaint(); else System.exit(0); } } Calling the grahics from the ball class Creating a loop Paint the ball in the loop (function inherited from ball.class) Move the ball in the loop (function inherited from ball.class)

  8. import java.awt.*; import java.awt.event.*; public class MultiBallWorld extends Frame { public static void main (String [ ] args) { MultiBallWorld world = new MultiBallWorld (Color.red); world.show (); } private static final int FrameWidth = 600; private static final int FrameHeight = 400; private Ball [ ] ballArray; private static final int BallArraySize = 6; private int counter = 0; private MultiBallWorld (Color ballColor) { // constructor for new ball world // resize our frame setSize (FrameWidth, FrameHeight); setTitle ("Ball World"); // initialize object data field ballArray = new Ball [ BallArraySize ]; for (int i = 0; i < BallArraySize; i++) { ballArray[i] = new Ball(10, 15, 5); ballArray[i].setColor (ballColor); ballArray[i].setMotion (3.0+i, 6.0-i); } } public void paint (Graphics g) { for (int i = 0; i < BallArraySize; i++) { ballArray[i].paint (g); // then move it slightly ballArray[i].move(); if ((ballArray[i].x() < 0) || (ballArray[i].x() > FrameWidth)) ballArray[i].setMotion (-ballArray[i].xMotion(), ballArray[i].yMotion()); if ((ballArray[i].y() < 0) || (ballArray[i].y() > FrameHeight)) ballArray[i].setMotion (ballArray[i].xMotion(), -ballArray[i].yMotion()); } // finally, redraw the frame counter = counter + 1; if (counter < 2000) repaint(); else System.exit(0); } } Thesting the ball in the array if it is at the end of the frame in x,y direction. If so, move it in opposite x,y direction (logic is unchanged from BallWorld)

  9. import java.awt.*; import java.awt.event.*; public class MultiBallWorld extends Frame { public static void main (String [ ] args) { MultiBallWorld world = new MultiBallWorld (Color.red); world.show (); } private static final int FrameWidth = 600; private static final int FrameHeight = 400; private Ball [ ] ballArray; private static final int BallArraySize = 6; private int counter = 0; private MultiBallWorld (Color ballColor) { // constructor for new ball world // resize our frame setSize (FrameWidth, FrameHeight); setTitle ("Ball World"); // initialize object data field ballArray = new Ball [ BallArraySize ]; for (int i = 0; i < BallArraySize; i++) { ballArray[i] = new Ball(10, 15, 5); ballArray[i].setColor (ballColor); ballArray[i].setMotion (3.0+i, 6.0-i); } } public void paint (Graphics g) { for (int i = 0; i < BallArraySize; i++) { ballArray[i].paint (g); // then move it slightly ballArray[i].move(); if ((ballArray[i].x() < 0) || (ballArray[i].x() > FrameWidth)) ballArray[i].setMotion (-ballArray[i].xMotion(), ballArray[i].yMotion()); if ((ballArray[i].y() < 0) || (ballArray[i].y() > FrameHeight)) ballArray[i].setMotion (ballArray[i].xMotion(), -ballArray[i].yMotion()); } // finally, redraw the frame counter = counter + 1; if (counter < 2000) repaint(); else System.exit(0); } } Drawing the six balls 2000 times

  10. Ballworld (single) import java.awt.*; import java.awt.event.*; public class MultiBallWorld extends Frame { public static void main (String [ ] args) { MultiBallWorld world = new MultiBallWorld (Color.red); world.show (); } private static final int FrameWidth = 600; private static final int FrameHeight = 400; private Ball [ ] ballArray; private static final int BallArraySize = 6; private int counter = 0; private MultiBallWorld (Color ballColor) { // constructor for new ball world // resize our frame setSize (FrameWidth, FrameHeight); setTitle ("Ball World"); // initialize object data field ballArray = new Ball [ BallArraySize ]; for (int i = 0; i < BallArraySize; i++) { ballArray[i] = new Ball(10, 15, 5); ballArray[i].setColor (ballColor); ballArray[i].setMotion (3.0+i, 6.0-i); } } public void paint (Graphics g) { for (int i = 0; i < BallArraySize; i++) { ballArray[i].paint (g); // then move it slightly ballArray[i].move(); if ((ballArray[i].x() < 0) || (ballArray[i].x() > FrameWidth)) ballArray[i].setMotion (-ballArray[i].xMotion(), ballArray[i].yMotion()); if ((ballArray[i].y() < 0) || (ballArray[i].y() > FrameHeight)) ballArray[i].setMotion (ballArray[i].xMotion(), -ballArray[i].yMotion()); } // finally, redraw the frame counter = counter + 1; if (counter < 2000) repaint(); else System.exit(0); } }

  11. Next we will work on extending MultiBall World To do:Study the presentations on Ball and MultiBallWorld. They are integral parts of what you will be working on for the next couple of weeks.

More Related