Skip to content

Latest commit

ย 

History

History
85 lines (64 loc) ยท 7.12 KB

File metadata and controls

85 lines (64 loc) ยท 7.12 KB

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์— ๊ฒŒ์ž„์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต ๋งˆํฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ๋”์šฑ ๋…์ฐฝ์„ฑ ์žˆ๋Š” ํƒ€์›Œ ๋””ํŽœ์Šค ๊ฒŒ์ž„์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค.