Skip to content

SJU-OSS-21/java-swing-univ-final-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

266 Commits
 
 
 
 
 
 

Repository files navigation

IntroductionToOSS_Project

세종대학교 21학번 오픈소스SW개론(Introduction to OSS) 팀 프로젝트 레포지토리입니다.

  • [팀장]소프트웨어학과 21 황재동 Map, Audio
  • 소프트웨어학과 21 안강준 Player, Item
  • 소프트웨어학과 21 양현석 UI, Scene
  • 소프트웨어학과 21 최영준 Enemies

💻 컴파일 및 실행 방법

프로젝트 디렉토리 구조 확인

  • src/ 디렉토리 하위에 Main 패키지가 존재해야 합니다.
  • src/Main/Main.java 가 진입점(Main 클래스)입니다.
  • 해당 루트에 있는 Main.java 파일에서 컴파일 하면 컴파일 됩니다.

📦 클래스 및 메서드 설명

👤 Player 관련 클래스

플레이어 객체를 제어하는 핵심 클래스입니다.

  • move()
    → 플레이어 이동 처리

  • hit()
    → 플레이어와 적의 충돌 처리

  • updateInvincible()
    → 무적 지속 시간 갱신

  • getHpRatio()
    → 체력 비율 반환 (UI 표시용)

  • increasePlayerHP()
    → 체력 1 증가

  • decreasePlayerHP()
    → 체력 1 감소

  • draw(Graphics g)
    → 이미지 출력 및 깜빡임 효과 처리

  • update()
    → 이동 속도 및 방향 계산

  • getBounds()
    → 충돌 판정용 경계(Rectangle) 반환

🎮 PlayerPanel 클래스

게임 루프와 화면 처리를 담당하는 메인 패널입니다.

  • setEnemyPanel()
    → 적 패널 참조 연결

  • startGameThread()
    → 게임 스레드 시작

  • run()
    → 게임 루프 실행 (FPS 기반)

  • updateGame()
    → 전체 게임 로직 업데이트

  • paintComponent(Graphics g)
    → 그래픽 객체로 화면 출력

  • checkCollisions()
    → 플레이어와 적의 충돌 처리

  • setShotCount(int count)
    → 총알 개수 설정

  • getShotCount()
    → 총알 개수 반환

💥 Bullet 클래스

플레이어의 총알 정보를 관리합니다.

  • isActive()
    → 총알 활성 상태 확인

  • getX(), getY()
    → 총알 위치 반환

🎁 Item 클래스

아이템의 드랍 및 효과를 담당합니다.

  • PROB_BOMB, PROB_UPGRADE, PROB_HEALTH
    → 아이템 드랍 확률 상수

  • randomDrop()
    → 랜덤 아이템 생성

  • applyEffect(Player player)
    → 아이템 효과 적용

  • getBounds()
    → 충돌 판정용 경계 반환

  • isActive()
    → 활성 상태 확인

  • update()
    → 아이템 이동 및 상태 갱신


🚨 Enemy 관련 클래스

🧨 Enemy 클래스

  • init()
    → 적 객체 초기 설정

  • draw(Graphics g)
    → 패널에 이미지 출력

  • update()
    → 속도·시간 기반 위치 갱신

  • CollisionResolution()
    → 패널 및 총알과의 충돌 처리

  • isActive()
    → 삭제 필요 여부 반환

  • getBound()
    → 객체 크기 정보 반환

  • reduceHP()
    → 체력 감소, 이펙트 및 파괴 처리

  • run()
    → 피격 시 이펙트 스레드 실행

👾 EnemyPanel 클래스

  • run()
    → 적 이동 및 시간 경과에 따른 난이도 상승

  • setPlayerPanel()
    → 플레이어 패널 참조 설정


🎲 Map_Audio 관련 클래스

TileMapGenerator

  • TileMapGenerator()
    → 생성자 초기화 담당

  • initializeTileRows()
    → 생성자에서 불러 타일 변경을 위한 배열 초기화

  • getTileImages()
    → 리소스에서 타일 이미지 입력

  • updateScroll()
    → 타일맵을 움직이게 해주는 주요 메서드

  • shiftRowsDownWithNewIndex()
    → 화면 밖으로 타일이 벗어나면 아래로 시프트

  • draw(Graphics2D g2)
    → 화면에 타일 그리기

🖼 MapPanel

  • MapPanel()
    → 생성자: 패널을 만들어 씬 매니저에 전달하는 역할

  • startGameThread()
    → 스레드 시작

  • run()
    tileMapGeneratorupdateScroll() 호출

  • paintComponent(Graphics g)
    → 화면에 tileMapGeneratordraw() 호출

🔊 SoundManager

  • play(int index, float volume)
    → 원하는 음원을 재생

  • loop(int index, float volume, boolean continuous, int loopCount)
    → 원하는 음원을 연속 재생

  • playOrLoop(...)
    → 사용자가 사용할 함수 입력에 따라 play or loop 호출

  • stop(int id)
    → id를 이용해 특정 음원 정지

  • stopAll()
    → 모든 음원 정지 (재생되고 있는 것 포함)

  • setVolume(Clip clip, float volume)
    → 음원을 재생하기 전 볼륨을 설정


🎲 UI 관련 클래스

🧩 BaseScene (Abstract)

  • setScene()
    → Scene 속성 설정

  • setGameObjectList()
    → Scene 내 객체 등록

  • setUISet()
    → UI 구성 요소 설정

🌐 MainScene (BaseScene 상속)

  • setScene()
    → 화면 크기 설정

  • setGameObjectList()
    → 맵, UIPlayerPanel 생성

  • setUISet()
    → 버튼 이벤트 등록 및 UI 구성

🕹 InGameScene (BaseScene 상속)

  • setScene()
    → 화면 크기 설정 및 InGameManager 리셋

  • setGameObjectList()
    → 맵, 플레이어, 적 등록

  • setUISet()
    → 일시정지 UI 및 리스너 등록

🚀 LoadingScene (BaseScene 상속)

  • setScene()
    → 화면 크기 및 배경 설정

  • setGameObjectList()
    → (없음 또는 필요 시 설정)

  • setUISet()
    → 팁 텍스트 및 애니메이션 UI 등록

  • initLoading()
    → 로딩 씬 폰트/텍스트 생성

💀 GameOverScene (BaseScene 상속)

  • setScene()
    → 화면 크기 설정

  • setGameObjectList()
    → (필요시 설정)

  • setUISet()
    → GameOver UI 구성 및 리스너 등록

🧭 SceneManager

  • changeScene()
    → 씬 전환 및 초기화 요청

  • innerChangeScene()
    → 패널 제거 후 새 씬 초기화 및 출력

🖼 UIPanel (Abstract)

  • loadFonts()
    → UI용 폰트 로딩

  • drawUI(Graphics g)
    → 공통 UI 출력 처리

🎯 UIPlayerPanel

  • loadImage()
    → Player 이미지 불러오기

  • startInterpolatedMove()
    → 부드러운 움직임 구현

  • scheduleNextRandomMove()
    → 다음 이동 예약 (3~4초 주기)

  • generateNewRandomPosition()
    → 랜덤 위치 계산

🎛 MainUIPanel (UIPanel 상속)

  • initUIComponents()
    → 타이틀, 버튼 등 초기 설정

  • applyImageToButton()
    → 버튼 이미지 크기 조정

  • getStartButton()
    → 외부에서 Start 버튼 접근

  • getExitButton()
    → 외부에서 Exit 버튼 접근

⏱ InGameUIPanel (UIPanel 상속)

  • setScore(int)
    → 점수 UI 적용

  • setPlayer()
    → 플레이어 등록

  • startTimerUpdate()
    → 타이머 시작

  • interpolateHealth()
    → 체력 UI 보간 처리

  • drawUI()
    → UI 요소 출력

🛑 InGamePausePanel (UIPanel 상속)

  • getMainMenuButton()
    → 메인 메뉴 버튼 반환

  • getRetryButton()
    → 재시작 버튼 반환

🧾 GameOverUIPanel (UIPanel 상속)

  • getMainMenuButton()
    → 메인 메뉴 버튼 반환

  • getRetryButton()
    → 재시작 버튼 반환

  • drawUI()
    → 점수 및 시간 출력

🧮 GameManager

  • getInstance()
    → 싱글톤 인스턴스 반환

  • setMainFrame()
    → 메인 프레임 등록

  • getMainFrame()
    → 메인 프레임 반환

  • updateScore()
    → 점수 갱신

  • getScore()
    → 점수 반환

  • getTimer()
    → 시간 반환

  • resetScoreAndTimer()
    → 점수와 시간 초기화

🔁 InGameManager

  • getInstance()
    → 싱글톤 인스턴스 반환

  • initialize()
    → 객체 생성 및 초기화

  • resetPause()
    → 일시정지 변수 초기화

  • reset()
    → 글로벌 변수 초기화

  • setPlayer()
    → 플레이어 등록

  • isPaused()
    → 일시정지 여부 확인

  • getPauseOverlayPanel()
    → 배경 패널 반환

  • setupKeyListener()
    → ESC 입력 리스너 설정

  • togglePause()
    → 일시정지 메뉴 토글

  • setPausePanelVisible()
    → 메뉴 UI 표시

  • updateScore()
    → 적 처치 시 점수 갱신


IntroductionToOSS_Project

This is the team project repository for the 2021 cohort of
"Introduction to Open Source Software (OSS)" at Sejong University.

  • [Team Leader] Jaedong Hwang, Department of Software, Class of 2021 — Map, Audio
  • Kangjun Ahn, Department of Software, Class of 2021 — Player, Item
  • Hyunseok Yang, Department of Software, Class of 2021 — UI, Scene
  • Youngjun Choi, Department of Software, Class of 2021 — Enemies

💻 How to Compile and Run

Check Project Directory Structure

  • The src/ directory must contain a Main package.
  • The entry point is src/Main/Main.java.
  • Compile from the root where Main.java is located.

📦 Class and Method Descriptions

👤 Player-related Classes

Core class for controlling the player object.

  • move()
    → Handles player movement

  • hit()
    → Handles collisions with enemies

  • updateInvincible()
    → Updates invincibility duration

  • getHpRatio()
    → Returns health ratio (for UI)

  • increasePlayerHP()
    → Increases health by 1

  • decreasePlayerHP()
    → Decreases health by 1

  • draw(Graphics g)
    → Renders player and blinking effect

  • update()
    → Calculates movement speed and direction

  • getBounds()
    → Returns collision boundary rectangle

🎮 PlayerPanel Class

Main panel handling the game loop and screen rendering.

  • setEnemyPanel()
    → Links reference to enemy panel

  • startGameThread()
    → Starts game thread

  • run()
    → Executes game loop (FPS-based)

  • updateGame()
    → Updates overall game logic

  • paintComponent(Graphics g)
    → Renders screen using graphics object

  • checkCollisions()
    → Handles player-enemy collisions

  • setShotCount(int count)
    → Sets number of bullets

  • getShotCount()
    → Returns number of bullets

💥 Bullet Class

Manages player bullet information.

  • isActive()
    → Checks if bullet is active

  • getX(), getY()
    → Returns bullet position

🎁 Item Class

Handles item drop and effect application.

  • PROB_BOMB, PROB_UPGRADE, PROB_HEALTH
    → Constants for item drop probabilities

  • randomDrop()
    → Creates a random item

  • applyEffect(Player player)
    → Applies item effect to player

  • getBounds()
    → Returns boundary for collision detection

  • isActive()
    → Checks if item is active

  • update()
    → Updates item movement and state


🚨 Enemy-related Classes

🧨 Enemy Class

  • init()
    → Initializes enemy object

  • draw(Graphics g)
    → Renders image on panel

  • update()
    → Updates position based on speed and time

  • CollisionResolution()
    → Handles collisions with panel and bullets

  • isActive()
    → Returns whether to delete the object

  • getBound()
    → Returns size info

  • reduceHP()
    → Reduces health, triggers effects, and destruction

  • run()
    → Runs effect thread when hit

👾 EnemyPanel Class

  • run()
    → Moves enemies and increases difficulty over time

  • setPlayerPanel()
    → Sets reference to PlayerPanel


🎲 Map_Audio-related Classes

TileMapGenerator

  • TileMapGenerator()
    → Constructor for initialization

  • initializeTileRows()
    → Initializes array for tile updates

  • getTileImages()
    → Loads tile images from resources

  • updateScroll()
    → Main method to scroll tile map

  • shiftRowsDownWithNewIndex()
    → Shifts tiles when out of view

  • draw(Graphics2D g2)
    → Draws tiles on screen

🖼 MapPanel

  • MapPanel()
    → Constructor that sends panel to scene manager

  • startGameThread()
    → Starts thread

  • run()
    → Calls updateScroll() from tileMapGenerator

  • paintComponent(Graphics g)
    → Calls draw() from tileMapGenerator to render

🔊 SoundManager

  • play(int index, float volume)
    → Plays specified sound

  • loop(int index, float volume, boolean continuous, int loopCount)
    → Loops specified sound

  • playOrLoop(...)
    → Determines whether to play or loop based on input

  • stop(int id)
    → Stops specific sound by id

  • stopAll()
    → Stops all sounds

  • setVolume(Clip clip, float volume)
    → Sets volume before playing


🎲 UI-related Classes

🧩 BaseScene (Abstract)

  • setScene()
    → Sets scene properties

  • setGameObjectList()
    → Registers game objects in scene

  • setUISet()
    → Sets up UI components

🌐 MainScene (extends BaseScene)

  • setScene()
    → Sets screen size

  • setGameObjectList()
    → Creates map and UIPlayerPanel

  • setUISet()
    → Registers button events and builds UI

🕹 InGameScene (extends BaseScene)

  • setScene()
    → Sets screen size and resets InGameManager

  • setGameObjectList()
    → Registers map, player, and enemies

  • setUISet()
    → Registers pause UI and listeners

🚀 LoadingScene (extends BaseScene)

  • setScene()
    → Sets screen size and background

  • setGameObjectList()
    → (None or optional)

  • setUISet()
    → Registers tip text and animation UI

  • initLoading()
    → Creates loading font and text

💀 GameOverScene (extends BaseScene)

  • setScene()
    → Sets screen size

  • setGameObjectList()
    → (Optional)

  • setUISet()
    → Builds Game Over UI and registers listeners

🧭 SceneManager

  • changeScene()
    → Requests scene change and initialization

  • innerChangeScene()
    → Removes current panel and initializes new scene

🖼 UIPanel (Abstract)

  • loadFonts()
    → Loads fonts for UI

  • drawUI(Graphics g)
    → Common UI rendering

🎯 UIPlayerPanel

  • loadImage()
    → Loads player image

  • startInterpolatedMove()
    → Smooth movement logic

  • scheduleNextRandomMove()
    → Schedules next move (every 3–4 seconds)

  • generateNewRandomPosition()
    → Calculates new random position

🎛 MainUIPanel (extends UIPanel)

  • initUIComponents()
    → Initializes title, buttons, etc.

  • applyImageToButton()
    → Adjusts button image size

  • getStartButton()
    → Returns Start button for external access

  • getExitButton()
    → Returns Exit button for external access

⏱ InGameUIPanel (extends UIPanel)

  • setScore(int)
    → Updates score UI

  • setPlayer()
    → Registers player

  • startTimerUpdate()
    → Starts timer

  • interpolateHealth()
    → Smooth health UI interpolation

  • drawUI()
    → Renders UI components

🛑 InGamePausePanel (extends UIPanel)

  • getMainMenuButton()
    → Returns Main Menu button

  • getRetryButton()
    → Returns Retry button

🧾 GameOverUIPanel (extends UIPanel)

  • getMainMenuButton()
    → Returns Main Menu button

  • getRetryButton()
    → Returns Retry button

  • drawUI()
    → Displays score and time

🧮 GameManager

  • getInstance()
    → Returns singleton instance

  • setMainFrame()
    → Registers main frame

  • getMainFrame()
    → Returns main frame

  • updateScore()
    → Updates score

  • getScore()
    → Returns current score

  • getTimer()
    → Returns elapsed time

  • resetScoreAndTimer()
    → Resets score and timer

🔁 InGameManager

  • getInstance()
    → Returns singleton instance

  • initialize()
    → Creates and initializes objects

  • resetPause()
    → Resets pause state

  • reset()
    → Resets global variables

  • setPlayer()
    → Registers player

  • isPaused()
    → Checks if game is paused

  • getPauseOverlayPanel()
    → Returns background panel

  • setupKeyListener()
    → Sets ESC key listener

  • togglePause()
    → Toggles pause menu

  • setPausePanelVisible()
    → Displays menu UI

  • updateScore()
    → Updates score when enemy is defeated

About

This is the team project repository for "Introduction to Open Source Software (OSS)" course at Sejong University.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages