Win a copy of Head First Android this week in the Android forum!
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
• Tim Cooke
• Campbell Ritchie
• Paul Clapham
• Ron McLeod
• Liutauras Vilda
Sheriffs:
• Jeanne Boyarsky
• Rob Spoor
• Bear Bibeault
Saloon Keepers:
• Jesse Silverman
• Tim Moores
• Stephan van Hulst
• Tim Holloway
• Carey Brown
Bartenders:
• Piet Souris
• Al Hobbs
• salvin francis

# Need help breaking up this code

Greenhorn
Posts: 9
• • Number of slices to send:
Optional 'thank-you' note:
• • I came across some source code for a tutorial, I'd like to try, but for some reason I can't get the code to run. Could some please tell what I'm doing to wrong to run it, or breaking it up?thanks. here is the code:
import java.awt.*;
import java.applet.*;
class Ball
{
//the boundaries of the window and the diameter of our ball
//we tell our balls the window size by constructor, so we can
//change the applet's size easily
int width, height;
static final int diameter=30;
//coordinates and value of increment
double x, y, xinc, yinc;
Color color;
Graphics g;
//the constructor
public Ball(int w, int h, int x, int y, double xinc, double yinc, Color c)
{
width=w;
height=h;
this.x=x;
this.y=y;
this.xinc=xinc;
this.yinc=yinc;
color=c;
}
public void move()
{
x+=xinc;
y+=yinc;
//when the ball bumps against a boundary, it bounces off
if(x<0 || x>width-diameter)
{
xinc=-xinc;
x+=xinc;
}
if(y<0 || y>height-diameter)
{
yinc=-yinc;
y+=yinc;
}
}
public void paint(Graphics gr)
{
g=gr;
g.setColor(color);
//the coordinates in fillOval have to be int, so we cast
//explicitly from double to int
g.fillOval((int)x,(int)y,diameter,diameter);
}
}
public class Project32 extends Applet implements Runnable
{
Image Buffer;
Graphics gBuffer;
Ball ball[];
//how many balls?
static final int MAX=5;
public void init()
{
Buffer=createImage(size().width,size().height);
gBuffer=Buffer.getGraphics();
ball=new Ball[MAX];
int w=size().width;
int h=size().height;
//our balls have different start coordinates, increment values
//(speed, direction) and colors
ball=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
}
public void start()
{
if (runner == null)
{
runner.start();
}
}
public void stop()
{
if (runner != null)
{
runner.stop();
runner = null;
}
}
public void run()
{
while(true)
{
//Thread sleeps for 15 milliseconds here
try {runner.sleep(15);}
catch (Exception e) { }
//move our balls around
for(int i=0;i<MAX;i++)
ball[i].move();
repaint();
}
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{
//draw a gray background and a grid of lines
gBuffer.setColor(Color.gray);
gBuffer.fillRect(0,0,size().width,size().height);
gBuffer.setColor(Color.lightGray);
for(int x=0;x<size().width;x+=50)
gBuffer.drawLine(x,0,x,size().height);
for(int y=0;y<size().height;y+=50)
gBuffer.drawLine(0,y,size().width,y);
//paint our balls
for(int i=0;i<MAX;i++)
ball[i].paint(gBuffer);
g.drawImage (Buffer,0,0, this);
}
}

author and iconoclast Posts: 24203
44   • • Number of slices to send:
Optional 'thank-you' note:
• • It's an applet; it has to be run by the "appletviewer" program or a Web browser. The following will work if you've got a JDK properly installed on your machine.
Put the code in a file Project32.java .
Type "javac Project32.java" at your command prompt.
Create an HTML file "Project32.html" with this one line in it:
<applet code="Project32.class" height=200 width=200></applet>
Type "appletviewer Project32.html" to run the program.

Michael Ossino
Greenhorn
Posts: 9
• • Number of slices to send:
Optional 'thank-you' note:
• • Thank you. But what about the first half of clode (ball class)? Di i put that code in the same file as project32 or as a seperate file called ball.java?

Ernest Friedman-Hill
author and iconoclast Posts: 24203
44   • • Number of slices to send:
Optional 'thank-you' note:
• • It all can go in the same file.

Michael Ossino
Greenhorn
Posts: 9
• • Number of slices to send:
Optional 'thank-you' note:
• • Thanks. I'm just tooling around with the file, and trying to increase the number of balls to 20, and adding in an even hanlder to add a new ball everytime the mouse is clicked, but it' won't go. I think I have the right idea, but it just won't compile. Here si the code I have so far:
import java.awt.*;
import java.applet.*;
class Ball
{
//the boundaries of the window and the diameter of our ball
//we tell our balls the window size by constructor, so we can
//change the applet's size easily
int width, height;
static final int diameter=30;
//coordinates and value of increment
double x, y, xinc, yinc;
Color color;
Graphics g;
//the constructor
public Ball(int w, int h, int x, int y, double xinc, double yinc, Color c)
{
width=w;
height=h;
this.x=x;
this.y=y;
this.xinc=xinc;
this.yinc=yinc;
color=c;
}
public void move()
{
x+=xinc;
y+=yinc;
//when the ball bumps against a boundary, it bounces off
if(x<0 || x>width-diameter)
{
xinc=-xinc;
x+=xinc;
}
if(y<0 || y>height-diameter)
{
yinc=-yinc;
y+=yinc;
}
}
public void paint(Graphics gr)
{
g=gr;
g.setColor(color);
//the coordinates in fillOval have to be int, so we cast
//explicitly from double to int
g.fillOval((int)x,(int)y,diameter,diameter);
}
}
public class Project32 extends Applet implements Runnable
{
Image Buffer;
Graphics gBuffer;
Ball ball[];
//how many balls?
static final int MAX=20;
public void mouseClicked()
{
Buffer=createImage(size().width,size().height);
gBuffer=Buffer.getGraphics();
ball=new Ball[MAX];
int w=size().width;
int h=size().height;
//our balls have different start coordinates, increment values
//(speed, direction) and colors
ball=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
ball=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
ball=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
ball=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);

}
public void start()
{
if (runner == null)
{
runner.start();
}
}
public void stop()
{
if (runner != null)
{
runner.stop();
runner = null;
}
}
public void run()
{
while(true)
{
//Thread sleeps for 15 milliseconds here
try {runner.sleep(15);}
catch (Exception e) { }
//move our balls around
for(int i=0;i<MAX;i++)
ball[i].move();
repaint();
}
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{
//draw a gray background and a grid of lines
gBuffer.setColor(Color.gray);
gBuffer.fillRect(0,0,size().width,size().height);
gBuffer.setColor(Color.lightGray);
for(int x=0;x<size().width;x+=50)
gBuffer.drawLine(x,0,x,size().height);
for(int y=0;y<size().height;y+=50)
gBuffer.drawLine(0,y,size().width,y);
//paint our balls
for(int i=0;i<MAX;i++)
ball[i].paint(gBuffer);
g.drawImage (Buffer,0,0, this);
}
}

Ranch Hand
Posts: 1535
• • Number of slices to send:
Optional 'thank-you' note:
• • You tried to change the init method in the Applet to mouseClicked. The compiler won't like this. The Applet uses init to put itself together, much like an application uses its constructor(s). To add a mouseClicked method to the applet you would have it implement the MouseListener interface and then add a new mouseClicked method:

In the code below I put the mouse code in a separate class. Consider Paul's rocket mass heater.
• 