By Ivy:

    } else if (keyCode == 32) { // blank (space) (38: up arrow key)

Then I add: 

    g.drawLine(200, 400, x, y); 

Next I want to launch the bullet. 

  public void move() {
    this.x += this.vx;  
    this.y += this.vy;  
  }

--

  double vx, vy;

--

    this.bullet.move(); 
    // System.out.println("World getting older."); 

--

      this.bullet.vx =   5 * Math.cos( Math.PI * this.launcher.angle / 180 ) ;
      this.bullet.vy = - 5 * Math.sin( Math.PI * this.launcher.angle / 180 ) ;

--

  public void shoot(Circle bullet) {
    bullet.vx =   5 * Math.cos( Math.PI * this.angle / 180 ) ;
    bullet.vy = - 5 * Math.sin( Math.PI * this.angle / 180 ) ;    
  }

--

      this.launcher.shoot(bullet); 

--

    BigBang game = new BigBang(30, new StageTwo()); 

--

    if (this.x < 0 || this.x > 400 || this.y < 0) { // I know about the world
      this.vx = 0; 
      this.vy = 0; 
    }

--

  StageTwo world; 
  public Circle(int x, int y, StageTwo world) {
     ... 
     this.world = world; 
  }

--

    this.bullet = new Circle(200, 400, this); 

--

      this.world.bullet = new Circle(200, 400, this.world); 

--

      this.world.circles.add(this);

--

    if (this.overlaps(this.world.circles)) {
      this.vx = 0; 
      this.vy = 0;
      this.world.circles.add(this); 
      this.world.bullet = new Circle(200, 400, this.world);        
    } else ... 

--
    ... 
    } else if (this.x < 0 || this.x > 400) {
      this.vx *= -1; // a bit dangerous do you see why?
    }
    // System.out.println("Yes, I am moving.");
  }

--

  public boolean overlaps(ArrayList<Circle> circles) {
    for (Circle c : circles) 
      if (this.radius + c.radius >= 
          (new Point(this.x, this.y)).distanceTo(new Point(c.x, c.y))) // c.overlaps(this)) 
        return true;
    return false;
  }

--

Now on to Stage Three (in lab).