(1)Item.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Item
{
//멤버변수
public string ItemName { get; set; }
//생성자
public Item(string ItemName)
{
this.ItemName = ItemName;
}
}
}
(2)Inventory.cs
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
{
//멤버변수
int capacity;
Item[ , ] items;
int[] itemIndex;
int index=-1;
//생성자
public Inventory(int capacity)
{
this.capacity = capacity;
items = new Item[this.capacity, this.capacity];
itemIndex = new int[this.capacity];
}
//아이템 저장 메서드
public void AddItem(Item item)
{
int foundItemIndex = GetItemIndex(item.ItemName);
if (foundItemIndex < 0) { foundItemIndex = ++index; } //아이템 존재하지 않을 시 새로운 인덱스에 저장
items[foundItemIndex, itemIndex[foundItemIndex]] = item;
itemIndex[foundItemIndex]++; //아이템 갯수
}
//찾고자 하는 아이템의 인덱스 탐색
int GetItemIndex(string itemName)
{
int getItemIndex= -1; //찾고자 하는 아이템이 존재하지 않으면 -1을 반환
for (int i = 0; i <= index; i++)
{
if (itemName == items[i, 0].ItemName)
{
getItemIndex = i;
break;
}
}
return getItemIndex;
}
//아이템 꺼내는 메서드
public Item GetItemByName(string name)
{
Item foundItem = null; //아이템이 존재하지 않을 시 null 반환
int foundItemIndex = GetItemIndex(name);
if(foundItemIndex >= 0)
{
foundItem = items[foundItemIndex, 0];
itemIndex[foundItemIndex]--;
items[foundItemIndex, itemIndex[foundItemIndex]] = null;
if (itemIndex[foundItemIndex] == 0) //꺼내고 남은 아이템이 없을 시 재정렬
{
for (int i = foundItemIndex; i < this.index; i++)
{
for(int j = 0; j < itemIndex[i+1]; j++)
{
items[i, j] = items[i + 1, j];
}
itemIndex[i] = itemIndex[i + 1];
}
for(int i = 0; i < itemIndex[this.index]; i++)
{
items[this.index, i] = null;
}
itemIndex[this.index--] = 0;
}
}
return foundItem;
}
//아이템 출력
public void PrintAllItems()
{
for(int i=0;i< this.capacity; i++)
{
if (itemIndex[i]> 0)
Console.WriteLine("{0} X {1}", this.items[i, 0].ItemName, this.itemIndex[i]);
else Console.WriteLine("[ ]");
}
}
}
}
(3)App.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
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.AddItem(new Item("단검"));
inven.AddItem(new Item("활"));
inven.PrintAllItems();
for (int i = 0; i < 1; i++)
{
string searchName = "장검";
Item item = inven.GetItemByName(searchName);
if (item != null)
{
Console.WriteLine("{0}을 꺼냈습니다.", item.ItemName);
}
else
{
Console.WriteLine("{0}을 찾을수 없습니다.", searchName);
}
inven.PrintAllItems();
}
for (int i = 0; i < 4; i++)
{
string searchName = "단검";
Item item = inven.GetItemByName(searchName);
if (item != null)
{
Console.WriteLine("{0}을 꺼냈습니다.", item.ItemName);
}
else
{
Console.WriteLine("{0}을 찾을수 없습니다.", searchName);
}
inven.PrintAllItems();
}
}
}
}
결과
'K-digital traning > C#프로그래밍' 카테고리의 다른 글
1차원 배열 인벤토리 복습 (+ 인벤토리 용량확장 (0) | 2023.07.25 |
---|---|
배열 연습 (0) | 2023.07.25 |
1차원 배열 인벤토리 (0) | 2023.07.24 |
스타크래프트 - 마린, 저글링, 메딕 (0) | 2023.07.24 |
반복문 for (0) | 2023.07.20 |