Java 块冲突代码故障排除

Java 块冲突代码故障排除,java,Java,我正在完成一项编码任务,这项任务要求我设置一组运动中的块,从窗口和其他块上弹下来,但不幸的是,我完全不知道下一步该去哪里。任何帮助都将不胜感激(仍然掌握着编码的诀窍,所以我正在寻找所有可能的帮助)。具体来说,我需要先显示矩形,然后对移动进行故障排除,最后帮助进行碰撞检测 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Driver implements ActionListener {

我正在完成一项编码任务,这项任务要求我设置一组运动中的块,从窗口和其他块上弹下来,但不幸的是,我完全不知道下一步该去哪里。任何帮助都将不胜感激(仍然掌握着编码的诀窍,所以我正在寻找所有可能的帮助)。具体来说,我需要先显示矩形,然后对移动进行故障排除,最后帮助进行碰撞检测

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

public class Driver implements ActionListener
{
    private JFrame window;
    private Timer timer;
    private ChaseBlock[] blocks = new ChaseBlock[15];
    // constants for graphics
    private final int windowSize = 500;
    private final int blockSize = 20;
    /**
     * Simple initiating main().
     *
     * @param args Not used.
     */
    public static void main( String[] args )
    {
        Driver d = new Driver();
        d.createWindow();
    }

    /**
     * Set up the basic graphical objects.
     */
    private void createWindow()
    {
        // create the window
        window = new JFrame( "The Great Chase" );
        window.setVisible( true );
        window.setLayout( null );
        window.getContentPane().setBackground( Color.white );
        window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        window.setLocation( 50, 50 );
        window.setSize(
                       windowSize + window.getInsets().left + window.getInsets().right,
                       windowSize + window.getInsets().top + window.getInsets().bottom );
        window.setResizable( false );
        window.repaint();

        timer = new Timer(10, this);
        timer.start();
        blocks[1].setBackground(Color.blue);
        window.repaint();
        addBlocks();


    }

    private void addBlocks() {
        for (int i = 0; i < blocks.length; i++) {
            int x = i * blockSize + 10 * (i +1);
            blocks[i] = new ChaseBlock(x, windowSize / x - blockSize / 2, blockSize, windowSize);
        }
        for (int i = 0; i < blocks.length; i++) {
            window.add(blocks[i]);

        }
    }

    private void animate() {
        for (int i = 0; i < blocks.length; i++) {
            blocks[i].move();

            for (int b1 = 0; b1 < blocks.length; b1++)
                for (int b2 = 0; b2 < blocks.length; b2++)
                    if (b1 != b2)
                        blocks[b1].checkCollision(blocks[b2]);
        }
    }

    public void actionPerformed (ActionEvent e) {
        animate();
    }
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
公共类驱动程序实现ActionListener
{
私有JFrame窗口;
私人定时器;
私有ChaseBlock[]块=新ChaseBlock[15];
//图形常量
私有最终int窗口大小=500;
私有最终整数块大小=20;
/**
*简单初始化main()。
*
*@param参数未使用。
*/
公共静态void main(字符串[]args)
{
驱动程序d=新驱动程序();
d、 createWindow();
}
/**
*设置基本图形对象。
*/
私有void createWindow()
{
//创建窗口
窗口=新JFrame(“大追逐”);
window.setVisible(true);
window.setLayout(空);
window.getContentPane().setBackground(Color.white);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
窗口设置位置(50,50);
window.setSize(
WindowsSize+window.getInsets().left+window.getInsets().right,
windowSize+window.getInsets().top+window.getInsets().bottom);
window.setresizeable(false);
window.repaint();
定时器=新定时器(10,此);
timer.start();
块[1]。收进背景(颜色:蓝色);
window.repaint();
addBlocks();
}
私有void addBlocks(){
对于(int i=0;i
这是我们使用的驱动程序类,还有一个矩形类。靠近底部,目标是添加矩形并使其移动。我这里的问题是,矩形不会显示或移动

import java.awt.Color;
public class ChaseBlock extends Rectangle {
    private int dX, dY;
    private int windowWidth = 500;
    private int windowHeight = 500;

    public ChaseBlock(int x, int y, int w, int h) {
        super(x, y, w, h );
        if (Math.random() < 0.5) {
            dX = -1;
            dY = -1;
            setBackground(Color.green);
        } else
            dX = 1;
            dY = 1;
            setBackground(Color.blue);
    }

    public void move() {
        setLocation(getX(), getY() + 5);
        if(getX() < 0 || getY() + getWidth() >= windowWidth) {
            dX = dX * -1;
        }
        if (getY() < 0 || getY() + getHeight() >= windowHeight) {
            dY = dY * -1;
        }
    }

    public void checkCollision(ChaseBlock blocks) {
        boolean up = false;
        boolean down = false; 
        boolean left = false;
        boolean right = false; 
        boolean hit = false;

    }

}
导入java.awt.Color;
公共类块扩展为矩形{
私有整数dX,dY;
私有窗口宽度=500;
专用窗高度=500;
公共块(整数x,整数y,整数w,整数h){
super(x,y,w,h);
if(Math.random()<0.5){
dX=-1;
dY=-1;
挫折背景(颜色:绿色);
}否则
dX=1;
dY=1;
挫折背景(颜色:蓝色);
}
公开作废动议(){
设置位置(getX(),getY()+5);
如果(getX()<0 | | getY()+getWidth()>=windowWidth){
dX=dX*-1;
}
如果(getY()<0 | | getY()+getHeight()>=windowHeight){
dY=dY*-1;
}
}
公共无效检查碰撞(ChaseBlock块){
布尔向上=假;
布尔向下=假;
布尔左=假;
布尔右=假;
布尔命中=假;
}
}

这是我的课程,用来定义运动和其他一切。我这里的问题是,我需要使用checkCollision方法来管理块本身和窗口之间的冲突,此外还需要为所有块设置颜色

首先,与窗边碰撞检查的第一个条件不正确。应该是

if(getX() < 0 || getX() + getWidth() >= windowWidth) 

如果你想知道碰撞发生在哪个面(或哪个方向),你必须使用更长更复杂的分离轴定理。

试着问一个具体的问题,这将帮助你解决问题。想一想你到底遇到了什么问题,然后问一个关于这件事的问题。这个问题太宽泛了。另外,尽量只包含说明问题所需的代码,而不是放弃整个项目。。。这将帮助你得到更多有用的答案。
if(a.x + a.h < b.x or a.x > b.x + b.h) return false;
if(a.y + a.h < b.y or a.y > b.y + b.h) return false;
return true;