이번에는 동기 프로그래밍으로 File reading 을 구현했지만, async 라이브러리의 클래스로 바꿔서 비동기로 다시 구현해야 한다.
-> 이번에는 읽어올 파일의 크기가 작지만, 파일 크기가 언제든지 바뀔 수 있으므로 비동기적으로 프로그래밍하는 것이 좋을 거서 같다.
-> 기존 코드에서 Future
를 어떻게 집어넣어야 할지 고민을 오래 했다...
그러다가 저녁에 팀원들과 회의하는 시간에 힌트를 얻었는데, 파일에서 데이터를 읽어오는 코드를 클래스로 따로 분리하면 좋을 것 같다.
-> 캐릭터 정보와 몬스터 정보를 각각 다른 방식으로 읽으므로 두 개 작성해야 한다.
게임 결과를 저장할지 말지 여부를 입력받는 부분에서 예외처리가 잘못되었으니 수정해야 한다.
-> 기존에는String
타입 변수를 입력받는데 잘못된 입력의 대비로 예외처리를 해두었다. 그런데 웬만해서 String
에 불가능한 문자열을 넣기 쉽지 않다.
-> 따라서 y를 입력하는 경우, n을 입력하는 경우, 둘 다 아닌 경우는 default
로 나눠서 case
를 구별해주었다.
게임 종료 조건을 목표치만큼 몬스터를 해치우는 것이 아닌, 리스트의 모든 몬스터를 해치우는 것으로 잘못 설정해두었기 때문에 수정했다.
-> monsterCount
를 미리 설정해두고 battle
메서드에서 몬스터를 물리칠 때마다 변수에서 1씩 빼면, monsterCount
가 0이 될 때 목표한 수만큼 몬스터를 해치웠다고 볼 수 있다.
String fightResult='승리';
if(character.hp<=0&&monsterCount!=0){
fightResult='패배';
}
else if(character.hp<=0&&monsterCount==0){
fightResult='무승부';
}
승패 판별 조건을 monsterList.isEmpty
에서 monsterCount
가 0인지 아닌지로 바꿨다.
캐릭터가 게임을 시작하는 시점에 확률적으로 보너스 체력 10을 얻는 기능이다.
30% 확률로 보너스를 얻기 때문에, if
문의 조건으로 Random()
값을 넣어주고 확률이 0.3이 되도록 설정했다.
void getBonusHp(){
if(Random().nextInt(10)<3){
character.hp+=10;
print('보너스 체력을 얻었습니다! 현재 체력: ${character.hp}');
}
}
이 함수를 게임을 시작할 때 호출하여 캐릭터가 보너스를 얻게 한다.