Bubble (물방울 생성) - 4

목차

    목표

    1. 물방울 위치는 플레이어의 위치
    2. 스페이스바를 누르면 물방울이 나옴

     

    버블 코드

    package bubble.test.ex05;
    
    import javax.swing.ImageIcon;
    import javax.swing.JLabel;
    
    public class Bubble extends JLabel {
    
    	private int x;
    	private int y;
    	private Player player;
    
    	// 움직임 상태
    	private boolean left;
    	private boolean right;
    	private boolean up;
    
    	// 적군을 맞춘 상태
    	private int state; // 0 : 기본 물방울, 1 : 적을 가둔 상태 물방울
    
    	private ImageIcon bubble; // 기본 물방울
    	private ImageIcon bubbled; // 적을 가둔 물방울
    	private ImageIcon bomb; // 물방울 팡!
    
    	// 연관관계, 의존성 컴포지션 관계, 생성자 의존 주입 (DI)
    	public Bubble(Player player) {
    		this.player = player;
    		initData();
    		setInitLayout();
    	}
    
    	// get, set
    	public int getX() {
    		return x;
    	}
    
    	public void setX(int x) {
    		this.x = x;
    	}
    
    	public int getY() {
    		return y;
    	}
    
    	public void setY(int y) {
    		this.y = y;
    	}
    
    	public Player getPlayer() {
    		return player;
    	}
    
    	public void setPlayer(Player player) {
    		this.player = player;
    	}
    
    	public boolean isLeft() {
    		return left;
    	}
    
    	public void setLeft(boolean left) {
    		this.left = left;
    	}
    
    	public boolean isRight() {
    		return right;
    	}
    
    	public void setRight(boolean right) {
    		this.right = right;
    	}
    
    	public boolean isUp() {
    		return up;
    	}
    
    	public void setUp(boolean up) {
    		this.up = up;
    	}
    
    	public int getState() {
    		return state;
    	}
    
    	public void setState(int state) {
    		this.state = state;
    	}
    
    	public ImageIcon getBubble() {
    		return bubble;
    	}
    
    	public void setBubble(ImageIcon bubble) {
    		this.bubble = bubble;
    	}
    
    	public ImageIcon getBubbled() {
    		return bubbled;
    	}
    
    	public void setBubbled(ImageIcon bubbled) {
    		this.bubbled = bubbled;
    	}
    
    	public ImageIcon getBomb() {
    		return bomb;
    	}
    
    	public void setBomb(ImageIcon bomb) {
    		this.bomb = bomb;
    	}
    	
    	private void initData() {
    		bubble = new ImageIcon("img/bubble.png");
    		bubbled = new ImageIcon("img/bubbled.png");
    		bomb = new ImageIcon("img/bomb.png");
    
    		left = false;
    		right = false;
    		up = false;
    		state = 0;
    	}
    	private void setInitLayout() {
    		x = player.getX();
    		y = player.getY();
    		setIcon(bubble);
    		setSize(50, 50);
    		setLocation(x, y);
    	}
    
    }

     

    프레임 코드

    package bubble.test.ex05;
    
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    public class BubbleFrame extends JFrame {
    
    	private JLabel backgroundMap;
    	private Player player;
    	private final int BG_WIDTH = 1000;
    	private final int BG_HEIGHT = 640;
    
    	public BubbleFrame() {
    		initData();
    		setInitLayout();
    		addEventListener();
    
    		// Player 백그라운드 서비스 시작
    
    		new Thread(new BackgroundPlayerService(player)).start();
    	}
    
    	private void initData() {
    		// todo 이미지 변경
    		backgroundMap = new JLabel(
    				new ImageIcon("img/backgroundMapService.png"));
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		// Frame -> root Panel
    		setContentPane(backgroundMap); // add 처리
    		setSize(BG_WIDTH, BG_HEIGHT);
    
    		player = new Player();
    	}
    
    	private void setInitLayout() {
    		setLayout(null); // 좌표값으로 배치
    		setResizable(false); // 프레임 조절 불가
    		setLocationRelativeTo(null); // JFrame을 모니터 가운데 자동 배치
    		setVisible(true);
    
    		add(player);
    	}
    
    	private void addEventListener() {
    		// KeyAdapter는 KeyListener 를 구현한 추상 클래스
    		// 불필요한 메서드를 쓰지 않고 원하는 메서드만 오버라이드해서 쓰면됨
    		addKeyListener(new KeyAdapter() {
    			@Override
    			public void keyPressed(KeyEvent e) {
    				// 개발단계에서는 확인 용도로 써놓음
    				System.out.println("key code : " + e.getKeyCode());
    
    				switch (e.getKeyCode()) {
    					case KeyEvent.VK_LEFT :
    
    						// 왼쪽 상태가 아니라면
    						// 왼쪽 벽에 충돌한게 아니라면
    						if (!player.isLeft() && !player.isLeftWallCrash()) {
    							player.left();
    						}
    						break;
    					case KeyEvent.VK_RIGHT :
    						if (!player.isRight() && !player.isRightWallCrash()) {
    							player.right();
    						}
    						break;
    					case KeyEvent.VK_UP :
    						player.up();
    						break;
    					case KeyEvent.VK_SPACE :
    						add(new Bubble(player));
    					default :
    						break;
    				}
    			} // end of KeyPressed
    			@Override
    			public void keyReleased(KeyEvent e) {
    				switch (e.getKeyCode()) {
    					case KeyEvent.VK_LEFT :
    						player.setLeft(false);
    						break;
    					case KeyEvent.VK_RIGHT :
    						player.setRight(false);
    						break;
    					default :
    						break;
    				}
    
    			} // end of KeyReleased
    		});
    	}
    
    	// 코드 테스트
    	public static void main(String[] args) {
    		new BubbleFrame();
    	} // end of main
    
    }

    정리

    물방울 위치는 플레이어의 위치

    • 물방울 클래스가 플레이어 클래스를 멤버로 가져서 플레이어의 자표를 받아오도록함

    스페이스바를 누르면 물방울이 나옴

    • 스페이스바를 눌렀을때 버블객체 생성

    Swing 목차로 돌아가기

    'Java > Swing 프로젝트' 카테고리의 다른 글

    Bubble 버블 동작 처리 - 6  (1) 2024.05.03
    Bubble 바닥 층 감지 기능 추가 - 5  (0) 2024.05.03
    Bubble (Daemon Thread 활용) - 3  (0) 2024.05.02
    Bubble (Thread 활용) - 2  (0) 2024.05.02
    Bubble (객체 지향 패러다임) - 1  (0) 2024.05.02