다트 콘솔 어플리케이션으로 제작한 턴제 rpg 게임.

 

 

 

기본적으로

 

  • 캐릭터와 몬스터의 공격 기능
  • 캐릭터의 방어 태세 - 캐릭터 방어력 증가
  • 캐릭터의 아이템 사용 - 캐릭터 공격력 증가
  • 시작 시 30% 확률로 캐릭터에게 추가 체력 부여
  • 몬스터가 3턴마다 방어력을 얻는 기능

 

이렇게 기본 기능, 버프를 주는 기능만 있기 때문에

캐릭터에게 디버프를 주는 기능을 추가해 밸런스를 맞추고자 했다.

 

 

 

캐릭터 부상 기능

[설명]

  • 몬스터가 캐릭터를 공격해 데미지를 입힐 때마다 10%의 확률로 캐릭터에게 부상을 입힌다.
  • 캐릭터가 부상을 입으면 공격력이 2 감소한다.

[조건]

  • 몬스터가 캐릭터를 공격하더라도 데미지가 없으면 부상을 입히지 못한다.
  • Random함수를 이용해 확률 기능을 사용한다.

 

 

구현 코드

getInjured 메서드 구현

 

Character클래스 내부 메서드로 구현했다.

 

  1. Random nextInt를 이용해 10 미만인 양의 정수를 랜덤으로 호출한다
  2. int chance는 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 중 하나의 값을 가진다.
  3. if문에서는 chance값이 0 이하, 즉 0일 때만 이하 코드를 실행하도록 한다.
  4. 즉 1/10, 10%의 확률로 플레이어가 부상을 입어 공격력(atk)가 감소한다.

 

몬스터의 캐릭터 공격 메서드 내 getInjured 호출

Monster 클래스의 attackChar(몬스터의 캐릭터 공격 메서드)내부에서 getInjured를 호출한다.

 

  • 몬스터가 플레이어를 공격할 때
  • 몬스터가 캐릭터를 공격해서 1이상의 피해를 입힐 때

호출된다.

 

 

여기까지 구현하고 테스트를 하던 도중 재미있는 사실을 발견했다.

 

 

좌, 기존에 있던 기능. 우, 방금 추가한 캐릭터 부상 기능

몬스터는 3턴이 지날 때마다 방어력이 증가하고,

캐릭터는 몬스터를 처치하지 못하고 턴이 계속 늘어나면 확률에 따라 방어력이 감소한다.

 

따라서 배틀이 길어지면 몬스터의 방어력이 캐릭터의 공격력과 같거나 커지게 된다.\

 

이 경우, 캐릭터는 절대로 몬스터를 처치할 수 없다.

 

 

플레이어가 절대로 게임을 종료할 수 없는 것을 방지하기 위해 새로운 게임 종료 분기를 추가하고, 이를 활용해 게임을 끝내 주어야 한다.

 

 

 

1. isCalledGame 변수 생성

Game 클래스 내에 bool 타입으로 isCalledGame을 생성

기본값은 false

 

2. checkCalledGame 메서드 생성

Game 클래스 내에 checkCalledGame 메서드 생성

플레이어 공격력이 몬스터 방어력보다 작거나 같은 지 확인한다.

 

플레이어 공격 시 데미지 계산식은 

데미지 = {플레이어 공격력} - {몬스터 방어력}

이므로 플레이어 공격력이 몬스터 방어력보다 클 때에만 게임이 성립한다.

 

플레이어 공격력이 몬스터 방어력보다 작거나 같으면 isCalledGame 변수 값을 true로 바꾼다.

 

 

3. 전투 플로우를 담당하는 메서드에서 checkCalledGame 호출 

Game내의 battle메서드

 

몬스터 턴이 끝난 후, 즉

 

몬스터 공격이 끝난 후 => getInjured 호출 - 10퍼센트 확률로 캐릭터 공격력 감소
몬스터 턴 수가 올라간 후 => 몬스터 턴이 3의 배수인 경우 몬스터 방어력 증가

 

캐릭터의 공격력이 감소하고 몬스터의 방어력이 증가할 가능성이 있는 코드의 실행 직후에 checkColdGame을 실행한다.

 

isCalledGame 이 true면 break;로 battle메서드를 빠져나간다.

 

 

4. 게임 플로우를 담당하는 메서드에서 isCalledGame 확인

Game 내의 startGame메서드

 

battle메서드에서 break;를 사용하여 빠져나오자마자 다시 한 번 isCalledGame을 확인한다.

break;로 for문 escape,

endGame메서드로 게임을 종료한다.

 

 

배운 점

기능을 추가할 때 테스트에 따라 예상치 못한 결과가 나올 수도 있다는 것을 처음 체험했다.

여러 번 실행해 보고 다양한 값을 넣어 보면서 테스트하는 것의 필요성을 느꼈다.

 

 

+ Recent posts