일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 가상현실
- meta
- Photon Fusion
- 오큘러스
- ChatGPT
- 포트폴리오
- 유니티 UI
- 팀프로젝트
- meta xr
- 유니티 Json 데이터 연동
- Oculus
- 드래곤 플라이트 모작
- 팀 프로젝트
- 길건너 친구들
- 연습
- 오브젝트 풀링
- OVR
- 드래곤 플라이트
- 모작
- CGV
- XR
- 멀티플레이
- 개발일지
- 앱 배포
- VR
- HAPTIC
- 개발
- input system
- 유니티 GUI
- 유니티
Archives
- Today
- Total
EasyCastleUNITY
1차원 배열을 통한 인벤토리 생성 본문
인벤토리 설명
인벤토리
-----------------------------------
필요한 정보
총용량
----------------------------------
기능
인벤토리의 아이템을 저장하는 기능
아이템을 다시 빼오는 기능
인벤토리의 총용량을 증가 시키는 기능
현재 인벤토리의 상황을 보여주는 기능
아이템
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();
}
}
}
결과
'C#프로그래밍' 카테고리의 다른 글
2차원 배열을 통한 맵 이동 (워프 히어로) (0) | 2023.07.25 |
---|---|
2차원 배열 응용, 맵 만들기 (0) | 2023.07.25 |
배열 간단 복습 (0) | 2023.07.25 |
2023/07/24 복습 (0) | 2023.07.25 |
배열 연습 Inventory(정렬 안함, 정렬함 + 아이템 개수 스택) (0) | 2023.07.24 |