Java Colliding Squares

Hi, i have to make a java program that has two squares that collide with each other but do not overlap.  As you can see i am using keylistenbers to make them move.  I just need some help on the logic of how to make them collide.  Thanks in advance.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
 
public class MovingBlock extends Applet
{
	private int x = 220;
	private int y = 220;
	private int x1 = 180;
	private int y1 = 220;
	private final int BLOCK_SIZE=30;
 
	public MovingBlock()
	{
		addKeyListener(new MyKeyHandlers());
		setFocusable(true);
	}
 
	public void paint(Graphics g)
	{
		g.setColor(Color.gray);
		g.fillRect(20, 20, 400, 400); //X:20-420; Y:20-420
		g.setColor(Color.red);
		g.fillRect(x, y, BLOCK_SIZE, BLOCK_SIZE);
		g.setColor(Color.blue);
		g.fillRect(x1, y1, BLOCK_SIZE, BLOCK_SIZE);
	}
 
	//Private class for handlers that handle keys
	private class MyKeyHandlers implements KeyListener
    {
    	public void keyPressed(KeyEvent e)
		{
			final int BOUNDARY1 = 25; //Left & top boundaries to move block
			final int BOUNDARY2 = 415;//Right & bottom boundaries to move block
			int box1toprightx = x + 30
			int box1bottomrighty= y + 30
			int box1bottomlefty = 
 
			switch (e.getKeyCode())
			{
				case KeyEvent.VK_LEFT: 	if ((x >= BOUNDARY1) x = x - 5;
										break;
				case KeyEvent.VK_RIGHT: if (x + BLOCK_SIZE <= BOUNDARY2) x = x + 5;
										break;
				case KeyEvent.VK_DOWN: 	if (y + BLOCK_SIZE <= BOUNDARY2) y = y + 5;
										break;
				case KeyEvent.VK_UP: if (y >= BOUNDARY1) y = y - 5;
			}
			switch (e.getKeyCode())
			{
				case KeyEvent.VK_A: 	if (x >= BOUNDARY1) x = x - 5;
										break;
				case KeyEvent.VK_D: if (x + BLOCK_SIZE <= BOUNDARY2) x = x + 5;
										break;
				case KeyEvent.VK_S: 	if (y + BLOCK_SIZE <= BOUNDARY2) y = y + 5;
										break;
				case KeyEvent.VK_W: if (y >= BOUNDARY1) y = y - 5;
			}
 
			repaint();
		}
 
		public void keyTyped ( KeyEvent e )   {}
   	 	public void keyReleased ( KeyEvent e )   {}
	}
 
}

Open in new window

kshiue18Asked:
Who is Participating?
 
Thomas4019Connect With a Mentor Commented:
If you can use it, the java class Rectangle, provides some really easy methods for determing collisions between rectangles.
0
 
blackfrancis75Commented:
Definitely should use the Rectangle from the 2D awt package.  Try this modified example:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
 
public class MovingBlock extends Applet
{
   Image Buffer;
   Graphics gBuffer;
   int x, y;
   boolean mouseInside, collide;
        Rectangle r1, r2;

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

             //create 2 rectangle objects
             r1=new Rectangle(110,115,60,50);
             //we don't know the coordinates yet, so we create it
             //with a different constructor, passing only the size
             r2=new Rectangle(40,40);
        }

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

             gBuffer.setColor(Color.red);
             gBuffer.fillRect(r1.x, r1.y, r1.width, r1.height);

             gBuffer.setColor(Color.blue);

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

             if(mouseInside)
                   gBuffer.fillRect(r2.x, r2.y, r2.width, r2.height);
              else
                   gBuffer.drawString("Move the mouse around!", 10, 20);

              gBuffer.setColor(Color.black);

              if(collide)
                   gBuffer.drawString("Collision!", 10, 20);
        }

        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;

             //move the blue square according to mouse position
             //we use the Rectangle method "move" here
             r2.move(x-r2.width/2, y-r2.height/2);

             //check for collision here, use the "intersects" method
             //of the Rectangle class
             collide=r1.intersects(r2);

             drawStuff();

             repaint();
             return true;
        }

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

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

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.