과제

Day21 - Linked List(연결 리스트) 과제

qltjfeo55555 2024. 12. 18. 18:28
  • Buff 클래스 제작
    • 버프의 이름을 담을 문자열 필드
    • 버프의 지속시간을 담을 정수형 필드
    • 생성자를 작성하여 위 필드를 초기화 진행
  • BuffManager 클래스
    • 필드로 LinkedList<Buff> 를 가지게 함
    • 구현해야 할 메서드들
      • AddBuff(string name, int duration): 새로운 버프를 링크드리스트에 추가합니다.
      • UpdateBuffs: 모든 버프의 지속 시간을 1 감소시키고, 지속 시간이 0인 버프는 제거합니다.
        • 제거될 때 버프 이름과 "효과 종료" 메시지를 출력합니다.
      • ShowActiveBuffs: 현재 활성화된 모든 버프의 이름과 남은 지속 시간을 출력합니다.
  • 메인서 테스트 해보기
    • BuffManager 객체를 생성하고 다양한 버프를 추가합니다.
    • AddBuff → UpdateBuffs → ShowActiveBuffs 등등을 자유롭게 여러 번 시도 해보면서 버프가 순차적으로 사라지는 과정을 확인합니다.

 

internal class Buff
{
    public string buffname;
    public int buffduringtime;

    public Buff()
    {
        //임의로 기본 값 지정   
        buffname = "빨간포션";
        buffduringtime = 10;
    }
}

internal class BuffManager
{
    LinkedList<Buff> buffManager = new LinkedList<Buff>();

    //버프를 만들고 버프를 리스트에 집어넣음
    public void AddBuff(string name, int duration)
    {
        Buff buff = new Buff();
        buff.buffname = name;
        buff.buffduringtime = duration;
        buffManager.AddLast(buff);
    }
     
    //
    public void UpdateBuffs()
    {
        head를 a에 넣음
        var a = buffManager.First;
        
        //a>next 넣는 과정 무한 반복
        //a값이 null이 나올경우 반복문 빠져나옴
        //전체 buffduringtime을 1을 깍음
        while (a != null)
        {
            a.Value.buffduringtime--;
            if (a.Value.buffduringtime <= 0)
            {
                buffManager.Remove(a);
                Console.WriteLine("효과 종료");
            }
            a = a.Next;
        }
    }
    public void ShowActiveBuffs()
    {
        foreach (var ele in buffManager)
        {
            Console.Write(ele.buffname + " ");
            Console.WriteLine(ele.buffduringtime);
        }
    }
}

//메인문
internal class Program
{
    static void Main(string[] args)
    {
        BuffManager buffManager = new BuffManager();
        //임의로 포션 넣음
        buffManager.AddBuff("빨간포션", 10);
        buffManager.AddBuff("파란포션", 5);
        buffManager.AddBuff("노란포션", 20);

        //호출마다 전체 buff의 buffduringtime을 1씩 감소
        //0이 되면 효과종료 출력
        buffManager.UpdateBuffs();
        buffManager.UpdateBuffs();
        buffManager.UpdateBuffs();
        buffManager.UpdateBuffs();
        buffManager.UpdateBuffs();
        buffManager.UpdateBuffs();
        buffManager.UpdateBuffs();

        //전체 버프 출력
        buffManager.ShowActiveBuffs();
    }
}