1
private JPanel contentPane;
private KeyListener myKeyListener;
JLabel lblUp;
JLabel lblMiddle;
JLabel lblDown;
JButton btnStart;
JLabel lblScore;
int lblu = 0;
int x = 0;
int y = 50;
int u = 1;
int w = 1;
int rxx = 0;
int ryy = 0;
int s = 0;

Timer timer;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Game_1 frame = new Game_1();
                frame.setVisible(true);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */

public Game_1() {

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel lblScore = new JLabel("0");
    lblScore.setHorizontalAlignment(SwingConstants.CENTER);
    lblScore.setForeground(Color.GREEN);
    lblScore.setBounds(388, 0, 46, 14);
    contentPane.add(lblScore);

    addKeyListener(this);

}

public void keyPressed(KeyEvent arg0) {
    Graphics pen = this.contentPane.getGraphics();
    int maxh = contentPane.getHeight();
    int maxw = contentPane.getWidth();

    if(y < 0){
        y = maxh -50;
    }
    if(y > maxh-45){
        y = 0;
    }

    if (arg0.getKeyCode() == KeyEvent.VK_UP) {
        if(u ==0){
        pen.setColor(Color.BLACK);
        pen.fillRect(0, 0, maxw, maxh);

        y = y - 10;
        pen.setColor(Color.GREEN);
        pen.fillRect(x, y, 50, 50);
        pen.setColor(Color.BLACK);
        pen.fillRect(x - 50, y, 50, 50);
        x = x + 1;
        if (x >= maxw) {

            pen.fillRect(x - 30, y, 50, 50);
            x = 0;
        }
        }
    } else if (arg0.getKeyCode() == KeyEvent.VK_RIGHT) {
        if(u ==1){
            pen.setColor(Color.BLACK);
            pen.fillRect(0, 0, maxw, maxh);

            pen.setColor(Color.BLACK);
            pen.fillRect(0, 0, maxw, maxh);

            Timer timer = new Timer(100, this);
            timer.start();
            u = 0;

        }else if(u ==0){
            x = x +10;

        }
    } else if (arg0.getKeyCode() == KeyEvent.VK_DOWN) {
        if(u ==0){
        pen.setColor(Color.BLACK);
        pen.fillRect(0, 0, maxw, maxh);



        pen.setColor(Color.BLACK);

        y = y+ 10;
        if (x >= maxw) {

            pen.fillRect(x - 30, y, 50, 50);
            x = 0;
        }
        }

    }  else if (arg0.getKeyCode() == KeyEvent.VK_LEFT) {
        if(u ==0){
        pen.setColor(Color.BLACK);
        pen.fillRect(0, 0, maxw, maxh);



        pen.setColor(Color.BLACK);

        x = x- 10;
        if (x < 0) {

            pen.fillRect(x - 30, y, 50, 50);
            x = maxw;
        }
        }

    }
}

public void keyReleased(KeyEvent arg0) {

}

public void keyTyped(KeyEvent arg0) {

}

public void run() {

}

@Override
public void actionPerformed(ActionEvent arg0) {
    Graphics pen = this.contentPane.getGraphics();
    int maxh = contentPane.getHeight();
    int maxw = contentPane.getWidth();
    pen.setColor(Color.BLACK);
    pen.fillRect(0, 0, maxw, maxh);

    pen.setColor(Color.GREEN);
    pen.fillRect(x, y, 50, 50);
    pen.setColor(Color.BLACK);
    pen.fillRect(x - 50, y, 50, 50);
    x = x + 1;
    if (x >= maxw) {

        pen.fillRect(x - 30, y, 50, 50);
        x = 0;

    }
    if(w ==1){
        Random r = new Random();

        int ry = r.nextInt(maxh - 0) + 100;

        int rx = r.nextInt(maxw - 0) + 100;
        rxx = rx;
        ryy = ry;
        pen.setColor(Color.RED);
        pen.fillRect(rx, ry, 10, 10);
        w = 0;
    }
    pen.setColor(Color.RED);
    pen.fillRect(rxx, ryy, 10, 10);

if(x-50 <= rxx && x > rxx && y > ryy && y-50 <= ryy){
s ++;
System.out.println("PUNKT");
pen.setColor(Color.BLACK);
pen.fillRect(rxx, ryy, 10, 10);
w = 1;
}

}
}

here is the Problem: it only detects that they touch in the left top >corner(the wrong code is at the end, the last if)
you can start the game by pressing the Right arrow Button on you're Keyboard.Moving upwards: up Key on you're Keyboard.Moving downwards:down Key on your're Keyboard.The right Button also lets you move to the right, the left Button to the left.Picture of the Game

3
  • I want, that the Rect detects that it touches the other in every part of it, not only in the left top corner Commented Apr 30, 2016 at 11:57
  • Possible duplicate of stackoverflow.com/questions/335600/… Commented Apr 30, 2016 at 14:48
  • nope isnt the same Commented Apr 30, 2016 at 18:26

2 Answers 2

0

I want, that the Rect detects that it touches the other in every part of it, not only in the left top corner

Let's assume you've got first rect with: x1, y1, width1, height1 and second rect with x2, y2, width2, height2. The first rect touched the second in every part of it (so the second one is contained in the first one) when x1 <= x2 && x2+width2 <= x1+width2 && y1 <= y2 && y2+height <= y1+height so

if (x1 <= x2 && x2+width2 <= x1+width2 && y1 <= y2 && y2+height <= y1+height) {
    // the second rect is contained in the first rect
}
Sign up to request clarification or add additional context in comments.

1 Comment

also only detects in the left top corner
0

So I finally fixed it. For those who are interested, here is the fixed part of the code:

if (x+d >= x2 && x <= x2 && y+d >=y2 && y <= y2) {
s++;
d = d + s*10;
System.out.println("PUNKT");
pen.setColor(Color.BLACK);
pen.fillRect(x2, y2, 10, 10);
w = 1;
if (s == 10) {
JOptionPane.showMessageDialog(frame, "Achievement get: " + s + "Punkte!");
        }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.