package ch06;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
class MiniAmongus extends JFrame {
BufferedImage backgroundImage;
BufferedImage amongImage1;
BufferedImage amongImage2;
CustomJPanel customJPanel;
int among1XPoint = 0;
int among1YPoint = 370;
int among2XPoint = 200;
int among2YPoint = 200;
public MiniAmongus() {
initData();
setInitLayout();
addEventListener();
Thread thread = new Thread(customJPanel);
thread.start();
}
private void initData() {
setTitle("미니 어몽어스");
setSize(600, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
try {
backgroundImage = ImageIO.read(new File("background2.jpg"));
amongImage1 = ImageIO.read(new File("among1.jpg"));
amongImage2 = ImageIO.read(new File("among2.png"));
} catch (IOException e) {
e.printStackTrace();
System.err.println("파일이 없습니다."); // 색을 빨갛게 표시
}
customJPanel = new CustomJPanel(); // 위에거 실행시킨 다음에 해야되기때문에 범위 밖에서
}
private void setInitLayout() {
setVisible(true);
add(customJPanel);
}
private void addEventListener() {
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
switch (code) {
case KeyEvent.VK_UP : //: 콜론
among2YPoint -= 10;
break; //Break쓰지않으면 다음거 계속 실행
case KeyEvent.VK_DOWN :
among2YPoint +=10;
break;
case KeyEvent.VK_LEFT :
among2XPoint -=10;
break;
case KeyEvent.VK_RIGHT :
among2XPoint +=10;
break;
}
repaint(); //그림을 다시그려서 움직이는 것처럼 보이게
}
});
}
//내부클래스
private class CustomJPanel extends JPanel implements Runnable{
@Override
protected void paintComponent(Graphics g) {
g.drawImage(backgroundImage, 0, 0, 600, 600, null);
g.drawImage(amongImage1, among1XPoint, among1YPoint, 100, 100, null);
g.drawImage(amongImage2, among2XPoint, among2YPoint, 100, 100, null);//변수처리
}
@Override
public void run() {
boolean derection = true;
while(true) {
if(derection) {
among1XPoint = among1XPoint +10;
}else{
among1XPoint = among1XPoint -10;
}
if(among1XPoint ==400) {
derection = false;
}//if else 문 쓰면안됨
if(among1XPoint ==0) {
derection = true;
}
if(among1XPoint == among2XPoint && among1YPoint ==among2YPoint) {
amongImage2 = null;
}
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}//잡고 난뒤 멈추고 싶을때 while의 true를 flag의 변수를 넣어 바꿀수있다.
//연습)
}
}//지정한 좌표에 갔다가 다시 와야함
//flag 깃발을 꽂아서 기준을 만들어주는
}// JPanel
}
public class MainTest {
public static void main(String[] args) {
new MiniAmongus();
}
}