TIL 0112 TextRPG (팀) - 5 / 유클리드 호제법, 피보나치 수열

강성원·2024년 1월 15일
0

TIL 오늘 배운 것

목록 보기
16/70
post-thumbnail

오늘 개발한 내용

오늘은 내가 맡았던 부분을 플레이 해보며 다듬는 느낌으로 진행했다.

게임 진행 중 마나의 표시

내가 스킬을 구현하며 마나도 캐릭터의 필드로 넣었는데 현재 마나 상태를 보여주지 않는 부분이 있었다.

  • 상태창에서 마나표시
  • 여관에서의 상태 표시

코드라고 해봤자 player.Mp 이거 추가해준 것들이 끝이라 사진만 올렸다.

여관에서 마나 회복

게임에 마나 회복이 추가해줬다.
여관에 돈내고 체력회복하는 파트가 있어서 무료로 명상을 할 수 있게 추가구현했다.

internal class Player : IDamagable
{
	,,, 생략 ,,,
	public void Meditate() => Mp = MaxMp;
    ,,, 생략 ,,,
}


오류가 났던 부분

팀장님이 게임의 데이터 저장하고 다시 불러오는 과정에서 찾은 오류를 알려주셔서 고치는 과정이 있었다.

게임 데이터 로드 오류

Skill 클래스에는 Owner라는 Player 타입의 참조 변수가 있었고, 생성자에서 Player 객체를 전달 받았다.
마나의 소모를 편하게 구현하기 위해서 넣어놨었는데 문제가 난거다.

Json으로 저장할 때 Skill클래스 객체들의 내용도 저장하는데 그 떄 Player 객체를 참조하는 필드 Owner도 저장했다.

동적할당하는 것은 절대 이런 식으로 저장하면 안되는 것인데..

C++로 치면 파일에다가 동적할당으로 생성한 객체의 주소를 저장해놓고 나중에 또 써보겠다는 것과 같다.(흑흑)

그래서 Skill 클래스에서 Owner 필드를 없애고 Owner를 사용하는 메서드는 Player를 직접 매개 변수로 받도록 수정해주었다.

한 가지의 메서드만 예를 들면 아래와 같다.

public float UseSkill(float originDamage)
{
	Owner.Mp -= Cost;                       // 마나 소모
	return originDamage * AtkMultiplier;    // 스킬 배수 계산 반영 데미지 반환
}

이 메서드를

public float UseSkill(Player player, float originDamage)
{
	player.Mp -= Cost;                       // 마나 소모
	return originDamage * AtkMultiplier;    // 스킬 배수 계산 반영 데미지 반환
}

이와 같이 Player를 직접 전달 받도록 변경해주었다.


오늘 공부한 내용

유클리드 호제법

나는 수포자였기에 알고리즘 책을 공부하며 유클리드 호제법을 처음 보게 됐다.
간단히 말하면 유클리드 호제법은 두 정수의 최대 공약수를 찾아주는 재귀 형태의 알고리즘이다.
멋진 이름이 무색하게 내용은 간단하다.

유클리드 호제법 정리 글

피보나치 수열

피보나치 수열은 가끔 보면 "아~맞다. 이런 원리지" 하고 또 까먹는 내용이었는데, 글로 정리해보며 좀 더 확실하게 알 수 있었다.
피보나치 수열을 베이스 케이스와 함수 호출로만 구현하면 성능상 문제가 있어 메모이제이션 동적 계획법이라는 기법을 사용한다고 한다. (뭔가 무서운 이름이다.)
그 내용은 내일 공부해볼 것이다.

피보나치 수열 정리 글

profile
개발은삼순이발

0개의 댓글