EasyCastleUNITY

1차원 배열을 통한 인벤토리 생성 본문

C#프로그래밍

1차원 배열을 통한 인벤토리 생성

EasyCastleT 2023. 7. 25. 11:05

인벤토리 설명

 

인벤토리
-----------------------------------
필요한 정보

총용량

----------------------------------
기능
인벤토리의 아이템을 저장하는 기능
아이템을 다시 빼오는 기능
인벤토리의 총용량을 증가 시키는 기능
현재 인벤토리의 상황을 보여주는 기능 

 

 

아이템

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

namespace LearnDotnet
{
    internal class Item
    {
        //멤버 변수
        public int itemCount = 0;
        public string Name { get; set; } //속성
        //생성자
        public Item(string name)
        {
            this.Name = name;
            // Console.WriteLine("{0}이 생성되었습니다",this.Name);
        }
    }
}

인벤토리

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

namespace LearnDotnet
{
    internal class Inventory
    {
        //멤버변수
        private int capacity; //인벤토리의 총용량
        private Item[] items; //아이템들을 저장할 배열
        private Item searchItem; //찾는 아이템을 저장
        private Item[] expandItems; //총용량을 늘리기 위해 사용하는 배열
        private int inventoryCount = 0; //inventory가 증가한 총용량을 저장
        //생성자
        public Inventory(int capacity) //입력받은 양 만큼의 크기의 인벤토리 생성
        {
            this.capacity = capacity;
            items = new Item[this.capacity];
        }
        //멤버 함수

        //아이템을 배열에 저장하는 함수
        public void AddItem(Item item)
        {
            for (int i = 0; i < items.Length; i++)
            {
                if (this.items[i] == null)
                {
                    this.items[i] = item;
                    this.items[i].itemCount++;
                    break;
                }
                else if (this.items[i].Name == item.Name)
                {
                    this.items[i].itemCount++;             
                    break;
                }
            }

        }
        //인벤토리 현재 상태를 보여주는 함수
        public void PrintAllItems()
        {
            for (int i = 0; i < items.Length; i++)
            {
                if (items[i] != null)
                {
                    Console.WriteLine("{0}X{1}", this.items[i].Name, this.items[i].itemCount);
                }
                else
                {
                    Console.WriteLine("[  {0}  ]", null);
                }
            }
            Console.WriteLine("--------------------------");
        }

        //이름으로 아이템을 인벤토리에서 빼는 함수 
        public Item GetItemByName(string name)
        {
            int emptyNumber = 0;
            for (int i = 0; i < items.Length; i++)
            {
                if (items[i] != null)
                {
                    if (items[i].Name == name)
                    {
                        emptyNumber = i;
                        searchItem = items[i];
                        items[i].itemCount--;
                        if (this.items[i].itemCount == 0)
                        {
                            this.items[i] = null;
                        }
                    }
                }
            }
            //앞으로 정렬 
            Item[] newItems = new Item[this.capacity];
            int itemPointer = 0;
            for (int i = 0; i < this.items.Length; i++)
            {
                if (items[i] != null)
                {
                    newItems[itemPointer] = items[i];
                    itemPointer++;
                }
            }
            items = newItems;
            return searchItem;
        }
		//인벤토리 총용량을 증가시키는 메서드 
        public void ExpandInventory(int expandNum)
        {
            inventoryCount = items.Length + expandNum;
            expandItems = new Item[inventoryCount];
            for (int i = 0;i<items.Length;i++)
            {
                if (items[i] != null)
                expandItems[i] = items[i];
            }
            items = expandItems;
            Console.WriteLine("인벤토리 칸이 {0} 만큼 증가하여 총 {1}칸이 되었습니다", expandNum,inventoryCount);
        }
    }
}

실행

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

namespace LearnDotnet
{
    internal class App
    {
        //생성자
        public App()
        {
            Inventory inven = new Inventory(5);
            inven.AddItem(new Item("장검"));
            inven.AddItem(new Item("장검"));
            inven.AddItem(new Item("장검"));
            inven.AddItem(new Item("단검"));
            inven.AddItem(new Item("활"));

            inven.PrintAllItems();

            string searchName = "단검";
            Item item = inven.GetItemByName(searchName);
            if (item != null)
            {
                Console.WriteLine("{0}을 꺼냈습니다.", item.Name);
                Console.WriteLine("--------------------------");

            }
            else
            {
                Console.WriteLine("{0}을 찾을수 없습니다.", searchName);
                Console.WriteLine("--------------------------");
            }

            inven.PrintAllItems();
            inven.ExpandInventory(5); //인벤토리 용량 증가 +5

            inven.PrintAllItems();


        }
    }
}

결과