포슀트

[TIL]2025-07-10_C# TextRPG λ§Œλ“€κΈ°

[TIL]2025-07-10_C# TextRPG λ§Œλ“€κΈ°

πŸ—“οΈ TIL - μ½˜μ†” 기반 RPG μ‹œμŠ€ν…œ κ΅¬ν˜„ (C#)

πŸ”§ 였늘 κ΅¬ν˜„ν•œ λ‚΄μš©

  • μ½˜μ†” 기반 RPG κ²Œμž„ μ‹œμŠ€ν…œ ꡬ좕
  • ν”Œλ ˆμ΄μ–΄ μƒνƒœ 보기 κΈ°λŠ₯ κ΅¬ν˜„
  • 인벀토리 μž₯μ°© 관리 μ‹œμŠ€ν…œ
  • μƒμ μ—μ„œ μ•„μ΄ν…œ ꡬ맀 κ°€λŠ₯
  • λ˜μ „ μž…μž₯ 및 κ²°κ³Ό 처리 (성곡/μ‹€νŒ¨)
  • λ ˆλ²¨μ—… 및 전직 이벀트
  • κ²Œμž„ λ‚΄ κ³¨λ“œ, HP, 곡격λ ₯/λ°©μ–΄λ ₯ 반영 처리

πŸ“š 였늘 ν•™μŠ΅ν•œ κ°œλ…

πŸ”Έ enum

  • 의미 μžˆλŠ” μƒμˆ˜ 집합을 λ§Œλ“€κΈ° μœ„ν•œ ν‚€μ›Œλ“œ
  • 가독성 ν–₯상, μ˜€νƒ€ λ°©μ§€, 쑰건 처리 용이
  • μ˜ˆμ‹œ:

```csharp enum CharacterState { Idle, Attack, Damaged, Dead }

πŸ”Έ μΊ‘μŠν™” (Encapsulation) 객체의 λ‚΄λΆ€ 데이터λ₯Ό λ³΄ν˜Έν•˜λŠ” κ°œλ…

private ν•„λ“œ + public λ©”μ„œλ“œλ‘œ μ œμ–΄

μ˜ˆμ‹œ:

csharp 볡사 νŽΈμ§‘ private int hp; public void TakeDamage(int dmg) { hp -= dmg; } πŸ”Έ λ©”μ„œλ“œ λ°˜ν™˜ν˜• λ°˜ν™˜ν˜• μš©λ„ μ˜ˆμ‹œ void λ°˜ν™˜ μ—†μŒ PrintMenu() int μ •μˆ˜ λ°˜ν™˜ int GetLevel() bool 쑰건 νŒλ‹¨ bool IsDead() string ν…μŠ€νŠΈ λ°˜ν™˜ string GetStatusText()

πŸ”Έ foreach vs for foreach: 리슀트λ₯Ό μˆœνšŒν•˜λ©΄μ„œ μš”μ†Œλ₯Ό 읽을 λ•Œ foreact.jpg
for: 인덱슀λ₯Ό μ΄μš©ν•΄ 접근이 ν•„μš”ν•  λ•Œ for.jpg

비단 이번뿐 μ•„λ‹ˆλΌ κ·Έλ™μ•ˆμ˜ 개인 κ³΅λΆ€λ‚˜/μ•Œκ³ λ¦¬μ¦˜/ν”„λ‘œμ νŠΈλ•Œλ§ˆλ‹€ forλ¬Έκ³Ό foreach의 μž₯단점을 잘 κ΅¬λΆ„ν•˜μ§€ λͺ»ν–ˆμ—ˆλ‹€.
for문으둜 μΆ©λΆ„ν•˜λ‹€λ©΄ foreachλ₯Ό μ™œ μ¨μ•Όν• κΉŒβ€¦ κ·Έλƒ₯ μ΅μˆ™ν•œκ±° μ“°λŠ”κ²Œ 졜고 μ•„λ‹κΉŒ μ‹Άμ—ˆλ‹€. λ‹€λ§Œ, 상점/μŠ€ν‚¬κ³Όκ°™μ΄ 주기적으둜 λ­”κ°€ 잘 λ³€ν•˜μ§€μ•ŠλŠ” 객체가 μžˆλ‹€κ³ ν•˜λ©΄ foreach문이 훨씬 κ°„κ²°ν•˜κ³  λͺ…ν™•ν•΄μ§€λ„€.

Gold.jpg 이 뢀뢄이 이번 ν”„λ‘œμ νŠΈμ—μ„œ κ°€μž₯ 크게 κΉ¨λ‹¬μŒμ„ 얻은 λ‚΄μš©μΈλ“―ν•˜λ‹€. λͺ¨λ“  μ½”λ“œμ—μ„œ main.cs에닀가 λ‹€ κ΅¬ν˜„μ„ν–ˆλ‹€. μ½”λ“œλž€, 잘 μž‘λ™ν•˜λ©΄ κ·Έλ§Œμ΄λ‹€. 라고 μƒκ°ν–ˆλ‹€. 근데 이 μƒκ°μœΌλ‘œ ν•˜λ‹€λ³΄λ‹ˆ κ°„λ‹¨ν•œ ν”„λ‘œκ·Έλž¨ μ‘°μ°¨ main.csμ—μ„œ 1200μ€„μ΄λ„˜μ—ˆλ‹€. λ¬Όλ‘  1200쀄이 λ§Žμ€κ±΄ μ•„λ‹ˆλ‹€. λ‹€λ§Œ, λ°˜λ³΅λ˜λŠ” μ½”λ“œκ°€ λ„ˆλ¬΄ λ§Žμ•„μ„œβ€¦ μ΅μˆ™ν•˜μ§€λŠ” μ•Šμ§€λ§Œ 처음 μ“°λŠ” ꡬ쑰체 ν•¨μˆ˜κ°€ μ•žμœΌλ‘œμ˜ λ˜μ „ λ³΄μƒμ—μ„œ μš”κΈ΄ν•˜κ²Œ 꺼내썼닀.

μ΄ν›„μ˜ ν”„λ‘œμ νŠΈν• λ•ŒλŠ” κ°€λŠ₯ν•˜λ©΄ 클래슀/λ‹€μ΄μ–΄κ·Έλž¨ μ—°μŠ΅μ„ 많이 ν•΄μ•Όκ² λ‹€.

struct.jpg

csharp 볡사 νŽΈμ§‘ foreach (Item item in inventory) { if (item.IsEquipped) attack += item.Value; }

🧠 배운 점 / λŠλ‚€ 점 μ½˜μ†” ν™˜κ²½μ—μ„œλ„ μΆ©λΆ„νžˆ λͺ°μž…감 μžˆλŠ” RPG κ²Œμž„μ„ λ§Œλ“€ 수 μžˆλ‹€.

μΊ‘μŠν™”λ‚˜ enum 같은 OOP κ°œλ…μ΄ κ²Œμž„ ꡬ쑰화에 정말 μ€‘μš”ν•˜λ‹€λŠ” κ±Έ λŠλ‚Œ

μ „νˆ¬ 둜그λ₯Ό 였λ₯Έμͺ½μ— 좜λ ₯ν•˜κ±°λ‚˜ ν…μŠ€νŠΈ 색상, 효과λ₯Ό μ£ΌλŠ” 것도 CLIμ—μ„œ UX에 영ν–₯ 쀌

μ•„μ΄ν…œμ„ μž₯μ°©ν•˜κ±°λ‚˜ λŠ₯λ ₯치λ₯Ό μ μš©ν•˜λŠ” κ³Όμ •μ—μ„œ 데이터 흐름을 μ„€κ³„ν•˜λŠ” 감각이 길러짐

βœ… κ°œμ„ ν•  점 μ „νˆ¬ μ‹œμŠ€ν…œμ„ 클래슀 λ‹¨μœ„λ‘œ 더 뢄리할 수 있음 (BattleManager, Enemy, Skill λ“±)

λ ˆλ²¨μ—… 쑰건을 switch λ˜λŠ” λ”•μ…”λ„ˆλ¦¬λ‘œ κ°„κ²°ν™” κ°€λŠ₯

λ°˜λ³΅λ˜λŠ” μ½”λ“œ(λ˜μ „ μ‹€νŒ¨, λ ˆλ²¨μ—… 이벀트 λ“±)λ₯Ό ν•¨μˆ˜ν™”ν•˜λ©΄ μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μ›Œμ§

이 κΈ°μ‚¬λŠ” μ €μž‘κΆŒμžμ˜ CC BY 4.0 λΌμ΄μ„ΌμŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.

Β© udjoo. 일뢀 ꢌ리 보유

Powered by Jekyll with Chirpy theme