ShopScene

ShopScene.cs

image-20250204192309701

  • 아이템을 구매 또는 판매 할 수 있는 공간으로 넘어가기 위한 Scene
  • 이미 소지한 아이템은 가격 표시 제한

ShopBuyScene

ShopBuyScene.cs

image-20250204192435535

  • 이미 가지고 있는 아이템은 중복 구매를 막는 기능 (가격 표시 제한 및 구매 제한 기능)

BuyItem

  • 구매 시도 시 몇 가지 분기를 거쳐 구매를 진행 한다.
    • 이미 소지한 아이템인지
    • 보유 골드가 충분 한지
private void BuyItem(int idx)
{
    // 구매 불가
    if (core.items[idx - 1].Own)
    {
        Console.WriteLine("이미 구매한 아이템입니다.");
        Thread.Sleep(1000);
    }
    // 구매 가능
    else
    {
        // Gold 충분
        if (core.items[idx - 1].Gold <= character.Gold)
        {
            core.items[idx - 1].Own = true;
            character.Gold -= core.items[idx - 1].Gold;
            Console.WriteLine("구매를 완료했습니다.");
            Thread.Sleep(1000);
        }
        // Gold 부족
        else
        {
            Console.WriteLine("Gold가 부족합니다.");
            Thread.Sleep(1000);
        }
    }
}

ShopSellScene

ShopSellScene.cs

image-20250204193640889

  • 소지한 아이템을 판매 하는 기능
  • 미소지 아이템은 미소유 표기
  • 판매 가격은 구매 가격 대비 85%

SellItem

private void SellItem(int idx)
{
    EquipmentScene equipmentScene = EquipmentScene.GetInst();
    Item item = core.items[idx - 1];
    // 판매 불가
    if (!item.Own)
    {
        Console.WriteLine("소유하지 않은 아이템입니다.");
        Thread.Sleep(1000);
    }
    // 판매 가능
    else
    {
        // 장착 중이라면 장착 해제
        if (item.Equip)
        {
            equipmentScene.MountItem(item, false);
        }
        item.Own = false;
        character.Gold += (int)((float)item.Gold * 0.85f);
        Console.WriteLine("판매를 완료했습니다.");
        Thread.Sleep(1000);
    }
}
  • 장착 중인 아이템 판매 시도 시에, 장착 해제 후 판매 기능

RestScene

RestScene.cs

image-20250204194003279

image-20250204194014489

  • 다른 Scene 들에 비해 많이 간단하지만, 새로운 Scene 구성을 안하고 하나의 Scene에서 구성 해본 Scene이다.

DungeonScene

DungeonScene.cs

image-20250204194804655

  • 난이도 별 구현

TryDungeon

private void TryDungeon(int dLevel)
{
    int defese = character.Defense;
    Random random = new Random();
    // 캐릭터 방어력이 권장 방어력 보다 낮을 때
    if (defese < levelDefense[dLevel - 1])
    {
        int ranValue = random.Next(1, 10);

        // 40% 확률로 실패
        if (ranValue <= 4)
        {
            // 체력 반토막 + 보상 없음
            character.HP /= 2;
            Clear();
            Console.WriteLine("던전 클리어 실패.");

            Console.WriteLine("[탐험 결과]");
            Console.WriteLine($"체력 {prevHP} -> {character.HP}");

            Thread.Sleep(2000);
            return;
        }
    }

    // 캐릭터 방어력이 권장 방어력 보다 높을 때
    // 기본 20~35 감소, (내 방어력 - 권장 방어력) 만큼 랜덤 값에 설정
    int subtractHP = random.Next(20, 36) + (levelDefense[dLevel - 1] - defese);
    character.HP -= subtractHP;

    Reward(dLevel);
}
  • 40% 확률로 실패.
  • 실패시 보상 없음
  • 실패시 체력 반토막
  • 성공시 체력 감소 알고리듬

Reward

private void Reward(int dLevel)
{
    Random random = new Random();
    //공격력  ~ 공격력 * 2 의 % 만큼 추가 보상 획득 가능
    int ranValue = random.Next((int)character.Attack, (int)character.Attack * 2);

    int resultReward = levelReward[dLevel - 1];
    resultReward += (int)(((float)ranValue / 100) * levelReward[dLevel - 1]);

    character.Gold += resultReward;
    character.DGtry++;
    character.LevelCheck();

    Clear();

    Console.WriteLine("던전 클리어\n");
    Console.WriteLine($"축하합니다!!\n{levelName[dLevel - 1]} 던전을 클리어 하였습니다.\n");

    Console.WriteLine("[탐험 결과]");
    Console.WriteLine($"체력 {prevHP} -> {character.HP}");
    Console.WriteLine($"Gold {prevGold} G-> {character.Gold}");

    Console.WriteLine("\n0. 나가기");

    Console.WriteLine("\n원하시는 행동을 입력해주세요.\n");

    string result = Console.ReadLine();
    switch (result)
    {
        case "0":
            // 나가기
            break;
        default:
            // 지금 Scene 재반환 및 화면 정리
            Console.WriteLine("올바른 값을 입력하세요.");
            Thread.Sleep(1000);
            break;
    }
}
  • 성공시 보수 지급을 위한 메서드
  • 공격력에 따른 추가 보상 알고리듬

Character

Character.cs

  • 캐릭터의 여러 속성을 설정 및 반환 가능한 클래스

LevelCheck

// 레벨 업 구간인지 체크
public void LevelCheck()
{
    for (int i = 0; i < Level; i++)
    {
        if (level == i && dgTry == i)
        {
            level++;
            dgTry = 0;
            attack += 0.5f;
            defense += 1;
        }
    }
}
  • dgTry는 던전을 탐험 한 횟수를 기록하며, 레벨업 후에 0으로 초기화 된다.
  • 각 레벨과 동일한 횟수를 던전 탐험에 성공 시, 레벨 업 하는 구조

댓글남기기