TIL

Dart 전투 RPG_GAME 트러블슈팅과 회고

kimw746 2024. 11. 8. 07:26

이번 과제를 하면서 문제점이나 해결방책들을 정리해서 써볼께요!!

일단 이번 과제의 시나리오부터 설명해보면,

1.  랜덤으로 값을 뽑아내는 기능

2. 파일 입출력을 처리하는 기능

3. 객체 지향을 활용한 전체 구조 생각하기

 

그리고 이번 과제의 필수 기능 들에 대해 설명할께요!

1. 파일로부터 데이터 읽어오기 가능.

게임 시작시 캐릭터와 몬스터의 스텟을 파일에서 읽어옵니다
캐릭터의 스탯은 characters.txt 파일에서 읽어옵니다.
몬스터의 스탯은 monsters.txt 파일에서 읽어옵니다.

전 .txt 파일이 아닌 csv파일 형식으로 만들었어요

 

다들 아시다시피 Dart:io 라이브러리의 File 클래스를 사용하여 파일을 읽을 거에요!

사진상의 나온것처럼 전 csv 파일로 저장을 했고 처음에는 읽어오지 못해서 굉장히 슬펐지만

문제는 파일 경로를 / 를 이용해 지정을 해줘야 했어요..ㅠ 전 그것도 모르고 characters.csv로 지정해놓고

아..왜 안되지ㅠㅠ 제가 class 파일을 따로 지정해놓고 왜 안되는지 30분이나 해맸어요!!

이것에 대해선 금요일에 '상대경로' 와 '절대경로' 에 대해서 설명하겠습니당!

 

다음 기능은 사용자로부터 캐릭터 이름 입력받기 기능 인데요

처음 게임을 시작할때 사용자가 캐릭터의 이름을 입력 할수 있게 하는 기능이지만, 전 보다 게임처럼 보이기위해

2개의 캐릭터를 골라서 할 수 있게 만들었어요!

 

 

다음 기능은 게임 종료 후 결과를 저장하는 기능을 넣을 거에요!

saveGameResult  함수 : 캐릭터의 이름, 남은 체력, 게임 결과 목록을 game_save.txt 파일에 저장하겠습니다.

파일은 기존 내용이 있으면 이어서 저장되도록 FileMode.append 모드를 사용했습니다.

그리고 게임 종료 와 승리 하게되면 saveGameResult 함수를 호출하여 게임 결과를 저장합니다.

이렇게 하면 게임이 종료 될때 마다 game_save.txt 파일에 게임 기록이 저장되어, 나중에 기록을 볼수 있게 됩니다.

 

전 게임이 진행될때 턴제 방식이아닌 게임결과만 나올수 있게 기능하도 록 되어 있었습니다만

while 루프를 사용해 플레이어가 몬스터를 공격하고, 몬스터가 살아 있으면 다음에 몬스터가 플레이어를 공격할수있게

변경하였습니다.

그리고 그 다음에는 플레이어가 매 턴 마다 1. 공격 또는 2. 방어 중 하나를 선택할수 있게 변경했고, 플레이어가 방어를 선택하면

몬스터가 공격한 데미지만큼 체력을 회복시키는 recoverHealth 메서드를 사용했습니다.

1. monster 클래스의 attackCharacter 메서드는 damage를 반환하여 캐릭터가 방어할 경우 회복할수있게 했습니다

2. 방어(defend)를 선택하면 데미지를 받은 후 recoverHealth 메서드로 해당 데미지만큼 회복합니당!

 

그 다음으로는 몬스터를 물리칠때마다 다음 몬스터와 대결할지 선택 할수있는 기능을 넣었습니다.

continueChoice 입력을 추가 하면 됩니당

 

그 다음!! 캐릭터의 현재 체력,공격력,방어력 상태를 출력하고, 몬스터의 체력,공격력도 출력하려 하는데요.

showStatus 메서드를 Character 클래스에 추가하면 현재 상태를 출력해줍니다.

하지만 제가 또 따로 찾아본 바로는 displayStatus 메서드도 사용 가능할것 같은데 이것에 대해서는 물어보려 합니다.

그리고 매턴마다 상태를 표시해야 하니 main 함수에 player.showStatus() 를 추가 했습니다.

 

음 다음!! 이게 좀 많이 헷갈렸고 어떻게 해야 막막 했었는데요~

"몬스터의 공격력은 캐릭터의 방어력보다 작을수 없고, 랜덤으로 지정하여 캐릭터의 방어력과

랜덤 값중 최대값으로 설정"

오랜 고민 끝에 main 함수에서 몬스터가 등장할때, monster.attackplayer.defense

0에서 9사이의 랜덤 값중 큰값으로 설정했고 max 함수를 사용해서 monster,attack이 캐릭터의

방어력보다 항상 크거나 같도록 보장 할수있는 함수를 사용 했습니다.

 

이렇게 이번 주차의 개인과제가 막을 내렸는데요~ 솔직히 많이 어려웠어요.. 이게 뭔지 함수를 어디다가 넣어야 되고,

메서드를 어디서 넣어야 자연스러운지 ui는 어떻게 해야 깔끔하게 나올건지 하루12시간 공부를 한다 했지만

전 12시간 가지곤 부족한건지 제 머리 용량이 부족한건지 몰랐지만 이렇게 과제 하나를 제손으로 천천히 하나씩

풀어보면서 몰랐던 부분들 알게되는 부분들이 차츰차츰 알게 되서 기분이 좋은것같습니다!

다음엔 더 열심히 공부해서 제 손으로 앱을 만들고 배포까지 하는 그 순간을 위해서 정진해보겠습니다!!

 

글 읽어주셔서 감사합니다!

'TIL' 카테고리의 다른 글

Flutter 입문 다지기  (0) 2024.11.11
Dart 문법 절대경로와 상대경로  (0) 2024.11.08
Dart 를 활용한 RPG GAME 만들기  (0) 2024.11.06
Dart 3주차 라이브러리를 이용해서 확장하기  (0) 2024.11.05
3주차..!  (0) 2024.11.04