[학원 Unity]/[게임 알고리즘]

2일차 인벤토리 만들기

롤링페이퍼 2024. 8. 13. 13:08

main

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study00
{
    public class Program
    {
        static void Main(string[] args)
        {
            //App클래스의 인스턴스를 생성
            App app = new App();

        }

        
    }
}

 

App

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study00
{
    public class App
    {
        /*
        // 문자열타입의 1차원 배열 변수 fruitNames를 정의
        // 정적 문자열 배열 타입
        string[] fruitNames; // 참조 형식이다.

        List<string> fruitNameList; // 참조 형식이다.

        // 정수형타입의 1차원 배열 변수 fruiuPrices를 정의
        int[] fruiuPrices;

        생성자(메서드)
        public App()
        {
            // 배열인스턴스 생성
            fruitNames = new string[3];

            // 배열의 길이를 출력
            Console.WriteLine($"배열의 길이 : {fruitNames.Length}");

            // 리스트 인스턴스화
            fruitNameList = new List<string>();

            // 리스트의 길이 출력
            Console.WriteLine($"리스트의 길이 : {fruitNameList.Count}");

            // 요소를 추가

            // 인덱스로 배열의 요소(변수)에 접근
            fruitNames[0] = "수박";
            fruitNames[1] = "딸기";
            fruitNames[2] = "멜론";

            // 요소의 값들을 출력
            Console.WriteLine(fruitNames[0]);
            Console.WriteLine(fruitNames[1]);
            Console.WriteLine(fruitNames[2]);

            // 배열의 요소들을 순회
            for (int i = 0; i < fruitNames.Length; i++)   // fruitNames.Length : 해당 배열의 길이 만큼 반복
            {
                // 요소의 값을 출력
                Console.WriteLine(fruitNames[i]);       // 0, 1, 2
            }

            // 리스트에 요소를 추가
            fruitNameList.Add("오렌지");
            fruitNameList.Add("사과");
            fruitNameList.Add("복숭아");
            fruitNameList.Add("레몬");

            // 리스트의 요소 수를 출력 / fruitNameList.Count : 리스트 배열의 길이
            Console.WriteLine(fruitNameList.Count);     // 4

            // 리스트에 요소를 제거
            fruitNameList.Remove("복숭아");

            // 리스트의 요소 수를 출력
            Console.WriteLine(fruitNameList.Count);     // 3

            // 리스트의 요소의 값을 출력 (인덱스로접근)
            Console.WriteLine("=> {0}", fruitNameList[0]);

            // 리스트의 요소를 순회
            for (int i = 0; i < fruitNameList.Count; i++)
            {
                Console.WriteLine($"{i}", fruitNameList[i]);
            }


        }
        */
       // 생성자
        public App() 
        {
           Inventory inven = new Inventory();

            // 아이템 생성 (검)
            Item item0 = new Item(Item.WeaponType.Bow);
            inven.AddItem(item0);    // 값 : Item클래스의 인스턴스, 타입 : Item형식
            Item item1 = new Item(Item.WeaponType.Dagger);
            inven.AddItem(item1);    // 값 : Item클래스의 인스턴스, 타입 : Item형식
            Item item2 = new Item(Item.WeaponType.Sword);
            // 인벤토리에 아이템을 추가
            inven.AddItem(item2);    // 값 : Item클래스의 인스턴스, 타입 : Item형식

            inven.DisPlayItem();

            int count = inven.GetItemCount();
            Console.WriteLine($"인벤에 있는 아이템의 수 : {count}");  // 2

            bool found = inven.FindItem(Item.WeaponType.Sword);  // 칼을 찾고 싶다.
            if(found)
            {
                Console.WriteLine($"칼이 있습니다.");
                Item sword = inven.GetItem(Item.WeaponType.Sword);
                Console.WriteLine($"칼을 가져왔습니다. : {sword}");

                count = inven.GetItemCount();
                Console.WriteLine($"인벤에 있는 아이템의 수 : {count}");  // 2
            }else
            {
                Console.WriteLine("칼이 없습니다.");
            }
        }
    }
}

 

Inventory

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study00
{
    public class Inventory
    {
        Item[] itemNames;
       
        //생성자
    public Inventory() 
        {
            Console.WriteLine("인벤토리가 생성되었습니다.");

            // 배열의 인스턴스화
            itemNames = new Item[3];
        }

        public int idx;
        // 인벤토리의 기능
        // 1. 아이템을 추가 하는 기능 메서드
        // 2. AddItem
        // 3. 메서드 정의 (기본형)
        public void AddItem(Item item)
        {
            // 기능구현
            itemNames[idx++] = item;
        }

        internal void DisPlayItem()
        {
            for (int i = 0; i < itemNames.Length; i++)
            {
                Item item = itemNames[i];
                Console.WriteLine($"{item.weaponType}");
            }
        }

        public bool FindItem(Item.WeaponType itemType)
        {
            for (int i = 0; i < itemNames.Length; i++)
            {
                Item item = itemNames[i];
                if(item.weaponType == itemType)
                {
                    return true;
                }                
            }
            return false;
        }

        public Item GetItem(Item.WeaponType itemType)
        {
            for (int i = 0; i < itemNames.Length; i++)
            {
                Item item = itemNames[i];
                if(item.weaponType == itemType)
                {
                    // 인벤토리에 아이템이 있던 위치(인덱스)에 null을 할당
                    itemNames[i] = null;

                    return item;
                }
            }
            return null;
        }

        public int GetItemCount()
        {
            int count = 0;

            for (int i = 0; i < itemNames.Length; i++)
            {
                Item item = itemNames[i];
                if(item != null)
                {
                    count++;
                }
            }
            return count;
        }
    }
}

 

item

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study00
{
    public class Item
    {
        // 상수 집합(열거형식)을 정의
        public enum WeaponType
        {
            // 열거형색의 맴버 이름을 정의한다
            // 기본이 정수형식 , 0부터 시작하며 정의된 맴버의 순서에 따라 1식 증가.
            // 기본값이 0이다.
            Sword,
            Dagger,
            Bow
        }
        //맴버 변수
        public WeaponType weaponType;

        //생성자
        public Item(WeaponType weaponType)
        {
            // Console.WriteLine($"맴버변수 : {this.weaponType}, 매개변수 : {weaponType}");
            this.weaponType = weaponType;
            Console.WriteLine($"아이템{weaponType}이 생성되었습니다.");
        }
    }
}

'[학원 Unity] > [게임 알고리즘]' 카테고리의 다른 글

2일차 시즈탱크 / Delegate이용  (0) 2024.08.14
Delegate (대리자)  (0) 2024.08.13
1일차 과제(2)  (0) 2024.08.12
1일차 과제(1) 미완성  (0) 2024.08.12
1일차 미니테스트  (0) 2024.08.12