블락스케이프라고 비슷한거 만드는데요
막 박스 이동시켜서 노란거 탈출 시키는거거든여
박스끼리 서로 막 통과하고 난리났어요
이거 어떻게 해결할수있나여?
박스는 2d로그렸어여
클래스하나에 다때려넣엇거든요..
으으.. 박스끼리만 안겹치면 좋겠는데 어떻게 못하는건가요? 새로 다 다시짜야하나여?
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
public class GameStart extends JPanel implements MouseListener,
MouseMotionListener {
Rectangle rect = new Rectangle(0, 0, 314, 314);
Rectangle vbox1 = new Rectangle(2,54,100,50);
Rectangle Tbox = new Rectangle(106,106,100,50);
Rectangle vbox2 = new Rectangle(2,260,100,50);
Rectangle vbox3 = new Rectangle(2,210,100,50);
Rectangle vbox4 = new Rectangle(158,2,100,50);
Rectangle vbox5 = new Rectangle(158,262,150,50);
Rectangle vbox6 = new Rectangle(2,2,150,50);
Rectangle hbox1 = new Rectangle(106,158,50,150);
Rectangle hbox2 = new Rectangle(158,158,50,100);
Rectangle hbox3 = new Rectangle(262,2 ,50,150);
BufferedImage bi = new BufferedImage(5, 5, BufferedImage.TYPE_INT_RGB); //이해안됨
Graphics2D big;
int v1x, v2x,v3x,v4x,v5x,v6x;
int tx;
int h1y, h2y ,h3y;
static boolean i = false;
boolean firstTime = true;
Rectangle area;
boolean pressOut1 = false;
boolean pressOut2 = false;
boolean pressOut3 = false;
boolean pressOut4 = false;
boolean pressOut5 = false;
boolean pressOut6 = false;
boolean pressOut7 = false;
boolean pressOut8 = false;
boolean pressOut9 = false;
boolean pressOut10 = false;
public GameStart() {
setBackground(Color.black);
addMouseMotionListener(this);
addMouseListener(this);
}
public void mousePressed(MouseEvent e) {
v1x = vbox1.x - e.getX();
v2x = vbox2.x - e.getX();
v3x = vbox3.x - e.getX();
v4x = vbox4.x - e.getX();
v5x = vbox5.x - e.getX();
v6x = vbox6.x - e.getX();
tx = Tbox.x - e.getX();
h1y = hbox1.y - e.getY();
h2y = hbox2.y - e.getY();
h3y = hbox3.y - e.getY();
if (vbox1.contains(e.getX(), e.getY())) {
updateLocation2(e);
} else {
pressOut1 = true;
}
if (vbox2.contains(e.getX(), e.getY())) {
updateLocation3(e);
} else {
pressOut3 = true;
}
if (vbox3.contains(e.getX(), e.getY())) {
updateLocation4(e);
} else {
pressOut4 = true;
}
if (vbox4.contains(e.getX(), e.getY())) {
updateLocation5(e);
} else {
pressOut5 = true;
}
if (vbox5.contains(e.getX(), e.getY())) {
updateLocation6(e);
} else {
pressOut6 = true;
}
if (vbox6.contains(e.getX(), e.getY())) {
updateLocation7(e);
} else {
pressOut7 = true;
}
if (hbox1.contains(e.getX(), e.getY())) {
updateLocation1(e);
} else {
pressOut10 = true;
}
if (hbox2.contains(e.getX(), e.getY())) {
updateLocation8(e);
} else {
pressOut8 = true;
}
if (hbox3.contains(e.getX(), e.getY())) {
updateLocation8(e);
} else {
pressOut9 = true;
}
if (Tbox.contains(e.getX(), e.getY())) {
updateLocation(e);
} else {
pressOut2 = true;
}
}
public void mouseDragged(MouseEvent e) {
if (!pressOut1) {
updateLocation2(e);
}
if (!pressOut3) {
updateLocation3(e);
}
if (!pressOut4) {
updateLocation4(e);
}
if (!pressOut5) {
updateLocation5(e);
}
if (!pressOut6) {
updateLocation6(e);
}
if (!pressOut7) {
updateLocation7(e);
}
if (!pressOut8) {
updateLocation8(e);
}
if (!pressOut9) {
updateLocation9(e);
}
if (!pressOut10) {
updateLocation1(e);
}
if (!pressOut2) {
updateLocation(e);
}
}
public void mouseReleased(MouseEvent e) {
if (vbox1.contains(e.getX(), e.getY())) {
updateLocation2(e);
}
else if (Tbox.contains(e.getX(), e.getY())) {
updateLocation(e);
}
else if (vbox2.contains(e.getX(), e.getY())) {
updateLocation3(e);
}
else if (vbox3.contains(e.getX(), e.getY())) {
updateLocation4(e);
}
else if (vbox4.contains(e.getX(), e.getY())) {
updateLocation5(e);
}
else if (vbox5.contains(e.getX(), e.getY())) {
updateLocation6(e);
}
else if (vbox6.contains(e.getX(), e.getY())) {
updateLocation7(e);
}
else if (hbox1.contains(e.getX(), e.getY())) {
updateLocation1(e);
}
else if (hbox2.contains(e.getX(), e.getY())) {
updateLocation8(e);
}
else if (hbox3.contains(e.getX(), e.getY())) {
updateLocation9(e);
}
}
public void mouseMoved(MouseEvent e) {
pressOut1 = false;
pressOut2 = false;
pressOut3 = false;
pressOut4 = false;
pressOut5 = false;
pressOut6 = false;
pressOut7 = false;
pressOut8 = false;
pressOut9 = false;
pressOut10 = false;
}
public void mouseClicked(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void updateLocation1(MouseEvent e) {
hbox1.setLocation(hbox1.x , h1y + e.getY());
repaint();
}
public void updateLocation8(MouseEvent e) {
hbox2.setLocation(hbox2.x , h2y + e.getY());
repaint();
}
public void updateLocation9(MouseEvent e) {
hbox3.setLocation(hbox3.x , h3y + e.getY());
repaint();
}
public void updateLocation(MouseEvent e) {
Tbox.setLocation(tx + e.getX(), Tbox.y) ;
if( Tbox.x > 260)
i = true;
repaint();
}
public void updateLocation2(MouseEvent e) {
vbox1.setLocation(v1x + e.getX() , vbox1.y) ;
repaint();
}
public void updateLocation3(MouseEvent e) {
vbox2.setLocation(v2x + e.getX() , vbox2.y) ;
repaint();
}
public void updateLocation4(MouseEvent e) {
vbox3.setLocation(v3x + e.getX() , vbox3.y) ;
repaint();
}
public void updateLocation5(MouseEvent e) {
vbox4.setLocation(v4x + e.getX() , vbox4.y) ;
repaint();
}
public void updateLocation6(MouseEvent e) {
vbox5.setLocation(v5x + e.getX() , vbox5.y) ;
repaint();
}
public void updateLocation7(MouseEvent e) {
vbox6.setLocation(v6x + e.getX() , vbox6.y) ;
repaint();
}
public void paint(Graphics g) {
update(g);
}
public void update(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if (firstTime) {
int x= 15; int y=10;
Dimension dim = getSize();
int w = dim.width;
int h = dim.height;
area = new Rectangle(dim);
bi = (BufferedImage) createImage(w, h);
big = bi.createGraphics();
rect.setLocation(x, y);
vbox1.setLocation(x+2, y+54);
vbox2.setLocation(x+2, y+262);
vbox3.setLocation(x+2, y+210);
vbox4.setLocation(x+158, y+2);
vbox5.setLocation(x+158, y+262);
vbox6.setLocation(x+2, y+2);
hbox1.setLocation(x+106, y+158);
hbox2.setLocation(x+158, y+158);
hbox3.setLocation(x+262, y+2);
Tbox.setLocation(x+106, y+106);
big.setStroke(new BasicStroke(8.0f));
firstTime = false;
}
big.setColor(Color.black);
big.clearRect(0, 0, area.width, area.height);
big.setPaint(Color.white);
big.draw(rect);
big.setPaint(Color.gray);
big.fill(rect);
big.setPaint(Color.blue);
big.fill(vbox1);
big.setPaint(Color.blue);
big.fill(vbox2);
big.setPaint(Color.blue);
big.fill(vbox3);
big.setPaint(Color.blue);
big.fill(vbox4);
big.setPaint(Color.blue);
big.fill(vbox5);
big.setPaint(Color.blue);
big.fill(vbox6);
big.setPaint(Color.blue);
big.fill(hbox1);
big.setPaint(Color.blue);
big.fill(hbox2);
big.setPaint(Color.blue);
big.fill(hbox3);
big.setPaint(Color.yellow);
big.fill(Tbox);
g2.drawImage(bi, 0, 0, this);
}
public static void main(String s[]) {
JFrame f = new JFrame("BoxEscape");
JLabel label;
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(new GameStart(), "Center");
label = new JLabel("Gaming");
f.getContentPane().add(BorderLayout.SOUTH, label);
if( i == true ){
label.setText("Clear!");
}
f.pack();
f.setSize(new Dimension(400, 400));
f.show();
}
}
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.