CheckList:
Balloon class called rise() which is the reverse of drop()BalloonFall to use as a starter for a new class called BalloonRisepaintComponent() to “Balloon Rise”keyReleased so the new Balloon is near HEIGHT rather than 0.actionPerformed so the balloon rises rather than fallsactionPerformed so that it removes the balloon if balloons.get(i).getBottom() < 0 paintComponent() method to show the number of balloons: g.drawString(balloons.size()+“ Balloons”, WIDTH-100, 20);Challenges:
keyReleased method e.getKeyChar() returns the char typedBalloons drop (or rise) randomly and typing the keys “pops” (or removes) them?Balloon objects, have letters drop and have them removed when you type the letter? You can keep score and make it into a game.import java.awt.Color; import java.awt.Graphics; public class Balloon { private Color color; private int x,y,width,height, deltaY; public Balloon(int x, int y, int size) { this.x=x; this.y=y; this.width=size; this.height=size+randomInt(5,size); this.deltaY=randomInt(1, 5); int red=randomInt(0, 255); int green=randomInt(0, 255); int blue=randomInt(0, 255); this.color = new Color(red, green,blue); } public void draw(Graphics g){ g.setColor(color); g.fillOval(x, y, width, height); } public void drop(){ this.y+=deltaY; } public int getBottom() { return y+height; } public static int randomInt(int min, int max){ return min+(int)((max-min+1)*Math.random()); } }
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class BalloonFall extends JPanel implements KeyListener, ActionListener { public static int WIDTH=800; public static int HEIGHT=600; private Font titleFont, regularFont; private ArrayList<Balloon> balloons; private Timer timer; /** * The class constructor will initialize the ArrayList<Balloon> * and other object fields (variables), including a Timer * object from the javax.swing.* library. The timer will * generate an Action Event, so that something happens * in regular intervals without the user typing anything. */ public BalloonFall() { //initialize variables here... titleFont = new Font("Roman", Font.BOLD, 18); regularFont = new Font("Helvetica", Font.PLAIN, 12); balloons = new ArrayList<Balloon>(); timer = new Timer(10, this); timer.start(); } /** * the main method makes an instance of our application and puts it in a JFrame * that will end the application when it is closed. * */ public static void main(String[] args) { BalloonFall app= new BalloonFall(); JFrame window = new JFrame("Balloon Fall"); window.setSize(WIDTH, HEIGHT); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.getContentPane().add(app); window.addKeyListener(app); window.setVisible(true); } /** * This is the method to change what is drawn to the screen: */ public void paintComponent(Graphics g){ //super.paintComponent(g); g.setColor(Color.WHITE); g.fillRect(0, 0, getWidth(),getHeight()); g.setColor(Color.BLUE); g.setFont(titleFont); g.drawString("BalloonFall version 1.0", 20, 20); //g.drawString(balloons.size()+" Balloons", WIDTH-100, 20); g.setColor(Color.BLACK); g.setFont(regularFont); g.drawString("Press a Key to make a Balloon", 20, 40); for (Balloon x:balloons){ x.draw(g); } } /** * These 3 methods need to be declared to implement the KeyListener Interface * that listens for keys that are typed on the keyboard */ @Override public void keyTyped(KeyEvent e) {} @Override public void keyPressed(KeyEvent e) {} @Override public void keyReleased(KeyEvent e) { int size = Balloon.randomInt(50, 80); int x = Balloon.randomInt(0, WIDTH); int y = Balloon.randomInt(-size, 0); balloons.add(new Balloon(x,y,size)); repaint(); } @Override /** * This method is needed to implement the ActionListener that listens for the timer * e.getKeyChar () and e.getKeyCode () will return the char (or its code) */ public void actionPerformed ( ActionEvent e) { // timer made an action event, so int i = 0; while ( i < balloons.size() ) { balloons.get(i).drop(); // if ( balloons.get(i).getBottom() > HEIGHT ) { balloons.remove (i); }else{ i++; } } repaint (); } }