[Unity] Blender 게임 제작 (3) : 칵테일 제조 알고리즘

혀니앤·2022년 5월 28일

✔️ 오늘의 할 일

  1. 칵테일 오브젝트 만들기
  2. 칵테일 레시피 재료 만들기

오늘도 가벼운 오브젝트..

아직 아트는 없으므로... 오늘도 가볍게 오브젝트를 배치해주었다

큐브 하나하나가 재료 오브젝트고 누르면 재료에 추가가 되고,
칵테일 만들기 버튼을 누르면 칵테일이 만들어진다 (머쓱)

칵테일 오브젝트

아직은 이름밖에 없는 칵테일 스크립트 오브젝트

큐브를 누르면 자신의 재료 정보를 반환한다

        if (alcoholList.Count==0||!alcoholList.Contains(alcohol.Aname))	alcoholList.Add(alcohol.Aname);

레시피 상 동일한 재료가 들어갈 일이 없으므로 재료를 넣을 때 중복된 값이 들어가지 않도록 해주었다.

Sorted Set과 Dictonary 이용한 칵테일 제조

1) Dictonary

우선 Dictonary를 사용해서 레시피 정보를 관리하려고 한다.
재료로 사용한 술들을 입력하면 완성된 칵테일 정보를 반환해줄 것이다.

그러나 Key값으로 그냥 List를 쓴다면 재료 A,B,C를 넣은 것과 재료 A,C,B를 넣은 것은 다른 Key 값으로 인식될 것이다.

2) SortedSet

따라서, Key 값으로 사용해주기 위해 SortedSet을 사용해주기로 했다.
SortedSet은 데이터가 추가되자마자 바로 정렬되므로, {A,C,B}의 데이터를 넣더라도 자동으로 {A,B,C}가 된다

Set 비교 함수

내가 Key 값으로 사용한 Set와 지금 재료를 넣은 Set 가 일치하는지 확인하기 위한 함수를 만들었다.
foreach 문으로 키 Set 값을 하나씩 가져오며 그 값이 다른 Set 값과 일치하는지 확인했다

public bool isEqualSet(SortedSet<string> x, SortedSet<string> y)
    {
        if (x.Count != y.Count) return false; //애초에 개수가 다르면 다른 Set
        foreach(string a in x)
        {
            if (!y.Contains(a)) return false; //하나라도 다르다면 제작 불가
        }
        return true; //모든 값이 같게 반복문을 끝냈다면 같은 Set
    }

결과

라임주스, 크랜베리 주스, 트리플섹으로 만들 수 있는 코스모폴리탄을 Return 했다

재료가 제대로 넣어지지 않았다면 만들 수 있는 칵테일이 없다고 출력한다

profile
티스토리로 이동 ! https://hyun2and.tistory.com/

0개의 댓글