[TIL] 팀프로젝트 (TextRPG) 4/4

백성은·2025년 4월 25일

TIL

목록 보기
21/34

✅ 들어가기 앞서

팀프로젝트 발표를 위해 발표자료를 넘겨줘야해서 구현한 TextRPG의 전투 시스템을 구조 정리를 해보았다.

✅ 전투 흐름 요약 - Battle.cs

핵심 메서드 : Battle()

  • while 루프를 이용해 플레이어 체력 > 0 && 몬스터 중 한 마리라도 살아있을 경우 전투
  • 매 턴마다 PlayerTurn() -> MonsterTurn() 순으로 진행

PlayerTurn

  • 몬스터 리스트 출력 + 번호 입력 유도
  • int.TryParse()로 잘못된 입력 방지
  • 선택된 몬스터를 AttackResult()로 전달

AttackResult

  • 선택된 몬스터와의 전투 처리
  • PlayerBasicAttck -> PlayerAttack 생성자로 전달
  • Attack() 호출로 데미지/회피/치명타 처리
  • 공격 결과 출력 및 사망 처리

MonsterTurn

  • foreach로 살아있는 모든 몬스터가 한 번씩 플레이어를 공격
  • MonsterBasicAttack -> MonsterAttack 생성자로 전달
  • 몬스터에게 치명타는 없음, 데미지와 회피만 처리

✅ 공격 구조 - Attack.cs

인터페이스 : IAttack

  • (int damage, bool isCritical, bool isMiss) 튜플로 반환
  • 공격자는 플레이어든 몬스터든 동일한 구조

PlayerAttack

  • 생성자에서 IDamageCalculator를 받음
  • Attack(monster) 실행 시
    • 플레이어 공격력, 몬스터 방어력을 계산기로 전달
    • 데미지 결과를 몬스터 체력에 반영

MonsterAttack

  • 구조는 PlayerAttack과 거의 비슷
  • 공격 대상은 게임매니저를 통해 받은 플레이어값
  • 몬스터에게 치명타 공격은 없음 (isCritical = false)

✅ 데미지 계산기 구조 - DamageCalculator.cs

인터페이스 : IDamageCalculator

  • 공격력과 방어력을 받아옴
  • (damage, isCritical, isMiss) 튜플로 반환
  • 실제 계산 로직을 유연하게 분리 가능

PlayerBasicAttack

  • 공격력의 10% 오차 반영
  • 지정한 치명타 확률, 회피 확률 반영
  • 최종 데미지와 치명타, 회피 여부 반환

MonsterBasicAttack

  • PlayerBasicAttack과 거의 비슷
  • 치명타는 제외 (isCritical = false)

✅ 정리 및 느낀점

공격과 계산을 인터페이스로 분리하여 사용하니 유지보수와 확장성 부분에서 확실이 좋은거 같고,
이후 기본공격 외에 스킬 공격과 같은 기능들도 쉽게 추가 가능해진 구조인거 같다.
객체지향 설계에 대해 조금 더 가까워진 느낌이다.

profile
게임 개발일지

0개의 댓글