Skip to content

ybuser/JPLteamproject

2021 Java Term Project making SKKU Tower Defense Game

College of Computing, class of 2024, Dongbin Kim,Jingeon Shin,Yunbo Shim (20학번 김동빈,신진건,심윤보)

시연영상 (Demonstration Video) - https://youtu.be/63dogOhNVUo

Intro Image

프로그램 개요

● 주제: 게임 ● 게임 종류: 전략 타워 디펜스 게임 ● 전체적인 게임 진행 은행잎(몬스터)이 맵의 길을 따라서 이동하고 그 길 주변에 타워를 설치하여 은행잎이 목적지에 도달하지 못하도록 하는 게임이다. 게임이 시작되면 생명력이 주어지고 은행잎이 목 적지에 도달하면 생명력이 1씩 감소되고, 주어진 생명력이 모두 사라지면 게임이 끝난다. 은행잎을 제거하면 코인을 얻게 되고 그 코인으로 타워를 추가적으로 설치할 수 있다. 게임은 총 3개의 레벨로 구성되어 있으며 레벨이 높아질수록 난이도가 상승한다.

타워 종류 몬스터

코드 설명

● Frame

  1. 게임 인터페이스 창을 위한 Frame을 만드는 class
  2. JFrame class를 확장했다.

● Game

  1. 게임에 필요한 객체들이 저장되고 실행될 panel이다. Jpanel을 확장했고 게임실행을 위한 thread를 위해 Runnable 인터페이스를 사용했다.
  2. 레벨이 올라갈 때마다 화면이 달라지기 때문에 constructor를 대신해서, 이미지와 맵을 읽어오고, 게임에 필요한 객체들을 생성하는 define method를 따로 구현했다.
  3. 각 객체들이 가지고 있는 화면 상에 이미지와 그림들을 출력하는 method(draw)들을 실행할method를 구현했다.
  4. 몬스터의 생성 주기를 제어하는 method를 구현했다.
  5. 게임의 모든 상황을 제어하기 위해 thread를 사용했다. 객체들의 물리적 움직임을 설정된 프레임을 통해 제어되도록 method들을 구현했다. 만약, 그 method들이 프레임만큼 반복 호출되었을 때 물리적 움직임이 나타나도록 했기 때문에 프로그램이 너무 빨리 돌아가 게임 진행 또한 너무 빨라지지 않게 하기 위해서 thread 제어를 위해 sleep을 사용하였다.

● Map

  1. 게임이 진행되는 화면을 만드는 class이다. 몬스터가 지나가는 길과 타워가 설치할 공간을 하나의 타일(정사각형)로 설정했기 때문에 이 class 안에 Tile class를 따로 만들고 map class에서는 이 tile의 2차원 배열을 만들어서 맵을 만들도록 했다.
  2. Tile class
  • 타일은 정사각형으로 구현했으며, 몬스터의 길을 나타내기도 하지만, 타워가 설치되면 공격해야 하기 때문에 물리적 method 또한 구현했다.
  • 하나의 정사각형 타일이 있고 그것보다 큰 정사각형을 만들어 타워의 공격범위로 설정하였다.이 공격범위를 나타내는 정사각형에 몬스터가 교차된다면 공격을 하도록 구현하였다.
  • 공격을 한다면, 타워의 중앙과 몬스터의 중앙을 연결하는 선을 그려서 공격을 하고 있다는 표시를 구현하였다.
  1. 타일의 2차원을 배열과 반복문을 통해 모든 타일이 물리적 method와 draw method를 실행시키도록 method 들을 구현했다.

● Shop

  1. 상점을 구현하고 상태(생명, 코인)을 구현하는 class이다.
  2. 모든 객체를 생성하는 constructor가 있고 그것들의 이미지를 화면 상에 출력하는 draw method가 있다.
  3. 마우스 클릭을 통해 타워를 클릭해서 타워를 선택하고, 게임 내의 map에 다시 마우스 클릭을 통해 타워를 설치하게 해주는 click method가 있다.

● Mob

  1. 몬스터를 구현하는 class이다.
  2. 몬스터를 생성하는 constructor가 있고 화면에 이미지를 출력하는 draw method가 있다.
  3. 몬스터를 생성하는 spawnMob method, 몬스터의 상태를 관리하는 deleteMob, levelUp, loseMobHealth, checkDeath, isDead method들을 구현했다.
  4. 몬스터의 물리적 움직임을 제어하는 method로는 setDirection과 physic이 있다. 먼저, 맵의 정보를 가져와 몬스터가 움직일 수 있는 길과 아닌 길을 구분하고 dfs와 비슷한 방법으로 인접한 타일로 몬스터가 움직이도록 했다. 방문한 길은 따로 처리를 해주어서 다시 못 돌아가도록 구현했다.

● IDnum

  1. 타워나 몬스터 같은 객체들의 특징을 저장한 class이다. 따로 함수를 구현하지 않고 값만 저장되어 있다.
  2. 게임에 표시될 모든 객체들이 이미지를 가지고 있기 때문에 Game class에 있는 이미지배열을 쉽게 활용하기 위해 따로 구현했다.
  3. 객체들이 가지고 있는 특징이 다 다르기 때문에, 저장된 값들을 ID로 활용해 각각의 특징을 관리하기 용이하게 했다.

● Keyhandle

  1. 상점과 타워 설치를 위한 마우스의 움직임을 처리하는 class이다.
  2. MouseMotionListener와 MouseListener 인터페이스를 사용했다.

● Save

  1. 맵 파일을 읽는 class이다.
  2. 텍스트 파일을 읽어서 Map class 객체에 정보를 저장한다.

● 맵 파일

  1. 맵의 형식을 저장한 텍스트 파일이다.
  2. 첫 줄에는 그 맵에서 제거해야 할 몬스터의 수가 있다.
  3. 다음으로, 1과 0을 통해 몬스터가 지나갈 길과 아닌 길을 구분하도록 작성되어있다.
  4. 마지막으로는 맵에 타워를 설치할 때 필요한 정보들을 저장할 숫자들로 구성되어 있다. 초기 설정은 -1으로 아무것도 없는 상태이므로 -1로 작성되어 있다. (IDnum class에 있는 charAir 값)

추가하면 좋을 점 (Pull Request 환영합니다)

● 타워 종류 및 업그레이드 기능 ○ 현재는 명륜이, 율전이 타워만 있지만 다른 종류의 타워도 더 만들어서 게임의 다양성을 높이고 업그레이드 기능도 추가하면 게임의 재미를 높이는데 좋을 것 같다.

● 몬스터 종류 및 체력 증가 ○ 현재는 나오는 몬스터의 종류가 1개이지만 몬스터의 종류를 증가시켜 각 몬스터마다의 특징에 따라 필요한 타워를 만들면 더욱 게임의 재미가 높아질 것 같다. 또한 체력 증가 기능도 넣는다면 게임의 난이도도 더욱 올라갈 수 있을 것 같다.

● 레벨 별 배경음악 추가 ○ 각 레벨 별로 배경음악을 추가한다면 심심하지 않게 게임을 할 수 있을 것 같다.

● Map 디자인 향상 ○ Map디자인을 향상시켜 Map에 게임이름을 추가하고 성균관대학교 마크를 추가한다면 더욱 독창성 있는 타워 디펜스 게임이 될 것 같다.

About

2021 semester1 Java Programming Lab

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages