1-11) TIL

최보훈·2024년 1월 11일
0
post-thumbnail

텍스트RPG

아이템 관리

  • 문제
    1. 기존의 코드의 경우 아이템을 저장하는 리스트가 items이라는 이름으로 shop클래스, player클래스에 동시에 존재하고있었다.
	public class Shop : Scene
	{
    	// bool 변수는 팔렸는지의 여부(true면 구매불가)
    	public List<(Item, bool)> items { get; protected set; }
    }
    public class Player : Unit
    {
      public List<(Item, bool)> items { get; private set; }
    }
  • 해결방법
    1. 간단하게 이름을 변경해 주면된다.

장비 중복검사

  • 구현 목표
    1. 현제 팀원이 사용한 아이템 list에서 더 추가하거나 변경하지 않고 이를 활요해서 원하는 기능 작동하게 하기
    2. 아이템 유형별로 중복되어 장착하지 하지 못하게 하기.
  • 구현 코드
public void EquipOrDequip(int index)
{
    var selectedItem = items[index];

    if (selectedItem.Item2)
    {
        items[index] = (selectedItem.Item1, false);
        Console.WriteLine($"{selectedItem.Item1.name}이(가) 해제되었습니다.");
    }
    else
    {
        var itemType = selectedItem.Item1.itemType;
        foreach (var i in items.Where(i => i.Item2 && i.Item1.itemType == itemType).ToList())
        {
            items[items.IndexOf(i)] = (i.Item1, false);
            Console.WriteLine($"{i.Item1.name}이(가) 해제되었습니다.");
        }
        items[index] = (selectedItem.Item1, true);
        Console.WriteLine($"{selectedItem.Item1.name}이(가) 장착되었습니다.");
    }
}

foreach (var i in items.Where(i => i.Item2 && i.Item1.itemType == itemType).ToList())
list.where은 원본 데이터에서의 일부 조건을 만족하는 데이터를 추출하고자 사용한다.
items[items.IndexOf(i)] = (i.Item1, false);
indexOf(i)의 경우 특정 리스트의 index값을 알기 위해 사용되었다.

0개의 댓글