Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

1vdlrwnsv1 님의 블로그

TIL_TextRpg_만들기_몬스터전투 본문

카테고리 없음

TIL_TextRpg_만들기_몬스터전투

1vdlrwnsv1 2025. 2. 4. 17:38

필수 기능 가이드에 나와있는 원하는 행동의 숫자를 타이핑 하면 실행되는 기능을 구현해야 한다

나는 몬스터와 전투에서 일정 시간 내에 스킬 명을 정확히 타이핑 해야 발동되는 스킬을 만들것이다.

일단 몬스터부터 만들어보자

연습전투 몬스터 철권의 모쿠진을 변환했다.

이 몬스터는 샌드백이기 때문에 공격력은 0으로 설정하자


██████████████████████████▒░─░▒███████████████████
██████████████████████████░░▒▒████████████████████
███████████████████████████▒▓▓████████████████████
████████████████████████████▒─████████████████████
███████████████████████████▓▓█████████████████████
███████████████████████████▒▓█████████████████████
██████████████████████████████████████████████████
█████████████████████████▒▒░░░████████████████████
█████████████████████████▒▒▒▒░░░██████████████████
█████████████████████████▓▓▒▒▒░░░─████████████████
████████████████████████▒▓▓▓▓▒░░░░░███████████████
████████████████████████▒▓▓▓▓▓▒▒▒░░███████████████
████████████████████████▓▓▒░▓▓▓▓▓▒─███████████████
███████████████████████▒▓▓░░▒▓▓▒░░████████████████
███████████████████████▒▓▓▓▒▒▒▒░░░████████████████
██████████████████████▒▒▓▓▓▓▓▒▒░░─████████████████
█████████████████░▒▒▒░░▓▓▓▓▓▓▒▒▒─█████████████████
████████████████▒▒▒▒░░░▒▓▓▓▓▓▓▓▒██████████████████
████████████████▓▓▒▒░░▒▒▓▓▓▓█▓▓░██████████░░░█████
███████████████░░▓▓▓▒░░▒▒▒▒▒▒▒▓▒████████▒▒▒▒░░████
███████████████▒▒▓▓▓▓▒▒░▒▓▒▒▒▒▓▒▒─██████▓▓▒▒░▒░███
██████████████▓▓▒▓▓▓▓▓▒▒▓▒▒▒▒▒▓▓▒▒█████▓▓▓▓▒▒▒░─██
█████████████▒▓▓▓▓███▓▓▓▓▒▒▒▒▒▓▓▓▓▒████▓▓▓▓▓▓▒▒─██
████████████▓▓▓▓█▓███▓▓▓▓▓▒▒▒▒▒▓▓▓▓▓▓▒█▓██▓▓▓▒▒███
██████████─▓▓▓█████▓███▓▓▓▓▒▒▒▓▓▓██▓▓▓▒█▓███▓▓░███
██████████▓▓▓▓████▓████▓▓▓▒▒▒▒▓▓▓████▓██████▓░████
██████████▓▓████████████▓▓▒▒▒▒▓▓▓██████████▓██████
██████████▓██████▒▓█████▓▓▒▒▒▒▓▓▓█████████▓█░█████
██████████▒███████▓█████▓▓▓▒▒▓▓▓▓▒████▓██▓▓█░█████
██████████▒▓▓█████▓████▓▓▓▒▒▒▓▓▓▓▒─███▒▓██▓█▒█████
██████████▓▓▓█████▓▓███▓▓▓▒▒▒▒▓▓▓▒▒████████▓▒█████
██████████▒▒▓▒████▓▓▓██▓▓▓▓▒▒▒▓▓▓▒░████████▓▓▒████
██████████▒▓▓▒████▓▓▓▓▓▓▓▓▒▒▒▒▒▓▓▒░████████▓▓█▒███
██████████▓▓▒▒████▓▓▓█▓▓▓▓▒▒▒▒▒▓▓░░█████████▓█▒░██
███████████▓▒▒████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▒▒░██████████▓▒░██
██████████▓▓▓▒████▒▓▓▓▓▓▓▓▒▒▒▒▒▒▓▒░██████████▓▓▓░█
██████████▓▓█▓████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▓▒▒██████████▓█▒░█
██████████▒▓▓─████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▓▒▒██████████▒▓░░█
██████████▓▓▓█████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▓▒▒██████████▒█▓▒█
███████████▒██████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▒▒▒██████████▓▓▓─█
████████████████▒▓█▓▓▓▓▓▓▓▒▒▒░▒▒▒▓▓██████████▓▓███
███████████████▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▓▓▓█████████▓▓▓██
███████████████▓█▓▓▓▓▓▓███████▓█▓▓▓▓▓████████▓▓▒██
██████████████─▓█▓▓▓▓▓▓▒▓████████▓▓▓▓▓███████▓▓███
██████████████▒▓▓█▓▓▓▓▓▒▒▓─█████▓▓▓▓▓▓▓▒██████████
██████████████▒▓█▓▓▓▓▓▒▒▓▒████▓██▓▓▓▓▒▒▒▒█████████
██████████████▓▓█▓▓▓▓▓▒▓▓▓████████▓▓▓▓▒▒▒▒████████
█████████████▒▓▓▓▓▓▓▓▓▓▓▓▓█████████▓▓▓▒▒▒▒▒███████
█████████████▓▓█▓▓▓▓▒▒▓▓▓███████▓▓███▓▓▒▒▒▒▓██████
███████████▒▓▓▓▓▓▓▓▓▒▒▓▓▓████████▓▓▓██▓▓▒▓▓▓██████
██████████▒▓▓█▓▓▓▓▓▒▒▓▓▓█████████▓▓▓███▓▓▓▒▒─█████
█████████▓▓▓▓██▒▓▓▓▒▒▓▓▓████████▓▓▓████▓█▓▒▒▒█████
█████████▓▓▓██▓▓▓▒▒▓▒▓▓█████████▓▓▓██████▓▓▒▒─████
████████▒▒▓██▒▓▓▓▓▓▒▓▓▓████████▓▓▓███▓▓▓▓▓▒▒▒█████
█████████▓██▒▒▓▓▓▓▓▓▓████████████████▓▓▓▓▓▓▓▓█████
███████████▒▒▓▓▓▓▓▓█▓████████████████▓▓▓▓▓▓▓▓█████
██████████▒▒▓▓▓▓▓▓▓▓█████████████████▓▓▓▓▓▓▓▓█████
██████████▓▓▓▓█▓▓▓▓▓█████████████████▓▓▓▓▓▓▓▓█████
█████████─▒▓▓▓███▓▓██████████████████▓▓▓▓▓▓▓▓█████
████████▒▒▓▓▓████▓███████████████████▓▓▓▓▓▓▓▓█████
███████▒▒▓▓▓█████▓█████████████████▓█▓▓▓▓▓▓▓▓█████
███████▒▓▓▓█████████████████████████▓▓▓▓▓▓▓▓▓█████
██████▒▒▓▓▓████▓─██████████████████▒█▓▓▓▓▓▓▓▓█████
██████▓▓▓▓█████▓██████████████████▓▓█▓▓▓▓▓▓▓▓█████
██████▓▓▓▓████▓██████████████████▓▓▓█▓▓▓▓▓▓▓▓█████
██████▓▓█████▓▓█████████████████─▓█▒▓██▓▓███▓▓▓▒░░
█████▓▓██████▓▓█████████████████▓▓▓█▓▓██████▓▓▓▒░░
███─▓▓▓███▓▓▓▓▓█████████████████▓▓▓─▓▓▓▓▓▓▓▓▓▓▓▒░░
██▒▒▒▒▓▓▓▓▓▓▓▓▓████████████████████▓▓▓▓▓▓▓▓▓▓▓▓▒░░
▒▒▒▒▒▒▒▒▓▒▒▒▒▒█████████████████████▒▓▓▓▓▓▓▓▓▓▓▓▒░░
▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████▓▓▓▓▓▓▓▓▓▓▓▒░▒
▒▒▒▒▒▒▒▒▒▒▒▒▒███████████████████████████▓▓▓▓▓▓▓▒░█
▒▒▒▒▒▒▒▒▒▒▓██████████████████████████████████▓▓▒██
▓█▓▓▓▓▒▒▒▒████████████████████████████████████████

 

일단 지금까지 진행상황은 기사 암살자 전사 셋 중 하나로 전직하고 현재 스텟을 보여주는 기능까지 추가했다 다음 아무키나 누르면 모쿠진을 패는 장면으로 넘어가자 훈련봇과 타이머 메서드를 만들자

static void TutoMoster()
{
        Console.Clear();

    mHp = 20;
    mPower = 0;
    mName = "샌드백";
    mGuard = 0;

    Console.WriteLine(@"
██████████████████████████▒░─░▒███████████████████
██████████████████████████░░▒▒████████████████████
███████████████████████████▒▓▓████████████████████
████████████████████████████▒─████████████████████
███████████████████████████▓▓█████████████████████
███████████████████████████▒▓█████████████████████
██████████████████████████████████████████████████
█████████████████████████▒▒░░░████████████████████
█████████████████████████▒▒▒▒░░░██████████████████
█████████████████████████▓▓▒▒▒░░░─████████████████
████████████████████████▒▓▓▓▓▒░░░░░███████████████
████████████████████████▒▓▓▓▓▓▒▒▒░░███████████████
████████████████████████▓▓▒░▓▓▓▓▓▒─███████████████
███████████████████████▒▓▓░░▒▓▓▒░░████████████████
███████████████████████▒▓▓▓▒▒▒▒░░░████████████████
██████████████████████▒▒▓▓▓▓▓▒▒░░─████████████████
█████████████████░▒▒▒░░▓▓▓▓▓▓▒▒▒─█████████████████
████████████████▒▒▒▒░░░▒▓▓▓▓▓▓▓▒██████████████████
████████████████▓▓▒▒░░▒▒▓▓▓▓█▓▓░██████████░░░█████
███████████████░░▓▓▓▒░░▒▒▒▒▒▒▒▓▒████████▒▒▒▒░░████
███████████████▒▒▓▓▓▓▒▒░▒▓▒▒▒▒▓▒▒─██████▓▓▒▒░▒░███
██████████████▓▓▒▓▓▓▓▓▒▒▓▒▒▒▒▒▓▓▒▒█████▓▓▓▓▒▒▒░─██
█████████████▒▓▓▓▓███▓▓▓▓▒▒▒▒▒▓▓▓▓▒████▓▓▓▓▓▓▒▒─██
████████████▓▓▓▓█▓███▓▓▓▓▓▒▒▒▒▒▓▓▓▓▓▓▒█▓██▓▓▓▒▒███
██████████─▓▓▓█████▓███▓▓▓▓▒▒▒▓▓▓██▓▓▓▒█▓███▓▓░███
██████████▓▓▓▓████▓████▓▓▓▒▒▒▒▓▓▓████▓██████▓░████
██████████▓▓████████████▓▓▒▒▒▒▓▓▓██████████▓██████
██████████▓██████▒▓█████▓▓▒▒▒▒▓▓▓█████████▓█░█████
██████████▒███████▓█████▓▓▓▒▒▓▓▓▓▒████▓██▓▓█░█████
██████████▒▓▓█████▓████▓▓▓▒▒▒▓▓▓▓▒─███▒▓██▓█▒█████
██████████▓▓▓█████▓▓███▓▓▓▒▒▒▒▓▓▓▒▒████████▓▒█████
██████████▒▒▓▒████▓▓▓██▓▓▓▓▒▒▒▓▓▓▒░████████▓▓▒████
██████████▒▓▓▒████▓▓▓▓▓▓▓▓▒▒▒▒▒▓▓▒░████████▓▓█▒███
██████████▓▓▒▒████▓▓▓█▓▓▓▓▒▒▒▒▒▓▓░░█████████▓█▒░██
███████████▓▒▒████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▒▒░██████████▓▒░██
██████████▓▓▓▒████▒▓▓▓▓▓▓▓▒▒▒▒▒▒▓▒░██████████▓▓▓░█
██████████▓▓█▓████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▓▒▒██████████▓█▒░█
██████████▒▓▓─████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▓▒▒██████████▒▓░░█
██████████▓▓▓█████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▓▒▒██████████▒█▓▒█
███████████▒██████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▒▒▒██████████▓▓▓─█
████████████████▒▓█▓▓▓▓▓▓▓▒▒▒░▒▒▒▓▓██████████▓▓███
███████████████▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▓▓▓█████████▓▓▓██
███████████████▓█▓▓▓▓▓▓███████▓█▓▓▓▓▓████████▓▓▒██
██████████████─▓█▓▓▓▓▓▓▒▓████████▓▓▓▓▓███████▓▓███
██████████████▒▓▓█▓▓▓▓▓▒▒▓─█████▓▓▓▓▓▓▓▒██████████
██████████████▒▓█▓▓▓▓▓▒▒▓▒████▓██▓▓▓▓▒▒▒▒█████████
██████████████▓▓█▓▓▓▓▓▒▓▓▓████████▓▓▓▓▒▒▒▒████████
█████████████▒▓▓▓▓▓▓▓▓▓▓▓▓█████████▓▓▓▒▒▒▒▒███████
█████████████▓▓█▓▓▓▓▒▒▓▓▓███████▓▓███▓▓▒▒▒▒▓██████
███████████▒▓▓▓▓▓▓▓▓▒▒▓▓▓████████▓▓▓██▓▓▒▓▓▓██████
██████████▒▓▓█▓▓▓▓▓▒▒▓▓▓█████████▓▓▓███▓▓▓▒▒─█████
█████████▓▓▓▓██▒▓▓▓▒▒▓▓▓████████▓▓▓████▓█▓▒▒▒█████
█████████▓▓▓██▓▓▓▒▒▓▒▓▓█████████▓▓▓██████▓▓▒▒─████
████████▒▒▓██▒▓▓▓▓▓▒▓▓▓████████▓▓▓███▓▓▓▓▓▒▒▒█████
█████████▓██▒▒▓▓▓▓▓▓▓████████████████▓▓▓▓▓▓▓▓█████
███████████▒▒▓▓▓▓▓▓█▓████████████████▓▓▓▓▓▓▓▓█████
██████████▒▒▓▓▓▓▓▓▓▓█████████████████▓▓▓▓▓▓▓▓█████
██████████▓▓▓▓█▓▓▓▓▓█████████████████▓▓▓▓▓▓▓▓█████
█████████─▒▓▓▓███▓▓██████████████████▓▓▓▓▓▓▓▓█████
████████▒▒▓▓▓████▓███████████████████▓▓▓▓▓▓▓▓█████
███████▒▒▓▓▓█████▓█████████████████▓█▓▓▓▓▓▓▓▓█████
███████▒▓▓▓█████████████████████████▓▓▓▓▓▓▓▓▓█████
██████▒▒▓▓▓████▓─██████████████████▒█▓▓▓▓▓▓▓▓█████
██████▓▓▓▓█████▓██████████████████▓▓█▓▓▓▓▓▓▓▓█████
██████▓▓▓▓████▓██████████████████▓▓▓█▓▓▓▓▓▓▓▓█████
██████▓▓█████▓▓█████████████████─▓█▒▓██▓▓███▓▓▓▒░░
█████▓▓██████▓▓█████████████████▓▓▓█▓▓██████▓▓▓▒░░
███─▓▓▓███▓▓▓▓▓█████████████████▓▓▓─▓▓▓▓▓▓▓▓▓▓▓▒░░
██▒▒▒▒▓▓▓▓▓▓▓▓▓████████████████████▓▓▓▓▓▓▓▓▓▓▓▓▒░░
▒▒▒▒▒▒▒▒▓▒▒▒▒▒█████████████████████▒▓▓▓▓▓▓▓▓▓▓▓▒░░
▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████▓▓▓▓▓▓▓▓▓▓▓▒░▒
▒▒▒▒▒▒▒▒▒▒▒▒▒███████████████████████████▓▓▓▓▓▓▓▒░█
▒▒▒▒▒▒▒▒▒▒▓██████████████████████████████████▓▓▒██
▓█▓▓▓▓▒▒▒▒████████████████████████████████████████
");
}
static void StartTimer(double timeLimit)
{
    DateTime startTime = DateTime.Now;

    while ((DateTime.Now - startTime).TotalSeconds < timeLimit)
    {
        double remainingTime = timeLimit - (DateTime.Now - startTime).TotalSeconds;
        Console.Write($"\r남은 시간: {remainingTime:F2}초  ");
        Thread.Sleep(50);
    }

    Console.WriteLine("\n시간 종료!");
}

 

훈련봇이랑 싸우다 죽으면 안되기 때문에 공격력은 0

이제 봇이랑 타이머를 출력해보자

static void TutorialFight()
    {
       
        NpcrText($"좋아 {playerClass}로 전직했네 좋은 선택이다.. 이제 저기 샌드백 때려보자");
        PlayerText("ㅇㅋ");
        Console.ReadKey();

        TutoMoster();

        Console.WriteLine($"연습 전투 시작! 상대는 {mName}입니다.");
        Console.WriteLine("5초 안에 '공' 또는 '방'을 입력하세요!");
        Console.WriteLine("5초 안에 입력을 못하거나 오타가 나면 아무 행동도 취할 수 없습니다");
        
        StartTimer(5);

        Console.ReadKey();        
    }

 

굿 이제 PLayerSkills에 있는 스킬을 제대로 타이핑 해야 행동을 할 수 있는 코드를 짜보자

static void Fight()
{
    StartTimer(5);
    string playerAction = Console.ReadLine();
    if (playerAction == playerSkills[0])
    {
        mHp -= power;
        Console.WriteLine($"{mName}를 공격! 남은 HP: {mHp}");
    }
    else if (playerAction == playerSkills[1])
    {
        Console.WriteLine("가드를 올렸습니다");
    }
    else // 오타 또는 시간 초과 시
    {
        Console.WriteLine("아무 행동도 취하지 못했습니다");
    }

    Console.ReadKey();
}

잘 작동하는데 문제는 저 코드 자체를 플레이어의 체력이 0이되거나  몬스터의 체력이 0이 될때까지 반복해야함 0이상이면 계속 반복되게 while문을 써서야함 

도저히 안돼서 지피티의 도움을 받았다

     static Random random = new Random();
    static string playerName;
    static string npcName = "???";
    static int hp = 100;
    static int power = 1;
    static int aglity = 1;
    static int guard = 1;
    static int gold = 10;
    static string playerClass = "개백수";
    static string mName;
    static int mHp;
    static int mPower;
    static int mGuard;
    static List<string> playerSkills = new List<string>{"공", "방"};
    static CancellationTokenSource timerCts;
    ~~
    
    
 static void Fight()
    {
        Console.Write("사용 가능한 스킬: ");
        foreach (string skill in playerSkills)
        {
            Console.Write(skill + " ");
        }
        Console.WriteLine();

        while (hp > 0 && mHp > 0)
        {
            StartNewTurn();
        }
    }

    static void StartNewTurn()
    {
        timerCts?.Cancel(); // 이전 타이머 중지
        timerCts = new CancellationTokenSource();
        
        Task.Run(() => StartTimer(5, timerCts.Token)); // 새로운 타이머 시작

        while (true)
        {
            if (Console.KeyAvailable)
            {

                string playerAction = Console.ReadLine();
                timerCts.Cancel(); // 입력 시 타이머 취소

                if (playerAction == playerSkills[0]) // 공격
                {
                    mHp -= power;
                    Console.WriteLine($"{mName}를 공격! 남은 HP: {mHp}");
                }
                else if (playerAction == playerSkills[1]) // 방어
                {
                    Console.WriteLine("가드를 올렸습니다");
                }
                else // 오타 입력
                {
                    Console.WriteLine("잘못된 입력! 아무 행동도 하지 못했습니다.");
                    hp -= mPower;
                    Console.WriteLine($"개같이 맞았습니다! 남은 HP: {hp}");
                }

                if (mHp <= 0)
                {
                    Console.WriteLine($"{mName}를 쓰러뜨렸다!");
                    NpcrText("굿 그런식으로 싸우면 됨 그럼 화이팅해라");
                }
                if (hp <= 0)
                {
                    Console.WriteLine("죽었네 에휴...");
                    return;
                }

                StartNewTurn(); // 새로운 턴 시작 (타이머 초기화)
            }
        }
    }

   
    static void TutoMoster()
{
        Console.Clear();

    mHp = 20;
    mPower = 0;
    mName = "샌드백";
    mGuard = 0;

    Console.WriteLine(@"
██████████████████████████▒░─░▒███████████████████
██████████████████████████░░▒▒████████████████████
███████████████████████████▒▓▓████████████████████
████████████████████████████▒─████████████████████
███████████████████████████▓▓█████████████████████
███████████████████████████▒▓█████████████████████
██████████████████████████████████████████████████
█████████████████████████▒▒░░░████████████████████
█████████████████████████▒▒▒▒░░░██████████████████
█████████████████████████▓▓▒▒▒░░░─████████████████
████████████████████████▒▓▓▓▓▒░░░░░███████████████
████████████████████████▒▓▓▓▓▓▒▒▒░░███████████████
████████████████████████▓▓▒░▓▓▓▓▓▒─███████████████
███████████████████████▒▓▓░░▒▓▓▒░░████████████████
███████████████████████▒▓▓▓▒▒▒▒░░░████████████████
██████████████████████▒▒▓▓▓▓▓▒▒░░─████████████████
█████████████████░▒▒▒░░▓▓▓▓▓▓▒▒▒─█████████████████
████████████████▒▒▒▒░░░▒▓▓▓▓▓▓▓▒██████████████████
████████████████▓▓▒▒░░▒▒▓▓▓▓█▓▓░██████████░░░█████
███████████████░░▓▓▓▒░░▒▒▒▒▒▒▒▓▒████████▒▒▒▒░░████
███████████████▒▒▓▓▓▓▒▒░▒▓▒▒▒▒▓▒▒─██████▓▓▒▒░▒░███
██████████████▓▓▒▓▓▓▓▓▒▒▓▒▒▒▒▒▓▓▒▒█████▓▓▓▓▒▒▒░─██
█████████████▒▓▓▓▓███▓▓▓▓▒▒▒▒▒▓▓▓▓▒████▓▓▓▓▓▓▒▒─██
████████████▓▓▓▓█▓███▓▓▓▓▓▒▒▒▒▒▓▓▓▓▓▓▒█▓██▓▓▓▒▒███
██████████─▓▓▓█████▓███▓▓▓▓▒▒▒▓▓▓██▓▓▓▒█▓███▓▓░███
██████████▓▓▓▓████▓████▓▓▓▒▒▒▒▓▓▓████▓██████▓░████
██████████▓▓████████████▓▓▒▒▒▒▓▓▓██████████▓██████
██████████▓██████▒▓█████▓▓▒▒▒▒▓▓▓█████████▓█░█████
██████████▒███████▓█████▓▓▓▒▒▓▓▓▓▒████▓██▓▓█░█████
██████████▒▓▓█████▓████▓▓▓▒▒▒▓▓▓▓▒─███▒▓██▓█▒█████
██████████▓▓▓█████▓▓███▓▓▓▒▒▒▒▓▓▓▒▒████████▓▒█████
██████████▒▒▓▒████▓▓▓██▓▓▓▓▒▒▒▓▓▓▒░████████▓▓▒████
██████████▒▓▓▒████▓▓▓▓▓▓▓▓▒▒▒▒▒▓▓▒░████████▓▓█▒███
██████████▓▓▒▒████▓▓▓█▓▓▓▓▒▒▒▒▒▓▓░░█████████▓█▒░██
███████████▓▒▒████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▒▒░██████████▓▒░██
██████████▓▓▓▒████▒▓▓▓▓▓▓▓▒▒▒▒▒▒▓▒░██████████▓▓▓░█
██████████▓▓█▓████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▓▒▒██████████▓█▒░█
██████████▒▓▓─████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▓▒▒██████████▒▓░░█
██████████▓▓▓█████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▓▒▒██████████▒█▓▒█
███████████▒██████▒▓▓▓▓▓▓▓▓▒▒▒▒▓▒▒▒██████████▓▓▓─█
████████████████▒▓█▓▓▓▓▓▓▓▒▒▒░▒▒▒▓▓██████████▓▓███
███████████████▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▓▓▓█████████▓▓▓██
███████████████▓█▓▓▓▓▓▓███████▓█▓▓▓▓▓████████▓▓▒██
██████████████─▓█▓▓▓▓▓▓▒▓████████▓▓▓▓▓███████▓▓███
██████████████▒▓▓█▓▓▓▓▓▒▒▓─█████▓▓▓▓▓▓▓▒██████████
██████████████▒▓█▓▓▓▓▓▒▒▓▒████▓██▓▓▓▓▒▒▒▒█████████
██████████████▓▓█▓▓▓▓▓▒▓▓▓████████▓▓▓▓▒▒▒▒████████
█████████████▒▓▓▓▓▓▓▓▓▓▓▓▓█████████▓▓▓▒▒▒▒▒███████
█████████████▓▓█▓▓▓▓▒▒▓▓▓███████▓▓███▓▓▒▒▒▒▓██████
███████████▒▓▓▓▓▓▓▓▓▒▒▓▓▓████████▓▓▓██▓▓▒▓▓▓██████
██████████▒▓▓█▓▓▓▓▓▒▒▓▓▓█████████▓▓▓███▓▓▓▒▒─█████
█████████▓▓▓▓██▒▓▓▓▒▒▓▓▓████████▓▓▓████▓█▓▒▒▒█████
█████████▓▓▓██▓▓▓▒▒▓▒▓▓█████████▓▓▓██████▓▓▒▒─████
████████▒▒▓██▒▓▓▓▓▓▒▓▓▓████████▓▓▓███▓▓▓▓▓▒▒▒█████
█████████▓██▒▒▓▓▓▓▓▓▓████████████████▓▓▓▓▓▓▓▓█████
███████████▒▒▓▓▓▓▓▓█▓████████████████▓▓▓▓▓▓▓▓█████
██████████▒▒▓▓▓▓▓▓▓▓█████████████████▓▓▓▓▓▓▓▓█████
██████████▓▓▓▓█▓▓▓▓▓█████████████████▓▓▓▓▓▓▓▓█████
█████████─▒▓▓▓███▓▓██████████████████▓▓▓▓▓▓▓▓█████
████████▒▒▓▓▓████▓███████████████████▓▓▓▓▓▓▓▓█████
███████▒▒▓▓▓█████▓█████████████████▓█▓▓▓▓▓▓▓▓█████
███████▒▓▓▓█████████████████████████▓▓▓▓▓▓▓▓▓█████
██████▒▒▓▓▓████▓─██████████████████▒█▓▓▓▓▓▓▓▓█████
██████▓▓▓▓█████▓██████████████████▓▓█▓▓▓▓▓▓▓▓█████
██████▓▓▓▓████▓██████████████████▓▓▓█▓▓▓▓▓▓▓▓█████
██████▓▓█████▓▓█████████████████─▓█▒▓██▓▓███▓▓▓▒░░
█████▓▓██████▓▓█████████████████▓▓▓█▓▓██████▓▓▓▒░░
███─▓▓▓███▓▓▓▓▓█████████████████▓▓▓─▓▓▓▓▓▓▓▓▓▓▓▒░░
██▒▒▒▒▓▓▓▓▓▓▓▓▓████████████████████▓▓▓▓▓▓▓▓▓▓▓▓▒░░
▒▒▒▒▒▒▒▒▓▒▒▒▒▒█████████████████████▒▓▓▓▓▓▓▓▓▓▓▓▒░░
▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████▓▓▓▓▓▓▓▓▓▓▓▒░▒
▒▒▒▒▒▒▒▒▒▒▒▒▒███████████████████████████▓▓▓▓▓▓▓▒░█
▒▒▒▒▒▒▒▒▒▒▓██████████████████████████████████▓▓▒██
▓█▓▓▓▓▒▒▒▒████████████████████████████████████████
");
}
    static void StartTimer(double timeLimit, CancellationToken token)
    {
        DateTime startTime = DateTime.Now;

        while ((DateTime.Now - startTime).TotalSeconds < timeLimit)
        {
            if (token.IsCancellationRequested) return; // 타이머 취소 시 종료
            double remainingTime = timeLimit - (DateTime.Now - startTime).TotalSeconds;
            Console.Write($"\r남은 시간: {remainingTime:F2}초  ");
            Thread.Sleep(50);
        }

        Console.WriteLine("\n시간 초과! 행동을 하지 못했습니다.");
        StartNewTurn(); // 시간 초과 후 자동으로 새 턴 시작
    }
}

 

이제 플레이어가 입력하면 타이머를 초기화 하고 다시 입력받게 될거다 확인해보자

 

잘되는데 모쿠진을 쓰러뜨리면 타이머도 멈춰야하고 입력을 받으면 다음 장면으로 넘어가게 해보자

그냥 break써버리면 되는거잖아\

 static void StartNewTurn()
    {
        timerCts?.Cancel(); // 이전 타이머 중지
        timerCts = new CancellationTokenSource();
        
        Task.Run(() => StartTimer(5, timerCts.Token)); // 새로운 타이머 시작

        while (true)
        {
                string playerAction = Console.ReadLine();
                timerCts.Cancel(); // 입력 시 타이머 취소

                if (playerAction == playerSkills[0]) // 공격
                {
                    mHp -= power;
                    Console.WriteLine($"{mName}를 공격! 남은 HP: {mHp}");
                }
                else if (playerAction == playerSkills[1]) // 방어
                {
                    Console.WriteLine("가드를 올렸습니다");
                }
                else // 오타 입력
                {
                    Console.WriteLine("잘못된 입력! 아무 행동도 하지 못했습니다.");
                    hp -= mPower;
                    Console.WriteLine($"개같이 맞았습니다! 남은 HP: {hp}");
                }

                if (mHp <= 0)
                {
                    Console.WriteLine($"{mName}를 쓰러뜨렸다!");
                    isMonsterDie = true;
                    NpcrText("굿 그런식으로 싸우면 됨 그럼 화이팅해라 엔터 눌러서 마을로 가 이제 너 맘대로 해");
                Console.ReadKey();
                Village();
                break;
            }
                if (hp <= 0)
                {
                    Console.WriteLine("죽었네 에휴...");
                    return;
                }
                StartNewTurn(); // 새로운 턴 시작 (타이머 초기화)
            }
        }

굿 이제 마을에서 상점, 던전 가는거 구현해보자 마을은 지금까지 했던대로 대충 인터넷에서 마을 짤 받아서 아스키아트로 변환 후 삽입하고