- Bubble 클래스 설계하기
package bubble.test04;
import javax.swing.*;
public class Bubble extends JLabel {
private int x;
private int y;
// 물방울 움직임 상태
private boolean left;
private boolean right;
private boolean up;
private ImageIcon bubble; // 기본 물방울
private Player player;
// 생성자를 통해서 player 객체의 주소값을 주입 받기 -> 생성자 의존 주입
public Bubble(Player player) {
this.player = player;
initData();
setInitLayout();
}
private void initData() {
bubble = new ImageIcon("img/bubble.png");
left = false;
right = false;
up = false;
}
private void setInitLayout() {
x = player.getX();
y = player.getY();
setIcon(bubble);
setSize(50, 50);
setLocation(x, y);
}
// getter
@Override
public int getX() {
return x;
}
@Override
public int getY() {
return y;
}
public boolean isLeft() {
return left;
}
public boolean isRight() {
return right;
}
public boolean isUp() {
return up;
}
public ImageIcon getBubble() {
return bubble;
}
public Player getPlayer() {
return player;
}
// setter
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public void setLeft(boolean left) {
this.left = left;
}
public void setRight(boolean right) {
this.right = right;
}
public void setUp(boolean up) {
this.up = up;
}
public void setBubble(ImageIcon bubble) {
this.bubble = bubble;
}
public void setPlayer(Player player) {
this.player = player;
}
}
- BubbleFrame 스페이스 바 키 이벤트 추가하기
package bubble.test04;
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class BubbleFrame extends JFrame {
private JLabel backgroundMap;
private Player player;
//생성자
public BubbleFrame() {
initData();
setInitLayout();
addEventListener();
new Thread(new BackgroundPlayerService(player)).start();
}
private void initData() {
setTitle("버블버블게임");
setSize(1000, 640);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
backgroundMap = new JLabel(new ImageIcon("img/backgroundMap.png"));
// 루트 패널에 JLabel 넣어보기
setContentPane(backgroundMap);
player = new Player();
}
private void setInitLayout() {
setLayout(null); // 좌표기준(절대 레이아웃)
setResizable(false); // 리사이즈 조절 막기
setLocationRelativeTo(null); // JFrame 화면 가운데 배치해줌
add(player);
setVisible(true);
}
private void addEventListener() {
// 프레임에 키보드 이벤트 리스너 등록 처리
this.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
// 키를 누를때 .. 누르고 있으면 계속 이벤트 발생
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
if (player.isLeft() == false && player.isLeftWallCrash() == false) {
player.left();
}
break;
case KeyEvent.VK_RIGHT:
// 만약 플레이어가 오른쪽으로 가고 있는 상태가 아니라면 메서드를 수행해
// 만약 플레이어가 오른쪽으로 가고 있는 상태라면 right() 수행 하지마
if (player.isRight() == false && player.isRightWallCrash() == false) {
player.right();
}
break;
case KeyEvent.VK_UP:
player.up();
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("code : " + e.getKeyCode());
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
// 왼쪽으로 가고 있다면 멈춰 (while 종료) -- 스레드 종료됨
player.setLeft(false);
break;
case KeyEvent.VK_RIGHT:
player.setRight(false);
break;
case KeyEvent.VK_UP:
break;
case KeyEvent.VK_SPACE:
add(new Bubble(player));
break;
}
}
});
}
public static void main(String[] args) {
new BubbleFrame();
}
}
'JAVA' 카테고리의 다른 글
컬렉션 프레임워크(collection framework) (1) | 2025.05.02 |
---|---|
버블버블 게임 5단계 (물방울 동작 처리하기) (0) | 2025.05.02 |
버블버블 게임 3단계 (왼쪽, 오른쪽 벽 감지하기) (0) | 2025.05.01 |
버블버블 게임 2단계 (움직이기 - 점프, 멈추기) (0) | 2025.05.01 |
버블버블 게임 1단계 (기본 화면 , 키 이벤트) (0) | 2025.05.01 |