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

chrisi
  • 21
  • 5

2 Answers2

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
}
Marin Shalamanov
  • 736
  • 6
  • 17
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!");
        }
chrisi
  • 21
  • 5