Tutorials : Java by Example : Section 6 :
Section Six Contents
Using Mousemove and Mousedrag
Keyboard Commands and Playing Sound
Detecting Collisions and Intersections
A Bouncing Balls Applet

Input Devices

Detecting Collisions and Intersections

To compute the distance between two points (for example in order to tell the score in a shooting game), you have to follow a different approach. A simple linear comparison between the x- and y-coordinates of two points will fail, when the two points are not aligned vertically or horizontally. We use the Theorem of Pythagoras here: Squareroot of((x1-x2)2*(y1-y2)2). That way we can tell exactly, which distance lies between two given points, regardless of their orientation on the screen. We use the Point class here, which is only a simple encapsulation for two variables, representing the x and y coordinates of a given point. To tell when the two circles collide, you just have to take the diameters into account:

//Sourcecode

import java.awt.*;
import java.applet.*;

public class Project36 extends Applet
{
        Image Buffer;
        Graphics gBuffer;
        int x, y, dist;
        boolean mouseInside;
        //middle points of the two circles
        Point p1, p2;

        public void init()
        {
                Buffer=createImage(size().width,size().height);
                gBuffer=Buffer.getGraphics();

                //center of red circle
                p1=new Point(150,150);
                //center of blue circle
                p2=new Point(0,0);
        }

        public void drawStuff()
        {
               gBuffer.setColor(Color.white);
               gBuffer.fillRect(0,0,size().width,size().height);

               gBuffer.setColor(Color.red);
               gBuffer.fillOval(p1.x-20,p1.y-20,40,40);

               gBuffer.setFont(new Font("Helvetica",Font.BOLD,16));
               gBuffer.setColor(Color.blue);

               if(mouseInside)
                     gBuffer.fillOval(p2.x-20,p2.y-20,40,40);
               else
                     gBuffer.drawString("Move the mouse around!", 10, 20);

               if(mouseInside)
               {
                     if(dist<=40)
                     {
                            gBuffer.setColor(Color.red);
                            gBuffer.drawString("Collision!", 10, 20);
                     }

                     gBuffer.setColor(Color.black);
                     gBuffer.drawString("Distance: "+dist, 10, 40);
               }
        }

        public boolean mouseEnter(Event evt,int x,int y)
        {
               mouseInside=true;
               repaint();

               return true;
        }

        public boolean mouseExit(Event evt,int x,int y)
        {
               mouseInside=false;
               repaint();

               return true;
        }

        public boolean mouseMove(Event evt,int x,int y)
        {
               //submit the mouse coordinates to our instance variables
               this.x=x;
               this.y=y;

               p2.move(x,y);

               //calculate the distance of the centers (Theorem of Pythagoras)
               dist=(int)Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));

               drawStuff();

               repaint();
               return true;
        }

        public void update(Graphics g)
        {
               paint(g);
        }

        public void paint(Graphics g)
        {
               drawStuff();
               g.drawImage (Buffer,0,0, this);
        }
}

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.