Java/Excercise

swing ch06 MiniAmongUs

낭구리 2021. 9. 8. 18:21
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();
	}

}

'Java > Excercise' 카테고리의 다른 글

callback ch01 CallbackBtnAction  (0) 2021.09.09
callback ch00 Main,SubActivity  (0) 2021.09.09
thread ch03 TerminateThread  (0) 2021.09.08
thread ch03 JoinTest  (0) 2021.09.08
thread ch03 priorityTest  (0) 2021.09.08