미로 탐험 게임: 자바 구현
1. 내용 설명
미로 탐험 게임은 플레이어가 미로를 통과하여 목적지에 도달해야 하는 게임입니다. 플레이어는 키보드 입력을 통해 캐릭터를 조종하며, 미로의 벽에 부딪히지 않고 길을 찾아야 합니다. 목적지에 도달하면 게임이 종료됩니다.
2. 프로그램 간 사용 함수 설명
- createAndShowGUI(): 게임의 GUI를 생성하고 표시합니다.
- initializeMaze(): 미로의 초기 상태를 설정합니다.
- movePlayer(): 플레이어의 움직임을 처리합니다.
- checkWinCondition(): 목적지에 도달했는지 확인합니다.
3. 코딩 내용
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MazeGame {
private JFrame frame;
private int[][] maze = {
{1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 0, 1},
{1, 0, 1, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 0, 1},
{1, 0, 0, 0, 1, 0, 1},
{1, 1, 1, 0, 1, 1, 1}
};
private Point playerPosition = new Point(1, 1);
private Point goalPosition = new Point(5, 5);
private JLabel[][] mazeLabels;
public MazeGame() {
createAndShowGUI();
}
private void createAndShowGUI() {
frame = new JFrame("Maze Game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setLayout(new GridLayout(maze.length, maze[0].length));
initializeMaze();
frame.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
movePlayer(e.getKeyCode());
}
});
frame.setFocusable(true);
frame.setVisible(true);
}
private void initializeMaze() {
mazeLabels = new JLabel[maze.length][maze[0].length];
for (int i = 0; i < maze.length; i++) {
for (int j = 0; j < maze[i].length; j++) {
JLabel label = new JLabel();
label.setOpaque(true);
label.setBackground(maze[i][j] == 1 ? Color.BLACK : Color.WHITE);
mazeLabels[i][j] = label;
frame.add(label);
}
}
updatePlayerPosition(playerPosition);
}
private void movePlayer(int keyCode) {
Point newPosition = new Point(playerPosition);
switch (keyCode) {
case KeyEvent.VK_UP:
newPosition.translate(-1, 0);
break;
case KeyEvent.VK_DOWN:
newPosition.translate(1, 0);
break;
case KeyEvent.VK_LEFT:
newPosition.translate(0, -1);
break;
case KeyEvent.VK_RIGHT:
newPosition.translate(0, 1);
break;
}
if (isValidMove(newPosition)) {
updatePlayerPosition(newPosition);
checkWinCondition();
}
}
private boolean isValidMove(Point newPosition) {
return newPosition.x >= 0 && newPosition.x < maze.length
&& newPosition.y >= 0 && newPosition.y < maze[0].length
&& maze[newPosition.x][newPosition.y] == 0;
}
private void updatePlayerPosition(Point newPosition) {
// Clear previous player position
mazeLabels[playerPosition.x][playerPosition.y].setBackground(Color.WHITE);
// Update to new position
playerPosition.setLocation(newPosition);
mazeLabels[playerPosition.x][playerPosition.y].setBackground(Color.BLUE);
}
private void checkWinCondition() {
if (playerPosition.equals(goalPosition)) {
JOptionPane.showMessageDialog(frame, "You win!");
System.exit(0);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new MazeGame());
}
}
4. 전문용어
- JFrame: 자바 Swing의 주요 창 컨테이너입니다.
- GridLayout: 컴포넌트들을 격자 형태로 배치하는 레이아웃 관리자입니다.
- KeyListener: 키보드 이벤트를 처리하기 위한 리스너 인터페이스입니다.
- Point: 2D 좌표를 나타내는 클래스입니다.
5. 라이브러리 추가 및 실행 방법
- 본 프로그램은 자바 표준 라이브러리의 Swing 컴포넌트를 사용합니다.
컴파일:
javac MazeGame.java
실행:
java MazeGame
'자바(java)' 카테고리의 다른 글
퀴즈 게임: 다양한 주제의 퀴즈를 제공하고 사용자의 정답을 평가하는 게임을 만듭니다. (0) | 2023.12.20 |
---|---|
블랙잭 카드 게임: 블랙잭 룰에 따라 카드 게임을 구현합니다. (0) | 2023.12.20 |
타자 연습 게임: 랜덤 단어를 화면에 표시하고 사용자의 타자 속도를 측정하는 게임을 개발합니다. (0) | 2023.12.20 |
사용자 관리 시스템: 사용자 정보를 관리하고 등록, 수정, 삭제할 수 있는 시스템을 만듭니다. (0) | 2023.12.20 |
음식 주문 시스템: 메뉴에서 음식을 선택하고 주문하는 시스템을 구축합니다. (1) | 2023.12.19 |