아래는 전체코드가 있으니 과제중인분들은 주의하세요 !!

저는 솔직히 과제를 하려고 찾아보다가 전체코드를 보면 굉장히 속상했습니다.

 

금일 공부는 사실 아래 전체코드의 주석을 달아놓은것으로도 복습이 되겠지만

 

앞으로도 재밌게 쓸만한 부분이고, 완전 새로운 기능을 공부했기에  따로 빼서 짚고 넘어가도록 하겠다.

 

중간에 데이터 저장용으로 샘플 코드를 작성한게 있으니 전체코드를 보는 분들은 사용에 주의하길 바랍니다~

 

우선 오늘 배운 내용은 Timer를 이용한것 입니다.

 

우선 타이머 사용을 위한 유징문을 작성 해주시고

 

 

아래의 코드는 1~9의 숫자중에 랜덤값이 9가 나왔을때 플레이어의 공격차례가 되게 만들어놨습니다.

턴은 대기턴, 공격턴, 방어턴이 있고 아래와 같이 공격 및 방어는 랜덤값으로 갑작스럽게 정해지고

그때 

Console.WriteLine을 통해 공격차례임을 알려주고

 

timer = new System.Timers.Timer(3000); //timer에 타이머 설정 3000ms (1000=1초)

timer.AutoReset = false; // 이부분은 타이머가 자동으로 다시 켜질지 정하는 부분이라고 배움

timer.Start(); // 위에서 설정한 timer 시작

 

그리고 아래에 적힌 키 입력이벤트에 timer.Enavled 이부분을 이용해서 타이머가 켜져있는지 확인하고

그 값이 true 인동안 반복문을 통해 키가 입력될때마다

그 값을 더해 3초안에 10번 클릭을 완료했는지 확인하여 공격 성공여부를 확인하는 과정을 거쳤습니다.

 

 

해당 코드를 통해 전투시스템을 긴장감있게 만드는데 성공해서 기쁩니다.

 

그리고 사실 야심작은 아스키코드로 그린 전투그림입니다(그림판으로 직접 그림)

 

 

아래는 해당 TextRpg의 전체코드 입니다.

이미 작성을 다 하고 나서도 복습할겸 주석을 계속 달아놓는편이라 주석만 봐도 공부에 도움이 될것으로 보입니다.

using System;
using System.IO;
using System.Timers;
using System.Collections;
using System.Collections.Generic;
using System.Net.Security;
using Newtonsoft.Json;


namespace MyTextRpg
{
    public class Item
    {
        //아이템쪽 변수선언
        public string Name { get; set; }
        public int Price { get; set; }
        public string Description { get; set; }
        public int Type { get; set; } // 0: 방어구, 1: 무기
        public float Stat { get; set; }
        public bool IsEquipped { get; set; } // 장착 여부

        public Item(string name, int price, string description, int type, float stat)
        {
            Name = name;
            Price = price;
            Description = description;
            Type = type;
            Stat = stat;
            IsEquipped = false; // 기본값은 장착되지 않음
        }
    }
    public class GameData // 데이터저장쪽 작성중 ******************************************************************************************************************************
    {
        public int level { get; set; }
        public int exp { get; set; }
        public int liveHp { get; set; }
        public int gold { get; set; }
        public Item[] Inventory { get; set; }
    }// 아직 더 정리필요 저장쪽 메서드에서 리스트값을 제대로 저장 및 불러오는 코드도 작성해야함

    public class SaveLoadSystem
    {
        private static string filePath = "gameData.json";

        // 게임 데이터를 저장하는 메서드
        public static void SaveGame(GameData data)
        {
            string json = JsonConvert.SerializeObject(data, Formatting.Indented);
            File.WriteAllText(filePath, json);
            Console.WriteLine("저장완료");
        }

        // 게임 데이터를 불러오는 메서드
        public static GameData LoadGame()
        {
            if (File.Exists(filePath))
            {
                string json = File.ReadAllText(filePath);
                GameData data = JsonConvert.DeserializeObject<GameData>(json);
                Console.WriteLine("게임을 불러왔습니다 !");
                return data;
            }
            else
            {
                Console.WriteLine("불러올 파일이 없습니다 !");
                return null;
            }
        }
    }// 작성중***********************************************************************************************************************************************************************************************************************************
    public class Program
    {
        private static int dKeyPressCount = 0;
        static bool defenseMode = false; // 방어태세
        private static System.Timers.Timer timer;

        static int level = (exp / 100) + 1;
        static int exp = 100;

        int job = 1; //직업 1: 전사
        float baseStr = 9.5f + (level * 0.5f); // 공격력
        float baseDef = 4 + (level * 1f); // 방어력

        static int maxHp = 100; // 최대 체력
        static int hp = maxHp - liveHp;// 현재 체력
        static int liveHp; // 깎인 체력

        int gold = 1500; // 돈

        public List<Item> inventory = new List<Item>();//인벤토리용 아이템 리스트
        public List<Item> shopItems = new List<Item>();//상점용 아이템 리스트

        //전투매커니즘 만들기
        static Random random = new Random(); //랜덤값용
        public Program()
        {
            // 상점에 아이템 추가 이름, 금액, 설명, 아이템종류(방어구:0 무기:1), 증가수치
            shopItems.Add(new Item("가죽 갑옷", 300, "방어력을 5 증가시킵니다.", 0, 5f));
            shopItems.Add(new Item("철 갑옷", 800, "방어력을 15 증가시킵니다.", 0, 15f));
            shopItems.Add(new Item("다이아몬드 갑옷", 2000, "방어력을 40 증가시킵니다.", 0, 40f));

            shopItems.Add(new Item("강철 검", 500, "공격력을 10 증가시킵니다.", 1, 10f));
            shopItems.Add(new Item("은 검", 1000, "공격력을 20 증가시킵니다.", 1, 20f));
            shopItems.Add(new Item("황금 검", 1500, "공격력을 30 증가시킵니다.", 1, 30f));
        }

        public static void Main()
        {
            Program game = new Program();
            game.Run();
        }

        public void Run()
        {
            while (true)
            {
                Console.Clear();
                Console.WriteLine("MyTextRpg에 오신것을 환영합니다.");
                Console.WriteLine("제대로 즐기기 위해 F11을 눌러 전체화면으로 플레이 해주시길 바랍니다.");
                Console.WriteLine("");
                Console.WriteLine("1. 상태 보기");
                Console.WriteLine("2. 인벤토리");
                Console.WriteLine("3. 상점");
                Console.WriteLine("4. 던전 입장");
                Console.WriteLine("5. 휴식하기");
                Console.WriteLine("0. 종료");
                Console.WriteLine("");
                Console.WriteLine("원하시는 행동을 입력해주세요.");

                Console.Write(">> ");
                string choice = Console.ReadLine();
                switch (choice)
                {
                    case "1":
                        Stat();
                        break;
                    case "2":
                        Inventory();
                        break;
                    case "3":
                        Shop();
                        break;
                    case "4":
                        Dungeon();
                        break;
                    case "0":
                        return;
                    case "5":
                        Rest();
                        break;
                    default:
                        Console.WriteLine("잘못된 입력입니다.");
                        break;
                }
            }
        }

        public void Stat()
        {
            // 공격력 및 방어력 계산용 변수
            float totalStr = baseStr;
            float totalDef = baseDef;
            // 포리치를 통해 아이템 리스트에서 불값으로 장착중인지 확인하여 공, 방 계산
            foreach (var item in inventory)
            {
                if (item.IsEquipped)
                {
                    if (item.Type == 0) // 장착중이면 더해줌 (방어력)
                        totalDef += item.Stat;
                    else if (item.Type == 1) // (공격력)
                        totalStr += item.Stat;
                }
            }

            Console.Clear();
            Console.WriteLine("상태 보기");
            Console.WriteLine("캐릭터의 정보가 표시됩니다.");
            Console.WriteLine("");
            Console.WriteLine("Lv. {0}", level);
            Console.WriteLine("Exp {0}/100%", exp % 100);
            Console.WriteLine("직업: {0}", job == 1 ? "전사" : "기타");
            Console.WriteLine("(기본 공격력 : {0}) (무기 공격력 : {1}) 총 공격력 : {2}", baseStr, totalStr - baseStr, totalStr);
            Console.WriteLine("(기본 방어력 : {0}) (방어구 방어력 : {1}) 총 방어력 : {2}", baseDef, totalDef - baseDef, totalDef);
            Console.WriteLine("체력: {0}", hp);
            Console.WriteLine("Gold: {0} G", gold);
            Console.WriteLine("");
            Console.WriteLine("0. 나가기");
            Console.WriteLine("");
            Console.WriteLine("원하시는 행동을 입력해주세요.");
            Console.Write(">>");
            Console.ReadLine();
        }

        public void Dungeon()
        {
            Console.Clear();
            Console.WriteLine("던전에 입장합니다...");

            // 던전 난이도 랜덤 결정
            int dungeonLevel = random.Next(1, 4); // 1: 쉬움, 2: 보통, 3: 어려움
            //난이도별 골드
            int baseGold = dungeonLevel == 1 ? 1000 : dungeonLevel == 2 ? 1700 : 2500;
            // 난이도출력
            Console.WriteLine(dungeonLevel == 1 ? "쉬운 던전" : dungeonLevel == 2 ? "보통 던전" : "어려운 던전");

            // 보스 체력 설정
            int bossHp = dungeonLevel == 1 ? 50 : dungeonLevel == 2 ? 100 : 150;
            //둘중 하나가 죽을때까지 배틀
            while (bossHp > 0 && hp > 0)
            {
                Battle(ref bossHp, dungeonLevel);
            }

            if (hp <= 0)
            {
                Console.WriteLine("캐릭터가 사망했습니다. 게임 오버.");
                     // 캐릭터 정보 초기화
            }
            else
            {
                // 보상지급
                float attackBonus = baseStr * ((float)random.Next(10, 21) / 100); // 공격력 보너스
                int totalGold = baseGold + (int)attackBonus;
                Console.WriteLine($"던전을 클리어했습니다! 보상: {totalGold} G, 경험치: 100 XP");
                gold += totalGold;
                exp += 100;
                //경험치가 가득차면
                if (exp >= 100 * level)
                {//레벨업 및 방어력 공격력 증가
                    level++;
                    baseStr += 0.5f;
                    baseDef += 1f;
                    Console.WriteLine($"레벨 업! 현재 레벨: {level}");
                }

                Console.WriteLine("0. 나가기");
                Console.ReadLine();
            }
        }

        public void Battle(ref int bossHp, int dungeonLevel)
        {

            Console.Clear();
            Console.WriteLine("보스와 전투 시작!");

            int attackCounter = 0; // 10번채우면 공격

            while (bossHp > 0 && hp > 0)
            {
                Console.Clear();
                DisplayBattleField();
                Console.WriteLine($"플레이어 HP: {hp} | 보스 HP: {bossHp}");
                Console.WriteLine("");
                Console.WriteLine("보스와 플레이어는 서로 자신의 공격차례에만 공격할 수 있습니다.");
                Console.WriteLine("");
                Console.WriteLine("                공격 : A            방어 : D          ");
                Console.WriteLine("");
                Console.WriteLine("                      지금은 서로 대치중입니다 !");
                Console.WriteLine("");
                Console.WriteLine("대치상황에서는 S를 눌러 다음턴으로 넘어갈 수 있습니다 S를 계속 눌러주세요 !!");

                ConsoleKeyInfo keyInfo = Console.ReadKey(true);

                if (random.Next(1, 10) == 9)
                {
                    Console.WriteLine("당신이 공격할 수 있는 기회입니다 ! 공격하려면 A를 3초안에 10번 누르세요 !!!");
                    timer = new System.Timers.Timer(3000);
                    timer.AutoReset = false;
                    timer.Start();//3초 타이머 시작
                    // 키 입력 이벤트
                    while (timer.Enabled)//타이머 진행되는동안 반복문
                    {
                        if (Console.KeyAvailable)
                        {
                            keyInfo = Console.ReadKey(true);
                            if (keyInfo.Key == ConsoleKey.A)
                            {
                                attackCounter++;
                            }
                        }
                    }// 반복문이 돌아가는동안 D키를 10번이상 눌렀다면
                    if (attackCounter >= 10)
                    {
                        Console.WriteLine("성공! A 키를 10번 눌렀습니다.");
                        Console.WriteLine("공격 성공!"); ;
                        attackCounter = 0;
                        bossHp -= (int)baseStr;
                        PlayAttackAnimation();//공격
                    }
                    else
                    {
                        Console.WriteLine("실패! A 키를 10번 누르지 못했습니다.");
                    }
                }
                // 몬스터 공격 (랜덤)
                if (random.Next(1, 13) == 12)
                {
                    defenseMode = false; //방어태세가 되어있을수 있으니 false로 바꿔줌
                    Console.WriteLine("보스가 공격을 준비합니다! 방어하려면 D를 3초안에 10번 누르세요 !!!");
                    
                    //타이머설정
                    timer = new System.Timers.Timer(3000);
                    timer.AutoReset = false;
                    timer.Start();//3초 타이머 시작
                    // 키 입력 이벤트
                    while (timer.Enabled)//타이머 진행되는동안 반복문
                    {
                        if (Console.KeyAvailable)
                        {
                            keyInfo = Console.ReadKey(true);
                            if (keyInfo.Key == ConsoleKey.D)
                            {
                                dKeyPressCount++;
                            }
                        }
                    }// 반복문이 돌아가는동안 D키를 10번이상 눌렀다면
                    if (dKeyPressCount >= 10)
                    {
                        Console.WriteLine("성공! D 키를 10번 눌렀습니다.");
                        Console.Write("방어 준비!");
                        defenseMode = true;// 방어모드 켜주고
                    }
                    else
                    {
                        Console.WriteLine("실패! D 키를 10번 누르지 못했습니다.");
                    }

                    // 방어모드라면
                    if (defenseMode == true)
                    {// 방어성공 출력 후
                        Console.WriteLine("방어 성공 !");
                        defenseMode = false;// 방어모드 꺼주고
                        PlayDefenseAnimation();//방어 보여주기
                    }//실패라면
                    else
                    {
                        Console.WriteLine("방어 실패! 보스의 공격!");
                        int damage = (int)(baseDef - (dungeonLevel * 10));
                        damage = damage <= 0 ? 10 : damage;// 데미지가 0혹은 음수면 최소데미지인 10를 줌
                        liveHp += damage;
                        PlayHitAnimation();// 맞기
                    }
                }

                Thread.Sleep(500);
            }
        }
   

        public void DisplayBattleField()
        {
            Console.Clear();
            Console.WriteLine("                                                                            ,-            ");
            Console.WriteLine("                                                         @!                           @@@#.         ");
            Console.WriteLine("                                                       .@@@                         .$@$@@#.        ");
            Console.WriteLine("                                                      -@@@@*                 .*@@@@#=@@. *@:        ");
            Console.WriteLine("                                                     .@@@@@@               .;@@@$$#@@@@   @;        ");
            Console.WriteLine("                                                    .#@@@@@#              ,$@@$:  .~$@;   @;        ");
            Console.WriteLine("                                                    @@@#@@@.            ,!@@=~      =@!. :@;        ");
            Console.WriteLine("                                                  .#@@#-@@$            ;#@#~        !@@=!@@:        ");
            Console.WriteLine("                                                 ,#@@$.$@@:           ,#@!,         .-=@@#-         ");
            Console.WriteLine("                                                .#@@#.-@@#            !@@.            .~~,          ");
            Console.WriteLine("                                                @@@#  =@@~            #@=                            ");
            Console.WriteLine("                                               #@@@.  @@@~            #=                             ");
            Console.WriteLine("                                             :@@@@,  :@@@            .@=                             ");
            Console.WriteLine("                                            ~@@@@,   $@@.            *@*                             ");
            Console.WriteLine("                         ,@@@*             -@@@@.   ,@@$            .@@@#.                           ");
            Console.WriteLine("                        ,@@@@@$           ~@@@@     #@@            :@@@@@@                           ");
            Console.WriteLine("                       ,@@@@@@@$         :@@@;     .@@@           ~@@$.~@@.                          ");
            Console.WriteLine("                       ,@@#-;@@@        =#@@=.     :@@*           :@!. ,$@$~                         ");
            Console.WriteLine("                       ,@@#-;@@@       .@@@@       @@@,           :@,   ,=@#~                        ");
            Console.WriteLine("                 !!.   .$@@@@@@:        $@@@,     :@@*            !@,     ;@@~                       ");
            Console.WriteLine("                ;@@@;:  .$@@@@#          $@@@;    @@@,           :@@.      :@@                       ");
            Console.WriteLine("                ~@@@@@#:~.=@@*.         ~@@@@@#~ -@@@           .#@:        $@-                      ");
            Console.WriteLine("                 -==@@@@@=;@@*----    .$@@@=@@@@~=@@~         ,;$@=         -@*                      ");
            Console.WriteLine("                    *#@@@@@@@@@@@@~~~~!@@@# !@@@@@@@         -=@@#-         .@@-                     ");
            Console.WriteLine("                      ~#@@@@@@@@@@@@@@@@@:   ;@@@@@=       ~#@@@;  .         $@$,                    ");
            Console.WriteLine("                        ..~@@@@@@@@@@@@@-     .@@*@      ,$@@@@@~,#@#         $@@@##=~               ");
            Console.WriteLine("                          ~@@!    .~~~~                 ,#@@= :@@@@*,        ,=@@@@@@@@=,           ");
            Console.WriteLine("                          ~@@!                          #@!   ~@@@=          *@@@$@@!;@@#           ");
            Console.WriteLine("                          ~@@!                         ,@@    @@=@@:           ,#@@:   *@;          ");
            Console.WriteLine("                          ~@@!                         ,@~    =: ~@=          ,#@@@~   -@@          ");
            Console.WriteLine("                          ~@@!                         ,@=        :~          :@$=@@!   @@          ");
            Console.WriteLine("                          ~@@!                          #@-        .--------.  ,. ;=;   @@          ");
            Console.WriteLine("                          ~@@!                          ;@!        *@@@@@@@@$===*.      @@          ");
            Console.WriteLine("                          ~@@!                           ##~       ,:::::::;#####-     ~@@          ");
            Console.WriteLine("                         -*@@$                           ;@@*;-                        !@-          ");
            Console.WriteLine("                       .:@@@@@$                           ;@@@@=~~-                   :@@           ");
            Console.WriteLine("                       !@@@@@@@!                          .:;*@@@@$!;.              ,;#@*           ");
            Console.WriteLine("                     -@@@@# :@@@;                             ,**$@@@@=~~~,        ~$@#!            ");
            Console.WriteLine("                    !@@@@:   ~@@@@                                 .$@@@@@@@@@@@@@@@@@.              ");
            Console.WriteLine("                    !@@$.     -@@@@                                   ...;@@@@@@@@@#-                ");
            Console.WriteLine("                     ,~        -@@@                                                                 ");
            Console.WriteLine("                                ~;~                                                             ");

        }

        public void PlayAttackAnimation()
        {
            Console.Clear();
            Console.WriteLine("                                                                                      .=#!-.        ");
            Console.WriteLine("                                                                                      ;@@@@*.       ");
            Console.WriteLine("                                                                              .-::::~ @@!;#@*       ");
            Console.WriteLine("                                                                            .~$@@@@@@#@#. -#$       ");
            Console.WriteLine("                                                                           ,*@@@$;;=@@@$   #$       ");
            Console.WriteLine("                                                                          ~#@@$~     @@:   #$       ");
            Console.WriteLine("                                                                        :$@@*,       @@=, ;@$       ");
            Console.WriteLine("                                                                       *@@#-         =@@$*@@=       ");
            Console.WriteLine("                                                                      ,@@;            .$@@@:        ");
            Console.WriteLine("                                                                      =@#.             .--,         ");
            Console.WriteLine("                                                                     .@@:                            ");
            Console.WriteLine("                                                                     .@$-                            ");
            Console.WriteLine("                                                                     .@*                             ");
            Console.WriteLine("                                                                     !@*                             ");
            Console.WriteLine("                      ....                                          ,@@;                             ");
            Console.WriteLine("                     ;@@@@:                                         !@@@#-                           ");
            Console.WriteLine("                    ;@@@@@@-                .!*@@=~~~~~,          ,#@@=#@=                           ");
            Console.WriteLine("                   ;@@@@@@@@-               @$.@@@@@@@@@#####:    #@@! ~@$.                          ");
            Console.WriteLine("                   !@@=,.#@@~               @@@@@@@@@@@@@@@@@@@@@@@@*!!=@@@;                         ");
            Console.WriteLine("                   !@@@!~@@@~               @@@- -$$$$$#@@@@@@@@@@@@@@@@@@@@@@@=,,,                  ");
            Console.WriteLine("            *#     .#@@@@@@@                @@@-        .....*@@@@@@@@@@@@@@@@@@@$!#                 ");
            Console.WriteLine("           .@@@=;-  ,$@@@@@;                @@@-                -$@$;;;;;#@@@@@@@*~@                 ");
            Console.WriteLine("           .@@@@@@$...#@@@           .....@@@@@-               .*@#. ..:@@@@@@@@@@#,                 ");
            Console.WriteLine("            ,;@@@@@@#*;@@@          =@@@@@@@@@@*              ~$@@===@@@@@@@@@@@--                   ");
            Console.WriteLine("               *@@@@@@@@@@@@@@;    ;@@@@@@@@@@@$             !@@@@@@@@@@@@@@@@@=                     ");
            Console.WriteLine("                .$@@@@@@@@@@@@@@@@@@@@@@@@##@@@$          .,$@@@@@@@@@@@##~ .=@$                     ");
            Console.WriteLine("                  ,-##*@@@@@@@@@@@@@@@~---  -@@$       -==@@@@@@@@@@@--,     ~@@#=-                  ");
            Console.WriteLine("                      ;@@@!!!!!#@@@@*:      -@@$  -::@@@@@@@@@@@#@@@:         :#@@@@@#!~.            ");
            Console.WriteLine("                      ;@@@                  -@@@@@@@@@@@@@@@@=@@@@#.         ,$@@@@@@@@@@:          ");
            Console.WriteLine("                      ;@@@                  -@@@@@@@@@@@@:   ;@@@@~          ~@@@@#@#~:#@@~         ");
            Console.WriteLine("                      ;@@@                  ,#@$@@$** =@$   -@@=#@#.            !@@@-   !@=.        ");
            Console.WriteLine("                      ;@@@                            $@    .=: -$@.          .;@@@@,   ,#@.        ");
            Console.WriteLine("                      ;@@@                            $@*        ,:           ,=@*=@@*   =@.        ");
            Console.WriteLine("                      ;@@@                            ~@@,         ,,,,,,,,,.  .. .=$;   =@.        ");
            Console.WriteLine("                      ;@@@                             =@~        ,#@@@@@@@@$====:       =@.        ");
            Console.WriteLine("                      ;@@@                             ~@=.        ;!!!!!!!*@@@@@#      -#@.        ");
            Console.WriteLine("                     .!@@@.                             #@$~,.              ,,,,,.      :@=.        ");
            Console.WriteLine("                    ,#@@@@$                             ,#@@@$;                        ,$@:         ");
            Console.WriteLine("                   ;#@@@@@@$                             ~@@@@@##$-                   .*@#-         ");
            Console.WriteLine("                 .~@@@@##@@@:                               :#@@@@@@=,.              :@@@;          ");
            Console.WriteLine("                .$@@@@!  $@@@!                                ,,~$@@@@#$$$:        ,$@@=,           ");
            Console.WriteLine("                @@@@$,    =@@@=.                                   ,;=@@@@@@@@@@@@@@@@*.            ");
            Console.WriteLine("                #@@:       #@@@=                                         :##########=                ");
            Console.WriteLine("                 ,,         =@@=                                                                 ");

            //공격
            Thread.Sleep(2000);
        }

        public void PlayDefenseAnimation()
        {
            Console.Clear();
            Console.WriteLine("                                                                                     -$#*:.         ");
            Console.WriteLine("                                 .~==============================~                  .*@@@@=,        ");
            Console.WriteLine("                                 ~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@           .:;;;;-~@@;;#@=        ");
            Console.WriteLine("                                 -$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$:       ,!$@@@@@##@$  ~##.       ");
            Console.WriteLine("                                  -$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#@@@      ,=@@@#$$@@@@=   $#.       ");
            Console.WriteLine("                                 *=.                            .@@@    .!@@@$-   .-@@~   $#.       ");
            Console.WriteLine("                                !@@@                            .@@@  .:#@@=-       @@:  -##.       ");
            Console.WriteLine("                                !@@@                            .@@@ -#@@$,         @@@*:@@#.       ");
            Console.WriteLine("                                !@@@                            .@@@ #@#;.          ~*@@@@=~        ");
            Console.WriteLine("                                !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@@;              :@@=.         ");
            Console.WriteLine("                                !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$.                             ");
            Console.WriteLine("                                !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@:                              ");
            Console.WriteLine("                                !@@@*****************************@@@@@                               ");
            Console.WriteLine("                                !@@@                            .@@@@@                               ");
            Console.WriteLine("                                !@@@                            .@@@@$                               ");
            Console.WriteLine("                 .!===:         ;@@@.                           .@@@@#!-                             ");
            Console.WriteLine("                 *@@@@@:        .#@@!                           .@@@@@@$.                            ");
            Console.WriteLine("               .*@@@@@@@:       .#@@!                           ;@@@~:@@-                            ");
            Console.WriteLine("               ~@@@@$@@@@       .#@@*,,,,,,,,,,,,,,,            @@@@  @@;.                           ");
            Console.WriteLine("               ~@@#- -@@@       .#@@@@@@@@@@@@@@@@@@$$$$$$$$$$$$@@@@  *@@#-                          ");
            Console.WriteLine("               ~@@@@~@@@@       .#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   ;$@$-                         ");
            Console.WriteLine("        =#.     *@@@@@@@~       .#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    ,$@#-                        ");
            Console.WriteLine("       ,@@@$;~   *@@@@@#.       .#@@!               ;;;;;;;;;;=@@@@@     ,=@*                        ");
            Console.WriteLine("       ,@@@@@@@,  *@@@:         .#@@!                        .*@@@@@      ~@@-                       ");
            Console.WriteLine("        -!@@@@@@@*~@@@:         .#@@$                       ~=@@$@@@       =@;                       ");
            Console.WriteLine("           :#@@@@@@@@@@@@@@~....*@@@@#                    ,=@@@=.@@@       !@@.                      ");
            Console.WriteLine("            .;$@@@@@@@@@@@@@####@@@@$.                  ,;$@@$;,.@@@       ~@@!                      ");
            Console.WriteLine("              ,~*$!@@@@@@@@@@@@@@@@@*,,,,,,.          .~$@@@#~ ,*@@@       .*@@=!-,,.                ");
            Console.WriteLine("                  ,@@@=;;;;*@@@@@@@@@@@@@@@#;;;;;;;;;;=@@@##@*:$@@@@        .!@@@@@@$!~.            ");
            Console.WriteLine("                  ,@@@:     ----~#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,       ;$@@@@@@@@@=:           ");
            Console.WriteLine("                  ,@@@:         .#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*      .=@@@@#@$:!#@#~          ");
            Console.WriteLine("                  ,@@@:         .#@@*,,,,,,,:*******@@=***$@@@@@@@@@:       .,-#@@#,  ,=@*.         ");
            Console.WriteLine("                  ,@@@:         .#@@!               @@.   -$!~;#@@@@         .*@@@$    ~@@,         ");
            Console.WriteLine("                  ,@@@:         .#@@!               @@.    .   ~@@@@         ;@@@@@=,   $@,         ");
            Console.WriteLine("                  ,@@@:         .#@@!               #@!         .@@@         ,!; *@@!   $@,         ");
            Console.WriteLine("                  ,@@@:         .#@@!               :@@         .@@@@@@@@@*.            $@,         ");
            Console.WriteLine("                  ,@@@:          *@@$               .@@,        .@@@@@@@@@@@@@@@*       $@,         ");
            Console.WriteLine("                  ,@@@:          ~@@@......          ;@@-       .@@@      !#####;      :@#.         ");
            Console.WriteLine("                 -=@@@$          ~#~$@@@@@@$**********@@@=*~    .@@@                   !@;          ");
            Console.WriteLine("               .~@@@@@@#         ~#~=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#=                 :@@:          ");
            Console.WriteLine("               !@@@@@@@@!        ~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#.$.              ,;#@=.          ");
            Console.WriteLine("             -=@@@@$-$@@@!       ~@@@------:$$$$$$$$$$$$$$$$@@@@@@@=@-,,.         .-$@@=,           ");
            Console.WriteLine("            ;#@@@$:   $@@@!.     ~@@@                      .;;;;!@@@@@@@#!;;;;;;;;*@@#:              ");
            Console.WriteLine("            @@@#*,    .$@@@=.    ~@@@                           .@@@===$@@@@@@@@@@@#*~               ");
            Console.WriteLine("            :$#~        $@@@;    ~@@@                           .@@@   .:::::::::::-                ");
            Console.WriteLine("             ..         .=@@~    !@@@$$$$$:~~~~~~~~~~~~~~~,     .@@@                                 ");
            Console.WriteLine("                         .~-    .#@@@@@@@@@@@@@@@@@@@@@@@@#******@@@:                                ");
            Console.WriteLine("                                .#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                                ");
            Console.WriteLine("                                 ,!!!!!!!!!#@@@@@@@@@@@@@@@@@@@@@@@@@.                               ");

            // 방어
            Thread.Sleep(2000);
        }

        public void PlayHitAnimation()
        {
            Console.Clear();
            Console.WriteLine("                                                                                     -@@@#-         ");
            Console.WriteLine("                                                                                    ,=@#@@#-        ");
            Console.WriteLine("                          .,,,,,                                             -*@@@@*;@@- =@@        ");
            Console.WriteLine("                        -$#@@@@@$=                                         ~$@@@@@@@@@@   @@        ");
            Console.WriteLine("                      .:=@@@@@@@@@!.                                      :$@@#!::*#@@=   @@        ");
            Console.WriteLine("                     .$@@@@@@@@@@@@@=.                                  ,*@@#;,     #@.   @@        ");
            Console.WriteLine("                    ~#@@@#!-----$@@@@*.                               -*#@#;,       #@=-.!@@        ");
            Console.WriteLine("                    @@@@!,       !$@@@;                              ,$@@=.         *@@$*@@$        ");
            Console.WriteLine("                   *@@@:          .$@@#.                             !@@~            ,$@@@:.        ");
            Console.WriteLine("                   #@@*    ,!!.    .#@@:                            ,#@=              ,::-          ");
            Console.WriteLine("                  .@@@-    =@@@~-   :@@*                            ;@#.                             ");
            Console.WriteLine("                  .@@@-    =@@@@@*, :@@*                            !@;                              ");
            Console.WriteLine("                  .@@@~    ,=@@@@@@#*@@*                            !@~                              ");
            Console.WriteLine("                   =@@=      .:@@@@@@@@,                           ,#@~                              ");
            Console.WriteLine("                   ~@@@*        -!@@@@@@*-                         !@@;,                             ");
            Console.WriteLine("                   =@@@@@:       @@@@@@@@@@                       ,$@@@@,                            ");
            Console.WriteLine("                  =@@@@@@@#*****@@@@@*@@@@@@@*                   !@@$;#@;                            ");
            Console.WriteLine("                 ;@@@@@@@@@@@@@@@@@@;  ~@@@@@@@;                ~@@#- *@=                            ");
            Console.WriteLine("                 ;@@@;-@@@@@@@@@@@$.    ,$@@@@@@$,              ~@$,  !@@$,                          ");
            Console.WriteLine("                 ;@@#~,$@@@#####:~        ~;#@@@@@=!,           ~@!   .!@@$,                         ");
            Console.WriteLine("          ,-     ~@@@@@@@@:                  ,=@@@@@@!,         :@!     ,#@$.                        ");
            Console.WriteLine("         -#@$:.   ~@@@@@@$                     -#@@@@@#*..     -$@;      ,$@$                        ");
            Console.WriteLine("         ~@@@@@$:  :@@@@*,                       :!=@@@@@@:.  .@@$,       ,@@~                       ");
            Console.WriteLine("          !@@@@@@@#.~@@@.         .@!.              -#@@@@@@*.*@@~         !@;                       ");
            Console.WriteLine("           ,:=@@@@@@=@@@*!!!;     #@@@=.              ~$@@@@@@@@*.         -@#~                      ");
            Console.WriteLine("               #@@@@@@@@@@@@@@@@@@@@@#:                  ;@@@@#;.          .@@*.                    ");
            Console.WriteLine("                --@@;@@@@@@@@@@@@@@@*                   :#@@@!. ~*;         !@@$*,                   ");
            Console.WriteLine("                    -@@@=****#@@@@=!                  ,$@@$=@@~;#@@,         !#@@@@@$;-              ");
            Console.WriteLine("                    -@@@.                            ,$@@$  *@@@@*          -#@@@@@@@@@#~           ");
            Console.WriteLine("                    -@@@.                            !@$,  .=@@@$,          !@@@@#@#;;@@@#@!        ");
            Console.WriteLine("                    -@@@.                           -@@~   *@@#@@!             *@@#,   $@@@@        ");
            Console.WriteLine("                    -@@@.                           -@=    :#, !@#           .;@@@$. -=@@@@~        ");
            Console.WriteLine("                    -@@@.                           -@=    ,;  -$=           -=@@@#;:!@@@@#         ");
            Console.WriteLine("                    -@@@.                           -@@~                     -=$-*@@@@@@@@          ");
            Console.WriteLine("                    -@@@.                            *@=         ,!!!!!!!!!,     ~@@@@@=@@          ");
            Console.WriteLine("                    -@@@.                            -##.        !@@@@@@@@@@@@@@@@@@@@. @@          ");
            Console.WriteLine("                    -@@@.                             *@*.        ,,,,,,,,!@@@@@@@@@~. :@@          ");
            Console.WriteLine("                   -!@@@~                             -#@$:~.               ~=@@@@*-   !@!          ");
            Console.WriteLine("                  .@@@@@@~                             ~@@@@@:             ~@@@@@!    -@@-          ");
            Console.WriteLine("                 $@@@@@@@@~                             -::#@@@@#*!-      #@@@@$.   -!@@=           ");
            Console.WriteLine("               :@@@@@:,#@@@~                                ;$$#@@@@#:,,!@@@@#~   .~#@@*            ");
            Console.WriteLine("              *@@@@:.  ,#@@@=                                  .,-=@@@@@@@@@@#$$$$#@@#,             ");
            Console.WriteLine("              #@@$;     ,#@@@!                                                                      ");
            Console.WriteLine("               @@        ,@@@@                                                                      ");
            Console.WriteLine("                          ,#@!                                                                      ");


            //보스가 공격
            Thread.Sleep(2000);
        }
        public void Inventory()
        {
            Console.Clear();
            Console.WriteLine("인벤토리");
            Console.WriteLine("보유 중인 아이템을 관리할 수 있습니다.");
            Console.WriteLine("");
            Console.WriteLine("[아이템 목록]");
            //아이템이 없으면
            if (inventory.Count == 0)
            {
                Console.WriteLine("인벤토리에 아이템이 없습니다.");
            }
            else // 있으면
            {// 0부터 가지고 있는만큼
                for (int i = 0; i < inventory.Count; i++)
                {
                    var item = inventory[i];
                    string equippedText = item.IsEquipped ? "[E] " : "";// 장착중이면 표시하기위해
                                                                        //가지고 있는 아이템들 모두 출력
                    Console.WriteLine("{0}{1} - {2}", equippedText, item.Name, item.Description);
                }
            }
            Console.WriteLine("");
            Console.WriteLine("1. 장착 관리");
            Console.WriteLine("0. 나가기");
            Console.WriteLine("");
            Console.WriteLine("원하시는 행동을 입력해주세요.");
            Console.Write(">>");
            string choice = Console.ReadLine();
            if (choice == "1")
            {
                Equip();
            }
        }

        public void Equip()
        {
            Console.Clear();
            Console.WriteLine("인벤토리 - 장착 관리");
            Console.WriteLine("보유 중인 아이템을 관리할 수 있습니다.");
            Console.WriteLine("");
            //아이템이 없으면
            if (inventory.Count == 0)
            {
                Console.WriteLine("장착할 아이템이 없습니다.");
                Console.WriteLine("");
                Console.WriteLine("0. 나가기");
                Console.WriteLine("");
                Console.WriteLine("원하시는 행동을 입력해주세요.");
                Console.Write(">>");
            }
            else
            {//있으면 모두 표시
                for (int i = 0; i < inventory.Count; i++)
                {
                    var item = inventory[i];
                    string equippedText = item.IsEquipped ? "[E] " : "";
                    Console.WriteLine("{0}. {1}{2} - {3}", i + 1, equippedText, item.Name, item.Description);
                }
                Console.WriteLine("");
                Console.WriteLine("장착또는 해제할 아이템 번호를 선택하세요");
                Console.WriteLine("");
                Console.WriteLine("0. 나가기");
                Console.WriteLine("");
                Console.WriteLine("원하시는 행동을 입력해주세요.");
                Console.Write(">>");
                string input = Console.ReadLine();
                if (int.TryParse(input, out int itemIndex) && itemIndex > 0 && itemIndex <= inventory.Count)
                {
                    Item selectedItem = inventory[itemIndex - 1];
                    //장착중인 아이템 선택시 장착 해제
                    if (selectedItem.IsEquipped)
                    {
                        selectedItem.IsEquipped = false;
                        Console.WriteLine("{0}을(를) {1}했습니다.", selectedItem.Name, selectedItem.IsEquipped ? "장착" : "해제");
                        Console.WriteLine("");
                        Console.WriteLine("0. 나가기");
                        Console.WriteLine("");
                        Console.WriteLine("원하시는 행동을 입력해주세요.");
                        Console.Write(">>");
                    }
                    //장착중이지 않다면
                    else if (!selectedItem.IsEquipped)
                    {
                        //선택한 아이템이 방어구라면
                        if (selectedItem.Type == 0)
                        {   //true : 장착중인게있음 false : 없음
                            bool check = false;
                            //인벤토리에 아이템을 하나씩체크
                            for (int i = 0; i < inventory.Count; i++)
                            {
                                var item = inventory[i];
                                if (selectedItem.Type == 0)
                                {//방어구중 장착한 아이템이 있는지 확인하고
                                    check = item.IsEquipped ? true : false;// 장착중이면 표시하기위해
                                    item.IsEquipped = false; // 장착해제해주고
                                }
                            }
                            if (check) //이미 장착중인 방어구가 있다면
                            {
                                Console.WriteLine("");
                                selectedItem.IsEquipped = true;
                                Console.WriteLine("장착중이던 장비를 해제하고");
                                Console.WriteLine("{0}을(를) {1}했습니다.", selectedItem.Name, selectedItem.IsEquipped ? "장착" : "해제");
                                Console.WriteLine("");
                                Console.WriteLine("0. 나가기");
                                Console.WriteLine("");
                                Console.WriteLine("원하시는 행동을 입력해주세요.");
                                Console.Write(">>");
                            }
                            else
                            {
                                selectedItem.IsEquipped = true;
                                Console.WriteLine("{0}을(를) {1}했습니다.", selectedItem.Name, selectedItem.IsEquipped ? "장착" : "해제");
                                Console.WriteLine("");
                                Console.WriteLine("0. 나가기");
                                Console.WriteLine("");
                                Console.WriteLine("원하시는 행동을 입력해주세요.");
                                Console.Write(">>");
                            }
                        }
                        else
                        {
                            bool check = false;

                            for (int i = 0; i < inventory.Count; i++)
                            {
                                var item = inventory[i];
                                if (selectedItem.Type == 1)
                                {//무기중 장착한 아이템이 있는지 확인하고
                                    check = item.IsEquipped ? true : false;// 장착중이면 표시하기위해
                                    item.IsEquipped = false; // 장착해제
                                }
                            }
                            if (check) //이미 장착중인 무기가 있다면
                            {
                                Console.WriteLine("");
                                selectedItem.IsEquipped = true;
                                Console.WriteLine("장착중이던 장비를 해제하고");
                                Console.WriteLine("{0}을(를) {1}했습니다.", selectedItem.Name, selectedItem.IsEquipped ? "장착" : "해제");
                                Console.WriteLine("");
                                Console.WriteLine("0. 나가기");
                                Console.WriteLine("");
                                Console.WriteLine("원하시는 행동을 입력해주세요.");
                                Console.Write(">>");
                            }
                            else
                            {
                                selectedItem.IsEquipped = true;
                                Console.WriteLine("{0}을(를) {1}했습니다.", selectedItem.Name, selectedItem.IsEquipped ? "장착" : "해제");
                                Console.WriteLine("");
                                Console.WriteLine("0. 나가기");
                                Console.WriteLine("");
                                Console.WriteLine("원하시는 행동을 입력해주세요.");
                                Console.Write(">>");
                            }
                        }
                    }
                }
            }

            Console.ReadLine();
        }



        public void Shop()
        {
            Console.Clear();
            Console.WriteLine("상점");
            Console.WriteLine("필요한 아이템을 얻을 수 있는 상점입니다.");
            Console.WriteLine();
            Console.WriteLine("[보유 골드]");
            Console.WriteLine("{0} G", gold);
            Console.WriteLine("");

            for (int i = 0; i < shopItems.Count; i++)
            {
                Item item = shopItems[i];
                if (inventory.Contains(item))
                {
                    Console.WriteLine("{0} - 구매 완료", item.Name);
                }
                else
                {
                    Console.WriteLine("{0} - {1} G", item.Name, item.Price);
                }
            }

            Console.WriteLine("");
            Console.WriteLine("1. 아이템 구매");
            Console.WriteLine("2. 아이템 판매");
            Console.WriteLine("0. 나가기");
            Console.WriteLine("");
            Console.WriteLine("원하시는 행동을 입력해주세요.");
            Console.Write(">>");
            int choice = int.Parse(Console.ReadLine());
            //아래는 아이템 번호에 따른 아이템 구매
            if (choice == 1)
            {
                ShopBuy();
            }
            else if (choice == 2)
            {
                ShopSell();
            }
        }



        //구매용상점
        public void ShopBuy()
        {
            Console.Clear();
            Console.WriteLine("상점");
            Console.WriteLine("필요한 아이템을 얻을 수 있는 상점입니다.");
            Console.WriteLine();
            Console.WriteLine("[보유 골드]");
            Console.WriteLine("{0} G", gold);
            Console.WriteLine("");

            for (int i = 0; i < shopItems.Count; i++)
            {
                Item item = shopItems[i];
                if (inventory.Contains(item))
                {
                    Console.WriteLine("{0}. {1} - 구매 완료", i + 1, item.Name);
                }
                else
                {
                    Console.WriteLine("{0}. {1} - {2} G", i + 1, item.Name, item.Price);
                }
            }

            Console.WriteLine("");
            Console.WriteLine("구매를 원하는 아이템 번호를 입력해주세요.");
            Console.WriteLine("");
            Console.WriteLine("0. 나가기");
            Console.WriteLine("");
            Console.WriteLine("원하시는 행동을 입력해주세요.");
            Console.Write(">>");
            string choice = Console.ReadLine();
            //아래는 아이템 번호에 따른 아이템 구매
            if (int.TryParse(choice, out int selectedItem) && selectedItem > 0 && selectedItem <= shopItems.Count)
            {
                BuyItem(selectedItem - 1);
            }
        }



        //판매용상점
        public void ShopSell()
        {
            Console.Clear();
            Console.WriteLine("판매 상점");
            Console.WriteLine("필요없는 아이템을 판매할 수 있는 상점입니다.");
            Console.WriteLine();
            Console.WriteLine("[보유 골드]");
            Console.WriteLine("{0} G", gold);
            Console.WriteLine();
            Console.WriteLine("[아이템 목록]");

            if (inventory.Count == 0)
            {
                Console.WriteLine("보유중인 아이템이 없습니다.");
                Console.WriteLine();
                Console.WriteLine("0. 나가기");
                Console.WriteLine();
                Console.WriteLine("원하시는 행동을 입력해주세요.");
                Console.Write(">>");
            }
            else
            {
                // 인벤토리 목록을 출력
                for (int i = 0; i < inventory.Count; i++)
                {
                    var item = inventory[i];
                    string equippedText = item.IsEquipped ? "[E] " : "";
                    Console.WriteLine("{0}. {1}{2} - {3} - 판매가격 : {4} G",
                        i + 1, equippedText, item.Name, item.Description, (item.Price * 0.85));
                }

                Console.WriteLine();
                Console.WriteLine("판매할 아이템 번호를 선택하세요");
                Console.WriteLine();
                Console.WriteLine("0. 나가기");
                Console.WriteLine();
                Console.WriteLine("원하시는 행동을 입력해주세요.");
                Console.Write(">>");

                string input = Console.ReadLine();
                if (int.TryParse(input, out int itemIndex) && itemIndex > 0 && itemIndex <= inventory.Count)
                {
                    Item selectedItem = inventory[itemIndex - 1];

                    if (selectedItem.IsEquipped) // 장착중인 아이템이면 해제
                    {
                        selectedItem.IsEquipped = false;
                        Console.WriteLine("{0}의 장착을 해제했습니다.", selectedItem.Name);
                    }

                    // 아이템 판매
                    double sellPrice = selectedItem.Price * 0.85;
                    gold += (int)sellPrice; // 판매 후 골드 추가
                    Console.WriteLine("{0}을(를) {1} G에 판매했습니다.", selectedItem.Name, (int)sellPrice);
                    inventory.Remove(selectedItem); // 인벤토리에서 아이템 제거
                    Console.WriteLine();
                    Console.WriteLine("0. 나가기");
                    Console.WriteLine();
                    Console.WriteLine("원하시는 행동을 입력해주세요.");
                    Console.Write(">>");
                }
                else if (itemIndex == 0)
                {
                    return; // 나가기 선택 시 함수 종료
                }
                else
                {
                    Console.Clear();
                    Console.WriteLine("잘못된 선택입니다.");
                    Console.WriteLine();
                    Console.WriteLine("0. 나가기");
                    Console.WriteLine();
                    Console.WriteLine("원하시는 행동을 입력해주세요.");
                    Console.Write(">>");
                }
            }

            Console.ReadLine();
        }


        public void BuyItem(int index)
        {
            Item item = shopItems[index];

            if (inventory.Contains(item))
            {
                Console.WriteLine("이미 구매한 아이템입니다.");
                Console.WriteLine("");
                Console.WriteLine("0. 나가기");
                Console.WriteLine("");
                Console.WriteLine("원하시는 행동을 입력해주세요.");
                Console.Write(">>");
            }
            else if (gold >= item.Price)
            {
                gold -= item.Price;
                inventory.Add(item);
                Console.WriteLine("{0}을(를) 구매하였습니다!", item.Name);
                Console.WriteLine("");
                Console.WriteLine("0. 나가기");
                Console.WriteLine("");
                Console.WriteLine("원하시는 행동을 입력해주세요.");
                Console.Write(">>");
            }
            else
            {
                Console.WriteLine("골드가 부족합니다.");
                Console.WriteLine("");
                Console.WriteLine("0. 나가기");
                Console.WriteLine("");
                Console.WriteLine("원하시는 행동을 입력해주세요.");
                Console.Write(">>");
            }

            Console.ReadLine();
        }

        public void Rest()
        {
            Console.Clear();
            Console.WriteLine("휴식하기");
            Console.WriteLine("현재 체력 : {0}", hp);
            Console.WriteLine("500 G를 내면 체력을 회복할 수 있습니다. (보유 골드 : {0})", gold);
            Console.WriteLine("");
            Console.WriteLine("1. 휴식하기");
            Console.WriteLine("0. 나가기");
            Console.WriteLine("");
            Console.WriteLine("원하시는 행동을 입력해주세요.");
            Console.Write(">>");
            int choice = int.Parse(Console.ReadLine());
            if (choice == 1)
            {
                if (gold >= 500)
                {
                    gold -= 500;
                    liveHp = 0;
                    Console.WriteLine("");
                    Console.WriteLine("체력이 모두 회복되었습니다.");
                    Console.WriteLine("");
                    Console.WriteLine("0. 나가기");
                    Console.WriteLine("");
                    Console.WriteLine("원하시는 행동을 입력해주세요.");
                    Console.Write(">>");
                    Console.ReadLine();
                }
                else
                {
                    Console.WriteLine("");
                    Console.WriteLine("골드가 부족합니다.");
                    Console.WriteLine("");
                    Console.WriteLine("0. 나가기");
                    Console.WriteLine("");
                    Console.WriteLine("원하시는 행동을 입력해주세요.");
                    Console.Write(">>");
                    Console.ReadLine();
                }
            }


        }
    }
}