Granny's Programming Pearls
"inside of every large program is a small program struggling to get out"
JavaRanch.com/granny.jsp
The moose likes Java in General and the fly likes Need help breaking up this code Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


JavaRanch » Java Forums » Java » Java in General
Bookmark "Need help breaking up this code" Watch "Need help breaking up this code" New topic
Author

Need help breaking up this code

Michael Ossino
Greenhorn

Joined: Dec 16, 2003
Posts: 9
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
{
Thread runner;
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[0]=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball[1]=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball[2]=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball[3]=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball[4]=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
}
public void start()
{
if (runner == null)
{
runner = new Thread (this);
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);
}
}
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24187
    
  34

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.


[Jess in Action][AskingGoodQuestions]
Michael Ossino
Greenhorn

Joined: Dec 16, 2003
Posts: 9
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
Marshal

Joined: Jul 08, 2003
Posts: 24187
    
  34

It all can go in the same file.
Michael Ossino
Greenhorn

Joined: Dec 16, 2003
Posts: 9
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
{
Thread runner;
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[0]=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball[1]=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball[2]=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball[3]=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball[4]=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
ball[5]=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball[6]=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball[7]=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball[8]=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball[9]=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
ball[10]=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball[11]=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball[12]=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball[13]=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball[14]=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
ball[15]=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball[16]=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball[17]=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball[18]=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball[19]=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);

}
public void start()
{
if (runner == null)
{
runner = new Thread (this);
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);
}
}
Craig Wood
Ranch Hand

Joined: Jan 14, 2004
Posts: 1535
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.
 
GeeCON Prague 2014
 
subject: Need help breaking up this code