Hiblah200
Hiblah200

Reputation: 27

if Statement not evaluating boolean correctly in Java?

I'm making a simple game where you move a ball on a screen and try to avoid other blocks on the screen.

The problem i'm having is that when I try to evaluate whether you are touching another block, my if statement always returns the first result no matter what my boolean equals. Here is the method where I evaluate the statement

public void actionPerformed(ActionEvent evt) {
                    //Move the ball
            myY = myY - 5;
                if(myY < 0){
                    myY = 0;
                }
                    //test if it is intersecting
            boolean sect = testIntersection(r, playa);
            System.out.println(sect);
                if(sect = true){
                                    cir = Color.BLACK;
                    System.out.println("Intersected");
                }else{
                    cir = Color.RED;
                }
            playa.setFrame(myX, myY, 30,30);
            repaint();
        }

Here is the section of code that sends the sect Boolean:

public static boolean testIntersection(Shape shapeA, Shape shapeB) {
       Area areaA = new Area(shapeA);

       areaA.intersect(new Area(shapeB));
       return !areaA.isEmpty();
    }

Here is the entire code:

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.Timer;
import java.lang.Object;

public class moving extends Canvas implements ActionListener{
Timer up = new Timer(10, this);
Timer down = new Timer(10, this);
Timer left = new Timer(10, this);
Timer right = new Timer(10, this);
int sected;
int myX = 400;
int myY = 400;
Ellipse2D playa = new Ellipse2D.Double(myX, myY, 30, 30);
Rectangle r = new Rectangle(20,33,20, 100);
boolean sect = testIntersection(r, playa);
Color cir = new Color(0,0,0);

public moving() {
    setSize(new Dimension(500, 500));
    final int width = getWidth();
    final int height = getHeight();
    up.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            myY = myY - 5;
                if(myY < 0){
                    myY = 0;
                }
            boolean sect = testIntersection(r, playa);
            System.out.println(sect);
                if(sect = true){
                    System.out.println("intersected!!!!!1");
                }else{
                    cir = Color.RED;
                }
            playa.setFrame(myX, myY, 30,30);
            repaint();
        }
    });
    down.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            myY = myY + 5;
            if(myY > height - 30){
                myY = height - 30;
            }
            boolean sect = testIntersection(r, playa);
            System.out.println(sect);
            if(sect = true){
                System.out.println("intersected");
            }else{
                cir = Color.RED;
            }
            playa.setFrame(myX, myY, 30,30);
            repaint();
        }
    });

    left.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            myX = myX - 5;
            if(myX < 0){
                myX = 0;
            }
            boolean sect = testIntersection(r, playa);
            System.out.println(sect);
            if(sect = true){
                System.out.println("intersected");
            }else{
                cir = Color.RED;
            }
            playa.setFrame(myX, myY, 30,30);
            repaint();
        }
    });
    right.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            myX = myX + 5;
            if(myX > width - 30){
                myX = width - 30;

            }
            boolean sect = testIntersection(r, playa);
            System.out.println(sect);
            if(sect = true){
                System.out.println("intersected");
            }else{
                cir = Color.RED;
            }
            playa.setFrame(myX, myY, 30,30);
            repaint();
        }
    });
    addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent evt) {
            moveIt(evt);
        }
        public void keyReleased(KeyEvent evt) {
            NomoveIt(evt);
        }
    });
}



public void moveIt(KeyEvent evt) {
 switch (evt.getKeyCode()) {
        case KeyEvent.VK_DOWN:
            down.start();
            break;
        case KeyEvent.VK_UP:
            up.start();
            break;
        case KeyEvent.VK_LEFT:
            left.start();
            break;
        case KeyEvent.VK_RIGHT:
            right.start();
            break;
    }

    repaint();
}

public void NomoveIt(KeyEvent evt) {
    switch (evt.getKeyCode()) {
           case KeyEvent.VK_DOWN:
               down.stop();
               break;
           case KeyEvent.VK_UP:
               up.stop();
               break;
           case KeyEvent.VK_LEFT:
               left.stop();
               break;
           case KeyEvent.VK_RIGHT:
               right.stop();
               break;
       }

       repaint();
   }

public static void main(String[] args) {
    JFrame frame = new JFrame("Basic Game");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    moving ex = new moving();
    frame.getContentPane().add(ex);
    frame.pack();
    frame.setResizable(false);
    frame.setVisible(true);
    ex.requestFocus();

}
public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;

    if(sect = true){
        g.setColor(cir);
    }else{
        g.setColor(cir);
    }

    g2.fill(playa);
    g.setColor(Color.black);
    g2.fill(r);
}

public static boolean testIntersection(Shape shapeA, Shape shapeB) {
       Area areaA = new Area(shapeA);

       areaA.intersect(new Area(shapeB));
       return !areaA.isEmpty();
    }

Please tell me what I am doing wrong here!!!

Thanks!

Upvotes: 0

Views: 776

Answers (2)

jlordo
jlordo

Reputation: 37813

You need

if (sect == true) {          // compares sect with true and checks the result

instead of

if (sect = true) {           // sets sect to true and then checks it

Even better would be to use

if (sect) {                 // checks sect

Upvotes: 5

Rohit Jain
Rohit Jain

Reputation: 213193

You are mistakenly assigning the true boolean literal to your variable in if block expression:

if(sect = true)

due to which, the expression is always evaluated to true. This is the reason why you should never compare boolean variables with true or false. Just using sect here would be enough.

Change it to:

if (sect)

Upvotes: 5

Related Questions