Unity_2기 내일배움캠프 TIL

Unity_2기 4주차 (231121)

잼잼재미 2023. 11. 21. 12:02

오늘은 지난주 스파르타 던전 배틀 (Text 게임) 만들기 팀 프로젝트를 마무리 작업을 했다. Text 출력 시, 순서가 안맞는 부분을 수정 했으며 추가적으로 한종류의 몬스터를 생성하는 함수를 랜덤한 몬스터 3종류가 생성하도록 수정했다. 그리고 작은 버그들을 몇가지 발견해서 수정했다.

 

팀 프로젝트 수정 내용


몬스터 종류 추가


기존 코드

private void ApperMonster()
{

    Random rand = new Random();
    int numberOfMob = rand.Next(1, 5);
    for (int i = 1; i <= numberOfMob; i++)
    {
        mobs.Add(new Mob("달팽이" + i, "달팽이", 2, 5, 10, 5, 5, false));

    }
}

 

 

수정 코드

private void ApperMonster()
{
    Random rand = new Random();
    int numberOfMob = rand.Next(1, 5);      // 몬스터 출현 숫자

    for (int i = 1; i <= numberOfMob; i++)
    {
        int randomMonster = rand.Next(0, 3);    // 몬스터의 종류 숫자

        switch (randomMonster)
        {
            case 0:
                mobs.Add(new Mob($"({i})달팽이", "달팽이", 1, 5, 10, 5, 5, false));
                break;

            case 1:
                mobs.Add(new Mob($"({i})슬라임", "슬라임", 2, 7, 15, 7, 6, false));
                break;

            case 2:
                mobs.Add(new Mob($"({i})고블린", "고블린", 3, 9, 20, 10, 8, false));
                break;

            default:
                break;
        }

    }
}

Random 함수로 랜덤값을 받아와서 각각 다른 몬스터 생성자를 호출해서 mobs List에 추가했다.

 

 

버그 수정 내용


1. 아이템 판매 가격 수정


public void SellItem(Job player, int index)
{
    if (index >= 0 && index < invenItems.Count)
    {
        Items sellInvenItem = invenItems[index];

        int totalGold = player.Gold + (int)(sellInvenItem.Price * 0.8f); // 판매가격 80% - 나재민
        player.Gold += (int)(sellInvenItem.Price * 0.8f);

        Console.Clear();
        Console.WriteLine($"아이템이 판매되었습니다: {sellInvenItem.Name}");
        Console.WriteLine($"전체 금액: {totalGold}");
        Console.WriteLine($"현재 소지금액: {player.Gold}");
        Console.WriteLine("");
        Console.WriteLine("아무키나 입력하시면 상점으로 이동합니다.");
        invenItems.RemoveAt(index);
        Console.ReadLine();
    }
}

아이템 기존 가격와 판매가격이 같아서 기존 가격의 80%로 수정했다. 아이템 가격이 int형으로 정의되어있어서 형변환을 사용했다.

 

 

2. 경험치 소수점 해결


private void LevelController()
{
    // 레벨업  
    if (player.Exp >= player.MaxExp)
    {
        player.Exp = player.Exp - player.MaxExp;
        player.Level++;
        player.MaxExp = (int)(player.MaxExp * 1.5f);

        Console.WriteLine();
        Console.WriteLine("레벨업을 했습니다!");
        Console.WriteLine($"Lv {player.Level - 1} -> Lv {player.Level}");

        // 레벨에 따라 캐릭터 능력치 변경 
        if (player.Occupation == "전사")
        {
            player.Strength += 2;
            player.Agility++;
            player.Intelligence++;
        }
        else if (player.Occupation == "궁수")
        {
            player.Strength++;
            player.Agility += 2;
            player.Intelligence++;
        }
        else if (player.Occupation == "마법사")
        {
            player.Strength++;
            player.Agility++;
            player.Intelligence += 2;
        }
        else
        {
            player.Strength++;
            player.Agility++;
            player.Intelligence++;
        }

        player.Health = player.MaxHealth;
        player.Mana = player.MaxMana;

    }
}

레벨별로 maxExp가 1.5씩 증가하는 것으로 구현했기때문에, 레벨업을 하다보면 소수점이 점점 늘어났다. 이 부분을 해결하기 위해 클래스에 정의되어 있는 경험치 형식을 float에서 int형으로바꾸고, 레벨업을 해서 maxExp가 늘어날 때, 1.5를 곱하고 int로 형변환을 해줘서 소수점을 모두 없앨 수 있었다.

 

 

오늘의 회고


오늘 프로젝트 게임을 거의 완성을 완료하고, 각자 작은 기능을 구현하거나 작은 버그들을 수정했다. 형변환을 이용한 작업이 많았다. 내일이 과제 제출일이기 때문에 내일 오전까지 최종으로 완성하고, 과제 제출과 ppt, 시연 영상 제작을 진행하기로 했다. 나는 시연 영상 제작을 맡았기 때문에 내일 최종 완료 후, 게임의 기능들을 검토하고 제작할 예정이다. 마무리를 잘해서 결과가 좋았으면 좋겠다!

'Unity_2기 내일배움캠프 TIL' 카테고리의 다른 글

Unity_2기 4주차 (231123)  (1) 2023.11.23
Unity_2기 4주차 (231122)  (0) 2023.11.22
Unity_2기 4주차 (231120)  (1) 2023.11.20
Unity_2기 3주차 (231117)  (0) 2023.11.17
Unity_2기 3주차 (231116)  (0) 2023.11.16