1. Items.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Item
{
//멤버변수
string itemName;
//생성자
public Item(string itemName)
{
this.itemName = itemName;
}
//아이템 이름 반환 메서드
public string GetItemName()
{
return this.itemName;
}
}
}
2. Inventory.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Inventory
{
//멤버변수
Item[] items;
int capacity;
int itemIndex;
//생성자(매개변수를 통해 용량 설정)
public Inventory(int capacity)
{
this.capacity = capacity;
items= new Item[this.capacity];
}
//아이템 추가 메서드
public void AddItem(Item item)
{
//인벤토리의 용량이 가득 찼을 경우 용량 확장
if (this.itemIndex == this.capacity)
{
IncreaseCapacity();
}
items[itemIndex++] = item;
}
//아이템 이름으로 아이템을 꺼내는 메서드
public Item GetItemName(string name)
{
Item tempItem = null;
int getIndex = -1;
for(int i=0;i<itemIndex; i++)
{
if (items[i].GetItemName() == name)
{
tempItem = items[i];
items[i] = null;
getIndex = i;
break;
}
}
if (getIndex != -1)
{
ArraySort(getIndex);
}
return tempItem;
}
//아이템 출력 메서드
public void PrintProperties()
{
for(int i=0;i<items.Length; i++)
{
Console.Write("{0}. ", i);
if (items[i] != null) { Console.WriteLine(items[i].GetItemName()); }
else Console.WriteLine("[ ]");
}
}
//아이템 재배열 메서드(아이템을 꺼냈을 때 사용, 내부적으로 돌아가므로 public X)
void ArraySort(int index)
{
for (int i = index; i < items.Length - 1; i++)
items[i] = items[i + 1];
this.itemIndex--;
items[this.itemIndex] = null;
}
//인벤토리 용량 확장 메서드(용량이 찼을 때 사용, 내부적으로 돌아가므로 public X)
void IncreaseCapacity()
{
Item[] temp = new Item[this.capacity + 1];
for (int i = 0; i < this.capacity; i++)
temp[i] = items[i];
items = temp;
temp = null;
this.capacity++;
}
}
}
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 inventory = new Inventory(5);
//아이템 추가
inventory.AddItem(new Item("장검"));
inventory.AddItem(new Item("단검"));
inventory.AddItem(new Item("활"));
//아이템 출력
inventory.PrintProperties();
//아이템을 찾고 꺼내기
string getItemName = "장검";
Item getItem=inventory.GetItemName(getItemName);
if (getItem == null)
{
Console.WriteLine("아이템({0})이 존재하지 않습니다.", getItemName);
}
else
{
Console.WriteLine("아이템({0})을 꺼냈습니다.", getItem.GetItemName());
}
inventory.PrintProperties();
inventory.AddItem(new Item("장검"));
inventory.AddItem(new Item("단검"));
inventory.AddItem(new Item("활"));
inventory.AddItem(new Item("장검"));
inventory.AddItem(new Item("단검"));
inventory.AddItem(new Item("활"));
inventory.PrintProperties();
string getItemName1 = "검";
Item getItem1 = inventory.GetItemName(getItemName1);
if (getItem1 == null)
{
Console.WriteLine("아이템({0})이 존재하지 않습니다.", getItemName1);
}
else
{
Console.WriteLine("아이템({0})을 꺼냈습니다.", getItem1.GetItemName());
}
inventory.PrintProperties();
}
}
}
결과
'K-digital traning > C#프로그래밍' 카테고리의 다른 글
가짜 인벤토리 만들기 (0) | 2023.07.26 |
---|---|
2차원 배열 연습 (0) | 2023.07.25 |
배열 연습 (0) | 2023.07.25 |
1차원 배열 인벤토리 (0) | 2023.07.25 |
1차원 배열 인벤토리 (0) | 2023.07.24 |