71. Unity 최종 프로젝트 5주차(3)

이규성·2024년 2월 7일
0

TIL

목록 보기
78/106

02/07

📌알고리즘 코드 카타 (Algorithm Code Kata)

K번째수

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

입출력 예

arraycommandsreturn
[1, 5, 2, 6, 3, 7, 4][[2, 5, 3], [4, 4, 1], [1, 7, 3]][5, 6, 3]
using System;
using System.Collections.Generic;

public class Solution
{
    public int[] solution(int[] array, int[,] commands)
    {
        int commandsLength = commands.GetLength(0);
        int[] answer = new int[commandsLength];
        List<int> list = new List<int>();

        for (int j = 0; j < commandsLength; j++)
        {
            for (int i = commands[j, 0] - 1; i < commands[j, 1]; i++)
            {
                list.Add(array[i]);
            }
            list.Sort();
            answer[j] = list[commands[j, 2] - 1];
            list.Clear();
        }

        return answer;
    }
}

두 개 뽑아서 더하기

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

입출력 예

numbersresult
[2,1,3,4,1][2,3,4,5,6,7]
[5,0,2,7][2,5,7,9,12]
using System;
using System.Collections.Generic;
using System.Linq;

public class Solution
{
    public int[] solution(int[] numbers)
    {
        List<int> list = new List<int>();

        for (int i = 0; i < numbers.Length - 1; i++)
        {
            for (int j = i + 1; j < numbers.Length; j++)
            {
                int k = numbers[i] + numbers[j];
                list.Add(k);
            }
        }
        list.Sort();
        list = list.Distinct().ToList();

        int[] answer = new int[list.Count];
        
        for (int i = 0; i < list.Count; i++)
        {
            answer[i] = list[i];
        }

        return answer;
    }
}

List와 사랑에 빠지고 말았다. 결국 모든 길은 List를 통하게 될 것이다.

📌팀 프로젝트 진행

목표

Android build 최적화
Ios 빌드 알아보기

금일 구현 설계

방어구 시스템 2트

금일 구현한 사항

방어구 시스템을 업데이트 중입니다.

public class ArmorSystem : MonoBehaviour
{
    public ItemParts part;
    private int _defense;

    public QuickSlot[] _linkedSlots;

    private void Awake()
    {
        _linkedSlots = new QuickSlot[2];

        Managers.Game.Player.ToolSystem.OnEquip += DefenseOfTheEquippedArmor;
        Managers.Game.Player.ToolSystem.OnUnEquip += DefenseOfTheUnEquippedArmor;
        Managers.Game.Player.OnHit += Duration;
    }

    public void DefenseOfTheEquippedArmor(QuickSlot quickSlot)
    {
        ItemData armor = quickSlot.itemSlot.itemData;
        EquipItemData toolItemDate = (EquipItemData)armor;
        _defense += toolItemDate.defense;
        Managers.Game.Player.playerDefense = _defense;

        _linkedSlots[(int)toolItemDate.part] = quickSlot;
    }

    public void DefenseOfTheUnEquippedArmor(QuickSlot quickSlot)
    {
        ItemData armor = quickSlot.itemSlot.itemData;
        EquipItemData toolItemDate = (EquipItemData)armor;
        _defense -= toolItemDate.defense;
        Managers.Game.Player.playerDefense = _defense;

        _linkedSlots[(int)toolItemDate.part] = null;
    }

    public void Duration() // Player Hit에서 호출
    {
        foreach (var items in _linkedSlots)
        {
            Managers.Game.Player.Inventory.UseToolItemByIndex(items.targetIndex, 10);
        }
    }
}
public class UIArmorSlot : UIItemSlot
{
    //여기선 UI적인 처리만 하기, 데이터 처리는 다른 클래스에서 . . .
    //UIArmorSlot을 관리하는 객체가 이벤트 구독
    //ItemData == null 이면 null인 상태의 아이콘을 그려볼까나
    //UIInventory가 UIItemSlotContainer를 쓰는 것 처럼?

    enum Images
    {
        Icon,
    }

    public ItemParts part;

    public override void Initialize()
    {
        Bind<Image>(typeof(Images));
        Get<Image>((int)Images.Icon).gameObject.SetActive(false);
        Get<Image>((int)Images.Icon).raycastTarget = false;
    }

    private void Awake()
    {
        Initialize();
        Managers.Game.Player.ToolSystem.OnEquip += EquipArmor;
        Managers.Game.Player.ToolSystem.OnUnEquip += UnEquipArmor;
        //Managers.Game.Player.Inventory.OnUpdated += UpdateArmorSlots;
    }

    public void EquipArmor(QuickSlot quickSlot)
    {
        int parts = GetPart(quickSlot);

        if (parts == 0)
        {
            switch (part)
            {
                case ItemParts.Head:
                    Set(quickSlot.itemSlot);
                    break;
            }
        }
        else if (parts == 1)
        {
            switch (part)
            {
                case ItemParts.Body:
                    Set(quickSlot.itemSlot);
                    break;
            }
        }
    }

    public void UnEquipArmor(QuickSlot quickSlot)
    {
        int parts = GetPart(quickSlot);

        if (parts == 0)
        {
            switch (part)
            {
                case ItemParts.Head:
                    Clear();
                    break;
            }
        }
        else if (parts == 1)
        {
            switch (part)
            {
                case ItemParts.Body:
                    Clear();
                    break;
            }
        }
    }

    //public void UpdateArmorSlots(int index, ItemSlot itemSlot)
    //{
    //    var itemData = itemSlot.itemData as EquipItemData;

    //    int parts = (int)itemData.part;

    //    //itemSlot = Managers.Game.Player.Inventory.slots[index];

    //    if (parts == 0)
    //    {
    //        switch (part)
    //        {
    //            case ItemParts.Head:
    //                Clear();
    //                break;
    //        }
    //    }
    //    else if (parts == 1)
    //    {
    //        switch (part)
    //        {
    //            case ItemParts.Body:
    //                Clear();
    //                break;
    //        }
    //    }
    //}

    public override void Set(ItemSlot itemSlot)
    {
        Get<Image>((int)Images.Icon).sprite = itemSlot.itemData.iconSprite;
        Get<Image>((int)Images.Icon).gameObject.SetActive(true);
    }

    public override void Clear()
    {
        Get<Image>((int)Images.Icon).gameObject.SetActive(false);
    }

    private int GetPart(QuickSlot slot)
    {
        var itemData = slot.itemSlot.itemData as EquipItemData;
        if (itemData == null) return -1;
        return (int)itemData.part;
    }    
}
public class UIArmorSlotBase : UIPopup
{
    enum ArmorSlot
    {
        Contents,
    }

    public override void Initialize()
    {
        Bind<UIArmorSlot>(typeof(ArmorSlot));
    }

    private void Awake()
    {
        Initialize();
    }
}

업데이트 중입니다.

금일 이슈

금일 커밋한 사항

방어구 시스템을 업데이트 중입니다.

🤸🏻‍♀️Feedback

0개의 댓글