λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

κ²Œμž„κ°œλ°œ

둜그라이크 λ§΅ 생성 방식

둜그라이크 μž₯λ₯΄μ—μ„œλŠ” λͺ¨λ“  μš”μ†Œγ…‘λ¬Όμ•½, 무기의 μŠ€νƒ―, μ£Όλ¬Έμ„œ λ“±λ“±γ…‘κ°€ λžœλ€ν•˜κ²Œ μƒμ„±λ˜κ³  μ •ν•΄μ§‘λ‹ˆλ‹€. μ΄λ ‡κ²Œ λžœλ€ν•˜κ²Œ μ •ν•΄μ§€λŠ” μš”μ†Œλ“€ 쀑 λ‘œκ·ΈλΌμ΄ν¬μ—μ„œ κ°€μž₯ μ€‘μš”ν•˜λ©΄μ„œλ„ 기초적인 μš”μ†ŒλŠ” λ°”λ‘œ 'λ§΅'이라고 μƒκ°ν•©λ‹ˆλ‹€. 아무리 μ•„μ΄ν…œ, λ¬Όμ•½ 등이 λžœλ€ν•˜κ²Œ κΈ°λŠ₯ν•œλ‹€κ³  해도 항상 λ˜‘κ°™μ€ 맡을 ν”Œλ ˆμ΄ν•œλ‹€λ©΄ 점점 맡에 μ΅μˆ™ν•΄μ§€λ©° ν”Œλ ˆμ΄μ–΄μ—κ²Œ 'μ„±μž₯'ν•˜λŠ” λŠλ‚Œμ„ 쀄 κ²ƒμž…λ‹ˆλ‹€. μ΄λŠ” κ³§, 둜그라이크 μž₯λ₯΄μ˜ 재미λ₯Ό μžƒμ–΄λ²„λ¦¬λŠ” κ²ƒμž…λ‹ˆλ‹€. 그런 μ˜λ―Έμ—μ„œ λžœλ€ν•œ 맡의 생성 방식은 둜그라이크 μž₯λ₯΄μ— μžˆμ–΄ 맀우 μ€‘μš”ν•œ 주제라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 이번 κΈ°νšŒμ— 둜그라이크 λ§΅ 생성 방식에 λŒ€ν•΄ μžμ„Ένžˆ κ³΅λΆ€ν•΄λ³΄κ³ μž μ΄λŸ¬ν•œ 글을 μ“°κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 참고둜, 저도 이제 막 곡뢀λ₯Ό μ‹œμž‘ν•œ ν•™λΆ€μƒμ΄λΌμ„œ μ •ν™•ν•œ 정보가 아닐 수 μžˆμŠ΅λ‹ˆλ‹€.

 

λ¨Όμ €, 둜그라이크 λ§΅ 생성 방식에 κ³΅ν†΅μ μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ” 단어가 μžˆμŠ΅λ‹ˆλ‹€. λ°”λ‘œ '절차적 생성'μž…λ‹ˆλ‹€. μ΄λŠ” μ‚¬λžŒμ΄ 데이터λ₯Ό 일일히 직접 μƒμ„±ν•˜λŠ” 방식이 μ•„λ‹ˆκ³  μ»΄ν“¨ν„°μ—κ²Œ νŠΉμ • μ•Œκ³ λ¦¬μ¦˜μ„ 절차적으둜 μˆ˜ν–‰ν•˜κ²Œ ν•˜μ—¬ μžλ™μœΌλ‘œ λžœλ€ν•œ 데이터λ₯Ό λ§Œλ“œλŠ” 방식을 λ§ν•©λ‹ˆλ‹€. 절차적 생성은 λ§΅ μƒμ„±μ—λ§Œ κ΅­ν•œλ˜λŠ” λ‹¨μ–΄λŠ” μ•„λ‹ˆκ³ , μ•„μ΄ν…œ, λͺ¬μŠ€ν„° 생성 λ“± μ—¬λŸ¬ μš”μ†Œμ—λ„ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 보톡 맡에 λŒ€ν•΄μ„œλŠ” '절차적 λ§΅ 생성' μ΄λΌλŠ” 단어λ₯Ό μ‚¬μš©ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ–΄μ¨Œλ“  μ€‘μš”ν•œ 것은 이 κ³Όμ •μ—μ„œ μ‚¬μš©λ˜λŠ” 'μ•Œκ³ λ¦¬μ¦˜'μž…λ‹ˆλ‹€.

 

ν•œκΈ€λ‘œ 인터넷에 검색해보면 λŒ€ν‘œμ μœΌλ‘œ μ‚¬μš©λ˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ€ 두 κ°€μ§€λ‘œ λ³΄μž…λ‹ˆλ‹€. λ¨Όμ € ν•˜λ‚˜λŠ” BSP Binary Space Partitioningμž…λ‹ˆλ‹€. μ΄λŠ” μ΄λ¦„μ—μ„œλ„ μ•Œ 수 μžˆλ“―μ΄ μž¬κ·€μ μœΌλ‘œ 곡간을 λΆ„ν• ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 이 μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄ 맡을 λ§Œλ“œλŠ” μ ˆμ°¨λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

  1. νŠΉμ • μ‚¬κ°ν˜• 곡간을 두 개둜 λ‚˜λˆ„λŠ” 것을 n번 μž¬κ·€ν•˜μ—¬ 트리 ν˜•μ‹μœΌλ‘œ μ €μž₯ (κ°€λ‘œκ°€ 더 크면 μ„Έλ‘œμ€„λ‘œ λ‚˜λˆ„κ³ , μ„Έλ‘œκ°€ 더 크면 κ°€λ‘œμ€„λ‘œ λ‚˜λˆ”)
  2. λ‚˜λ‰˜μ–΄μ§„ 각 곡간을 μ΄ˆκ³Όν•˜μ§€ μ•ŠλŠ” 곡간을 ν•˜λ‚˜μ”© λ§Œλ“¦
  3. leaf λ…Έλ“œλ₯Ό 타고 μ˜¬λΌκ°€λ©΄μ„œ rootλ…Έλ“œλ₯Ό λ§Œλ‚ λ•ŒκΉŒμ§€ μžμ‹ λ…Έλ“œλΌλ¦¬ 길을 μ—°κ²° (두 개둜 λ‚˜λ‰˜λ©΄μ„œ 곡간이 λ§Œλ“€μ–΄μ§„ μ‚¬κ°ν˜•μ„ μ„œλ‘œ μ—°κ²°ν•΄μ€€λ‹€.)

 

μ΄λŸ¬ν•œ 과정을 그림으둜 λ‚˜νƒ€λ‚΄λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

μ•„μ΄νŒ¨λ“œλ‘œ 직접 κ·Έλ¦Ό

 

이게 ν˜„μž¬ κ°€μž₯ 보편적인 λ°©λ²•μœΌλ‘œ μ‚¬μš©λ˜λŠ” μ•Œκ³ λ¦¬μ¦˜μΈ 것 κ°™μŠ΅λ‹ˆλ‹€.

 

두 λ²ˆμ§Έλ‘œλŠ” μ…€λ£°λŸ¬ μ˜€ν† λ§ˆνƒ€ Cellular Automata μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. μ΄λŠ” ν”½μ…€ λ‹¨μœ„μ˜ 세포 Cell듀이 μžμ‹ μ˜ μ£Όλ³€ μ„Έν¬μ˜ μƒνƒœμ— 따라 μžμ‹ μ˜ μƒνƒœλ₯Ό μ •ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€. 보톡 μžμ—°μŠ€λŸ¬μš΄ 동꡴과 같은 것을 λžœλ€ν•˜κ²Œ λ§Œλ“€λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

 

이 μ•Œκ³ λ¦¬μ¦˜μ˜ μž‘λ™ μ ˆμ°¨λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

  1. μ£Όμ–΄μ§„ 곡간 내에 λ¬΄μž‘μœ„λ‘œ 타일을 채움
  2. 각 μ„Έν¬λ§ˆλ‹€ μžμ‹ μ„ κΈ°μ€€μœΌλ‘œ 3x3 타일을 λ§Œλ“¦
  3. κΈ°μ€€ 세포 μ£Όμœ„μ˜ 세포λ₯Ό 보고 κΈ°μ€€ 세포λ₯Ό λ³€ν™”

 

3번 κ³Όμ •μ—μ„œ μ£Όμ˜ν•  점은 κΈ°μ€€ 세포λ₯Ό λ³€ν™”ν•œ 것을 이전 맡이 μ•„λ‹Œ μƒˆλ‘œμš΄ 맡에 μ €μž₯ν•΄μ•Ό ν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€. 즉, 항상 μ™Όμͺ½ 그림처럼 과정이 μ§„ν–‰λ˜μ–΄μ•Ό ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 그리고, ν…Œλ‘λ¦¬μ— μœ„μΉ˜ν•œ 타일이라면 3번의 검사 기쀀을 μ™„ν™”ν•˜μ—¬ μ μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

 

https://gamedevelopment.tutsplus.com/generate-random-cave-levels-using-cellular-automata--gamedev-9664t

 

 

https://www.roguebasin.com/index.php/Cellular_Automata_Method_for_Generating_Random_Cave-Like_Levels

 

'μ§‘μ—κ°ˆκ³ μ–‘' 개발자 λΆ„κ»˜μ„œλ„ 이 μ•Œκ³ λ¦¬μ¦˜μ„ μ‘μš©ν•˜μ—¬ λžœλ€ν•œ λ˜μ „μ„ μƒμ„±ν•˜μ…¨λ”κ΅°μš”. 재밌게 ν–ˆλ˜ κ²Œμž„μ΄ λ‚˜μ™€μ„œ μ’€ λ°˜κ°€μ› μŠ΅λ‹ˆλ‹€.

 

μ΄λ ‡κ²Œ λŒ€ν‘œμ μΈ 두 κ°€μ§€ μ•Œκ³ λ¦¬μ¦˜λ“€μ„ κ³΅λΆ€ν•΄λ΄€μŠ΅λ‹ˆλ‹€. 이외에도 터널링 μ•Œκ³ λ¦¬μ¦˜, μ—¬λŸ¬ 개의 방을 흩뿌렀 길을 μ—°κ²°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ λ“± λ§Žμ€ μ•Œκ³ λ¦¬μ¦˜λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€. 근데 μ΄λŸ¬ν•œ 절차적 생성 방식을 μ΄μš©ν•˜μ—¬ μƒμ„±λœ λ§΅μ—λŠ” μ•„μ£Ό 치λͺ…적인 단점이 μžˆμŠ΅λ‹ˆλ‹€. λ°”λ‘œ κ²Œμž„μ΄ λ‹¨μ‘°λ‘œμ›Œμ§€κ±°λ‚˜, ν”Œλ ˆμ΄ ν–ˆμ„ λ•Œ μž¬λ―Έμ—†λŠ” 맡이 생성될 수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·Έλž˜μ„œ μ‹€λ¬΄μ—μ„œλŠ” 절차적 방식을 거의 μ‚¬μš©ν•˜μ§€ μ•Šκ³  맡에 λŒ€ν•œ ν…œν”Œλ¦Ώμ„ λ§Œλ“€κ³  κ·Έ ν…œν”Œλ¦Ώλ“€μ„ 랜덀으둜 λ³΄μ—¬μ£ΌλŠ” 방법을 μ΄μš©ν•œλ‹€κ³  ν•©λ‹ˆλ‹€. μ‚¬μš©ν•œλ‹€κ³  ν•˜λ”λΌλ„ 절차적 λ°©μ‹μœΌλ‘œ μƒμ„±λœ 맡에 레벨 λ””μžμ΄λ„ˆλ“€μ΄ ν”Œλ ˆμ΄μ–΄λ“€μ΄ 재미λ₯Ό λŠλ‚„ 수 μžˆλ„λ‘ ν›„μ²˜λ¦¬ν•˜μ—¬ ν…œν”Œλ¦Ώμ„ μ œμž‘ν•˜κΈ° λ•Œλ¬Έμ— 100% 절차적 방식을 μ΄μš©ν•΄μ„œ λ§Œλ“€μ§€λŠ” μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.