У меня возникла проблема при столкновении двух прямоугольников [closed]

Я хочу сделать игру Breakout на Java, но у меня возникла проблема с коллизией. Я еще не закончил код кирпичей. Поэтому я написал тот же код, что и в Youtube, но столкновение между мячом и ракеткой происходит с ошибками и не работает.

Main Class

package poorgame;

public class PoorGame {

    public static void main(String[] args) {
        Frame frame = new Frame();
    }
    
}

Frame Class

package poorgame;

import java.awt.*;
import javax.swing.*;


public class Frame extends JFrame{
    
    Panel panel;
    JPanel pan;
    
    
    Frame(){
        panel = new Panel();
        this.add(panel);
        this.setBackground(Color.black);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
        this.setVisible(true);
        this.setLocationRelativeTo(null);
    }
}

Panel Class

package poorgame;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class Panel extends JPanel implements Runnable {


    static final int HI = 700;
    static final int WID = 700;
    static final int BRICKS_W = 130;
    static final int BRICKS_H = 30;
    static final int PADDLE_W = 150;
    static final int PADDLE_H = 25;
    static final int BALL = 20;
    Ball ball;
    Paddle paddle;
    Bricks bricks;
    Thread game;
    Image image;
    Graphics graphics;
    Random random;

    Panel() {
        newBricks();
        newPaddle();
        newBall();
        pause = new Pause();
        finish = new Finish();

        this.setFocusable(true);
        this.addKeyListener(new MyKey());
        this.setPreferredSize(new Dimension(HI, WID));

        game = new Thread(this);
        game.start();
    }

    public void newBricks() {
        bricks = new Bricks(20,70,BRICKS_H,BRICKS_W);
    }

    public void newBall() {
        ball = new Ball((WID/2)-(BALL/2),(HI/2)-(BALL/2),BALL,BALL);
    }

    public void newPaddle() {
        paddle = new Paddle(285,570,PADDLE_H,PADDLE_W);
    }

    public void paint(Graphics g) {
        image = createImage(getWidth(), getHeight());
        graphics = image.getGraphics();
        draw(graphics);
        g.drawImage(image, 0, 0, this);
    }

    public void draw(Graphics g) {
        paddle.draw(g);
        bricks.draw(g);
        ball.draw(g);
    }

    public void move() {
        paddle.move();
        ball.move();
    }

    public void check() {
        
        if(ball.x <=0)
            ball.setX(-ball.ballX);
        if(ball.x >=WID-BALL)
            ball.setX(-ball.ballX);
        
        if(ball.intersects(paddle)){
            ball.ballY *= -1;
            ball.setY(ball.ballY);}
        
            
        
        if(paddle.x<=0)
            paddle.x =0;
        if(paddle.x>=HI-PADDLE_W)
            paddle.x =HI-PADDLE_W;
    }
    
    public void crash(){
        
    }

    @Override
    public void run() {
        long lastTime = System.nanoTime();
        double amountOfTicks = 60.0;
        double ns = 1000000000 / amountOfTicks;
        double delta = 0;
        while (true) {
            long now = System.nanoTime();
            delta += (now - lastTime) / ns;
            lastTime = now;
            if (delta >= 1) {
                move();
                check();
                crash();
                repaint();
                delta--;
            }
        }
    }

    public class MyKey extends KeyAdapter {

        @Override
        public void keyPressed(KeyEvent e) {
            paddle.keyPressed(e);
        }
        @Override
        public void keyReleased(KeyEvent e) {
            paddle.keyReleased(e);
        }
    }
}

Bricks Class

package poorgame;

import java.awt.*;

public class Bricks {

    Rectangle rect[] = new Rectangle[25];
    
    Bricks(int x, int y, int h, int w) {
        for (int i = 0; i < rect.length; i++) {
            if ((i % 5 == 0) && (i != 0)) {
                y += 40;
                x = 20;
                rect[i] = new Rectangle(x,y,h,w);
            }
            rect[i] = new Rectangle(x,y,h,w);
            x += 135;
            

        }
        x = 20;
        y = 70;

    }

    public void draw(Graphics g) {
        g.setColor(new Color(rect[0].width,rect[0].y,rect[9].height));
        for (int i = 0; i < rect.length; i++) {
            if ((i % 5 == 0) && (i != 0)) {
                rect[0].y += 40;
                rect[0].x = 20;
                g.setColor(new Color(rect[i].width,rect[i].y,rect[i].height));
                g.fillRect(rect[0].x, rect[0].y, rect[i].height, rect[i].width);
            }
            g.fillRect(rect[0].x, rect[0].y, rect[i].height, rect[i].width);
            rect[0].x += 135;

        }
        rect[0].x = 20;
        rect[0].y = 70;
    }
    
    public void crash(){
        
    }

}

Paddle Class

package poorgame;

import java.awt.*;
import java.awt.event.*;

public class Paddle extends Rectangle {

    int paddleX;
    int movin = 5;

    Paddle(int x, int y, int h, int w) {
        super(x, y, h, w);
    }

    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            setX(-movin);
            move();
        }
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            setX(movin);
            move();
        }
    }

    public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            setX(0);
            move();
        }
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            setX(0);
            move();
        }
    }

    public void setX(int X) {
        paddleX = X;
    }

    public void move() {
        x += paddleX;
    }

    public void draw(Graphics g) {
        g.setColor(Color.red);
        g.fillRect(x, y, height, width);
    }
}

Ball Class


package poorgame;

import java.awt.*;
import java.util.*;


public class Ball extends Rectangle{
 
    Random random;
    int ballX;
    int ballY;
    int speed =2;
    
    Ball(int x, int y, int h, int w){
        super(x,y,h,w);
        random = new Random();
        int randomX = random.nextInt(2);
        if(randomX==0)
            randomX--;
        setX(randomX*speed);
        
        int randomY = 1;
//        
        setY(randomY*speed);
    }
    
    public void setX(int randomX){
        ballX = randomX;
    }
    
    public void setY(int randomY){
        ballY = randomY;
        
    }
    
    public void move(){
        x +=ballX;
        y += ballY;
    }
    
    public void draw(Graphics g){
        g.setColor(Color.white);
        g.fillOval(x, y, height,width);
    }
    
}

```

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *