Re: Bounce off
On Mar 30, 2:42 pm, "Max" <max.di...@gmail.com> wrote:
I am trying to have a bouncing ball that (as you can probably tell
from the name), bounces off of the walls. I only want the top and
bottom walls to bounce, but the code I am using does not work.
[snip]
Bellow follows a complete working example with model, view and
controller components.
Pay attention to the OO design implemented.
If I may, I would also suggest a very good book to begin with: D.
Schmidt, Programming principles in Java -- architectures and
interfaces, which can be obtained for free at the following site:
http://www.cis.ksu.edu/santos/schmidt/ppj
Regards,
Faton Berisha
public class MovingBall
{ private int xPos;
private int yPos;
private int radius;
private int xVelocity = 5;
private int yVelocity = 2;
private Box container;
public MovingBall(int xInit, int yInit, int r, Box box)
{ xPos = xInit;
yPos = yInit;
radius = r;
container = box;
}
public int xPosition()
{ return xPos; }
public int yPosition()
{ return yPos; }
public int radiusOf()
{ return radius; }
public void move()
{ xPos = xPos + xVelocity;
if ( container.inHorizontalContact(xPos) )
{ xVelocity = -xVelocity; }
yPos = yPos + yVelocity;
if ( container.inVerticalContact(yPos) )
{ yVelocity = -yVelocity; }
}
}
public class Box
{ private int boxSize;
public Box(int size)
{ boxSize = size; }
public boolean inHorizontalContact(int xPosition)
{ return xPosition <= 0 || xPosition >= boxSize; }
public boolean inVerticalContact(int yPosition)
{ return yPosition <= 0 || yPosition >= boxSize; }
public int sizeOf()
{ return boxSize; }
}
import java.awt.*;
public class BallWriter
{ private MovingBall ball;
private Color color;
public BallWriter(MovingBall b, Color c)
{ ball = b;
color = c;
}
public void paint(Graphics g)
{ g.setColor(color);
int radius = ball.radiusOf();
g.fillOval(ball.xPosition() - radius,
ball.yPosition() - radius, 2 * radius, 2 * radius);
}
}
import java.awt.*;
public class BoxWriter
{ private Box box;
public BoxWriter(Box b)
{ box = b; }
public void paint(Graphics g)
{ int size = box.sizeOf();
g.setColor(Color.white);
g.fillRect(0, 0, size, size);
g.setColor(Color.black);
g.drawRect(0, 0, size, size);
}
}
import javax.swing.*;
import java.awt.*;
public class AnimationWriter extends JPanel
{ private BoxWriter boxWriter;
private BallWriter ballWriter;
public AnimationWriter(BoxWriter bx, BallWriter bl, int size)
{ boxWriter = bx;
ballWriter = bl;
JFrame f = new JFrame();
f.getContentPane().add(this);
f.setTitle("Topi k=EBrcyes");
f.setSize(size, size);
f.setVisible(true);
}
public void paintComponent(Graphics g)
{ boxWriter.paint(g);
ballWriter.paint(g);
}
}
public class BounceController
{ private MovingBall ball;
private AnimationWriter writer;
public BounceController(MovingBall b, AnimationWriter w)
{ ball = b;
writer = w;
}
public void runAnimation()
{ while ( true )
{ delay(20);
ball.move();
writer.repaint();
}
}
private void delay(int milisecs)
{ try { Thread.sleep(milisecs); }
catch (InterruptedException e) { }
}
}
import java.awt.*;
public class TestBouncingBall
{ public static void main(String[] args)
{ int boxSize = 200;
int ballRadius = 6;
Box box = new Box(boxSize);
MovingBall ball = new MovingBall(boxSize / 3, boxSize / 5,
ballRadius, box);
BallWriter ballWriter = new BallWriter(ball, Color.red);
BoxWriter boxWriter = new BoxWriter(box);
AnimationWriter writer = new AnimationWriter(boxWriter,
ballWriter, boxSize);
new BounceController(ball, writer).runAnimation();
}
}