Win a copy of Think Java: How to Think Like a Computer Scientist this week in the Java in General forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Need help breaking up this code

 
Michael Ossino
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
Pie
Posts: 24211
35
Chrome Eclipse IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
Pie
Posts: 24211
35
Chrome Eclipse IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
It all can go in the same file.
 
Michael Ossino
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
Pie
Posts: 1535
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic