본문 바로가기
Java/자바 Swing

[Java] 70. Swing: 버블버블 게임 만들기(1)

글: Song hyun 2024. 5. 2.
728x90
반응형

[Java] 70. Swing: 버블버블 게임 만들기(1)

 

자바의 GUI Swing을 사용해 버블버블 게임을 구현해보자.


1. 목차

 

(1) Moveable 인터페이스 구현하기

(2) Player 클래스 및 메서드 구현하기

(3) BubbleFrame 내에서 배경 및 캐릭터 동작 구현하기 (좌,우,상 움직임)

(4) GameTest1에서 시험해보기

 

*Player 클래스와 BubbleFrame 클래스는 포함 관계이다.


2. 구현해야 할 동작들

 

(1) Moveable 인터페이스 구현하기

-Player 클래스(플레이어 캐릭터)에서 필수적으로 구현해야 하는 메서드들을 선언해보자.

-right()/left()/up()

 

(2) Player 클래스 및 메서드 구현하기

-

 

(3) BubbleFrame 내에서 배경 및 캐릭터 동작 구현하기 (좌,우,상 움직임)

-생성자: 객체 생성시 initData()/setInitLayout()/addEventListener() 동작하도록 메서드 선언

-initData() 메서드: 

-setInitLayout() 메서드:

-addEventListener() 메서드:

 

(4) GameTest1에서 시험해보기

-new BubbleFrame();을 통해 작성한 코드들을 실행해보자.


3. 코드 블록

(1) GameTest1 : 코드 실행

(2) BubbleFrame : 프레임

(3) Player : player 객체 및 메서드 생성 (moveable 구현)

(4) Moveable : 인터페이스

package BubbleBubble.test.ex01;

public class GameTest1 {
	
	public static void main(String[] args) {
		new BubbleFrame();
	}

}​
package BubbleBubble.test.ex01;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.ImageIcon;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class BubbleFrame extends JFrame {
	private JLabel backgroundMap;
	private Player player;
	
	 public BubbleFrame() {
		 initData();
		 setInitLayout();
		 addEventListener();
	}
	 
	 private void initData() {
		 backgroundMap=new JLabel(new ImageIcon("img/backgroundMap.png"));
		 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		 // Frame --> root Panel
		 setContentPane(backgroundMap);
		 setSize(1000,640);
		 
		 player = new Player();
	 }
	 private void setInitLayout() {
		 // 좌표값으로 배치
		 setLayout(null);
		 setResizable(false); // 프레임 조절 불가
		 setLocationRelativeTo(null); // JFrame을 여러분 모니터 가운데에 자동 배치
		 setVisible(true);
		 
		 add(player);
	 }
	 private void addEventListener() {
		 this.addKeyListener(new KeyAdapter() { 
			 @Override
			public void keyPressed(KeyEvent e) {
				System.out.println("key code : "+e.getKeyCode());
				
				switch(e.getKeyCode()) {
				case KeyEvent.VK_LEFT:
					player.left();
					break;
				case KeyEvent.VK_RIGHT:
					player.right();
					break;
				case KeyEvent.VK_UP:
					player.up();
					break;
				}
			} //end of key pressed
		 }); // end of keyAdapter
	 }


}
package BubbleBubble.test.ex01;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class Player extends JLabel implements Moveable {

	private int x;
	private int y;
	private ImageIcon playerR, playerL;
	
	public Player() {
		initData();
		setInitLayout();
		
	}
	
	private void initData() {
		playerR=new ImageIcon("img/playerR.png");
		playerL=new ImageIcon("img/playerL.png");
		
		// 처음 실행 시 초기 값 셋팅
		x = 55;
		y = 535;
		setIcon(playerR);
		this.setSize(50,50);
		setLocation(x,y);
	}
	
	private void setInitLayout() {
		
	}

	@Override
	public void left() {
		setIcon(playerL);
		x=x-10;
		setLocation(x,y);
	}

	@Override
	public void right() {
		setIcon(playerR);
		x=x+10;
		setLocation(x,y);
		
	}

	@Override
	public void up() {
		setIcon(playerR);
		y=y-10;
		setLocation(x,y);
		
	}

	@Override
	public void down() {
		// TODO Auto-generated method stub
		
	}

}
package BubbleBubble.test.ex01;

public interface Moveable {
	
	// public abstract 생략 가능
	public abstract void left();
	public abstract void right();
	public abstract void up();
	public abstract void down();

}

 

728x90
반응형