팀프로젝트 6일차.
팀프로젝트
전투 시스템 구현 중, 분명히 플레이어의 방어력이 몬스터의 공격력보다 높을 때만 데미지를 입도록 if 분기 처리를 했음에도 불구하고, 플레이어의 체력이 오히려 회복되거나 로그와 실제 데미지가 다른 현상 발생.
로그 확인 결과: The player has taken -5 damage!와 같은 기현상 포착.
Monster::Attack() 함수가 고정값이 아닌 랜덤값(Random Range)을 반환하는 구조였음.
if (c.GetDefense() > monsters->Attack())에서 한 번, else 문 내부 계산식에서 또 한 번 Attack()을 호출함.
첫 번째 호출에서는 방어 성공 판정이 났더라도, 두 번째 호출에서 더 큰 랜덤값이 나오면서 계산식이 꼬여버림 (주사위를 두 번 굴린 꼴).
함수를 여러 번 호출하지 않고, 지역 변수(Local Variable)에 해당 턴의 공격력을 딱 한 번만 저장하여 고정시킴.
모든 비교 연산과 데미지 계산에 이 고정된 변수를 사용함.