과제
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();
}
}