개발일지

[C# 팀 프로젝트] TextRPG 확장

Hwone 2023. 9. 1. 17:09

https://github.com/j-miiin/B9_Finding_Potato.git

 

GitHub - j-miiin/B9_Finding_Potato: 스파르타 코딩클럽 내일배움캠프 B09 (팀 구련보등 )

스파르타 코딩클럽 내일배움캠프 B09 (팀 구련보등 ) . Contribute to j-miiin/B9_Finding_Potato development by creating an account on GitHub.

github.com

 

 

이전에 4주차 과제에서 만들었던 기능들을 더 확장시켜서 심화된 버전으로 팀원들과 함께 만들어보는 프로젝트이다 

내가 구현한 기능 

- 스테이지 추가 및 입장 로직 

이 로직을 만들면서 스테이지에 몬스터를 랜덤하게 등장시키고 싶었다 그래서 만든 함수가 아래에 있는 함수이다 

 

난이도에 따라 랜덤한 몬스터List 함수

 List<Monster> CreateRandomMonsterLineup(List<Monster> monsters, int numberOfMonsters)
    {
        Random random = new Random();

        //사용가능한 몬스터 (중복 방지를 피하기 위해 초기에 몬스터 리스트 복사)
        List<Monster> availableMonsters = new List<Monster>(monsters);

        //선택된 몬스터 
        List<Monster> selectedMonsters = new List<Monster>();

        // 1~numberOfMonsters 사이에서 랜덤한 값 저장
        numberOfMonsters = random.Next(2, numberOfMonsters+1);

        for (int i = 0; i < numberOfMonsters; i++)
        {
            //사용가능한 몬스터가 없을 경우 종료
            if (availableMonsters.Count == 0)
            {
                break;
            }

            //사용가능한 몬스터 리스트에서 랜덤한 인덱스 선택 
            int randomIndex = random.Next(availableMonsters.Count);

            //선택된 몬스터를 선택된 몬스터 리스트에 추가하고 사용가능한 몬스터 리스트에서는 삭제 
            Monster selectedMonster = availableMonsters[randomIndex];
            selectedMonsters.Add(selectedMonster);
            availableMonsters.RemoveAt(randomIndex);
        }
       
        return selectedMonsters;
    }

고민한 내용 

1. List에 몬스터 중복 불가 

: 사용 가능한 몬스터 List를 만들어서 랜덤하게 섞어서 선택된 몬스터는 List 에서 삭제 

 

2. 원본 List  변경하면 안됨

: 새로운 List를 생성하여 원본 List를 복사

 

3. 몬스터들이 랜덤하게 등장하는것 뿐만 아니라 마리 수 까지도 랜덤 

: 매개변수로 최대 마리 수를 받아와서 랜덤 인덱스를 반복문을 이용하여 몬스터 마리 수 설정 

 - 기본 전투 로직 틀 

전에 과제 했던 부분과 동일하나 처음 구현했을 때는 기본 공격에서만 전투 정보 화면을 출력하였으나, 스킬 구현 하시는 분도 사용해야 해서 다른 분들도 사용할 수 있게 좀 더 확장성 있게 따로 함수를 만들어서 진행하였다

이때 내가 진짜 팀 프로젝트를 하고 있구나 라고 느껴지는 부분이었다 좋았다 

 

- 몬스터 클래스 추가

새로운 몬스터를 추가하고 Monster 별로 실행값이 다른 함수들이 있다면 부모 클래스에서 virtual 키워드를 사용하여 자식 클래스에서 override하여 함수를 만들었다  ex) AttackMessage() //몬스터별로 공격 메세지 다름 

 

EndingScene과 UI 는 로직 보다는 그냥 노가다 콘솔 꾸미기이다

 

- 아쉬운 점 

반복되는 코드들은 따로 빼서 함수화를 더 많이 시켜보았으면 좋았을 것 같다

다른 팀원분들이 유용하게 쓰일만한 함수를 많이 만들어주셨는데 나는 딱히 그런 함수가 거의 없었다 

팀 프로젝트 코드들을 참고하여 익숙해지고 다음에 만들어보면 좋겠다

 

팀원분들과는 자주 소통을 해서 서로가 만든 코드에 대해서 질문하고 설명하여 코드를 합치는 부분에서 문제가 없었다 우리 팀에 제일 문제점이었던 것은 .gitignore 파일을 맨 처음에 넣지 않아서 충돌이 일어났던 일 말고는 없었던것 같다 

 

저녁 9시 넘어서 까지도 작업을 진행하며, 이야기를 많이 했어서 그런가 금방 친해졌는데 또 팀이 변경된다고 하여 아쉽다