일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 팀프로젝트
- 길건너 친구들
- 오브젝트 풀링
- Photon Fusion
- 가상현실
- input system
- CGV
- 유니티 UI
- 드래곤 플라이트 모작
- XR
- 유니티 Json 데이터 연동
- 팀 프로젝트
- ChatGPT
- 멀티플레이
- OVR
- 개발일지
- 모작
- meta xr
- 오큘러스
- HAPTIC
- 포트폴리오
- 유니티 GUI
- 유니티
- 드래곤 플라이트
- Oculus
- VR
- 앱 배포
- 연습
- meta
- 개발
Archives
- Today
- Total
EasyCastleUNITY
컬렉션을 활용한 아이템 및 인벤토리 본문
ItemData: 아이템의 정보를 가지고 있는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
using System.Xml.Linq;
namespace LearnDotnet
{
//아이템의 정보를 나타내는 클래스
internal class ItemData
{
public ItemData data;
public int id;
public string name;
public int damage;
public int item_type;
//생성자
public ItemData(int id, string name,int item_type, int damage)
{
this.id = id;
this.name = name;
this.damage = damage;
this.item_type = item_type;
}
}
}
Item: 실제로 아이템을 생성하는 클래스, Weapon, Potion, Armor의 부모클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Item
{
public enum eItemType
{
WEAPON,ARMOR,POTION
}
public ItemData data;
public eItemType itemType;
//생성자
public Item()
{
}
public Item(ItemData data)
{
this.data = data;
this.itemType = (eItemType)data.item_type;
// Console.WriteLine("{0}이 생성되었습니다", this.data.name);
}
public string GetName()
{
return this.data.name;
}
public eItemType GetItemType()
{
return this.itemType;
}
}
}
MonsterData: 몬스터의 정보를 저장하는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
//몬스터의 정보를 나타내는 클래스
internal class MonsterData
{
public MonsterData monsterData;
public int id;
public string name;
public int hp;
public int item_id;
//생성자
public MonsterData(int id, string name,int hp,int item_id)
{
this.id = id;
this.name = name;
this.item_id = item_id;
this.hp = hp;
}
}
}
Monster: 실제 몬스터를 생성하는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Monster
{
public MonsterData monsterData;
Dictionary<int, ItemData> dic;
int hp;
public Monster(Dictionary<int, ItemData> dic,MonsterData data)
{
this.monsterData = data;
this.dic = dic;
this.hp = data.hp;
}
public Item Die()
{
// if (this.hp <= 0)
// {
monsterData.hp = 0;
Console.WriteLine("{0}이 죽었습니다", this.monsterData.name);
Item item = new Item(dic[monsterData.item_id]);
return item;
// }
// else return null;
}
public void Attack()
{
}
public void HitDamage(int damage)
{
this.hp -= damage;
}
public void StateCheck()
{
}
}
}
HeroData: 영웅의 정보를 저장하고 있는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class HeroData
{
public int id;
public string name;
public int damage;
public int hp;
public HeroData(int id, string name, int damage,int hp)
{
this.id = id;
this.name = name;
this.damage = damage;
this.hp = hp;
}
}
}
Hero: 실제 영웅을 생성하는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Hero
{
//멤버 변수
public HeroData data;
int hp;
//생성자
public Hero(HeroData data)
{
this.data = data;
}
//멤버 메서드
public void Attack()
{
}
public void Equip()
{
}
public void HitDamage(int damage)
{
this.hp -= damage;
}
public void Die()
{
}
}
}
Weapon: 아이템 중 weapon을 관리하는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Weapon:Item
{
//생성자
public Weapon(ItemData data ):base (data)
{
}
}
}
Armor: 아이템 중 armor를 관리하는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Armor:Item
{
public Armor(ItemData data): base (data){
}
}
}
Potion: 아이템 중 potion을 관리하는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Potion:Item
{
public Potion(ItemData data): base(data)
{
}
}
}
인벤토리
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Inventory
{
//멤버 변수
List<Item> items;
int capacity;
int count;
//생성자
public Inventory(int capacity)
{
this.capacity = capacity;
this.items = new List<Item>();
Console.WriteLine("{0}칸짜리 가방이 생성되었습니다 [({1})/({0})]", this.capacity, items.Count);
}
//아이템 저장
public void AddItem(Item item)
{
items.Add(item);
if (count >= this.capacity)
{
Console.WriteLine("공간이 부족합니다");
count = this.capacity;
}
else
{
count++;
Console.WriteLine("{0}이(가) 추가 되었습니다 [({1})/({2})]", item.data.name, items.Count, this.capacity);
}
}
//인벤토리 현재 상태 보여줌
public void PrintInventory()
{
Console.WriteLine("----아이템 목록-----");
foreach (Item item in this.items)
{
Console.WriteLine("{0}", item.data.name);
}
Console.WriteLine();
}
//ID로 찾아서 꺼내기(가장 먼저 찾은)
public Item GetItem(int id)
{
for(int i=0; i<this.items.Count; i++)
{
Item item = this.items[i];
if(item.data.id == id)
{
Console.WriteLine("{0} 아이템을 찾았습니다",item.data.name);
this.items.Remove(item); //인벤토리 제거
count--;
return item;
}
}
return null;
}
public int Count()
{
return this.count;
}
}
}
App: 실행
using System;
using System.Collections;
using System.Collections.Generic;
//using 지시문을 사용하면 네임스페이스에 정의된 형식을 해당 형식의 정규화된 네임스페이스를 지정하지 않고도 사용할 수 있습니다.
namespace LearnDotnet
{
public class App
{
//생성자
public App()
{
//초기화
Dictionary<int, ItemData> itemDic = new Dictionary<int, ItemData>(); ;
itemDic.Add(100,new ItemData(100, "장검", 0,8));
itemDic.Add(101,new ItemData(101, "단검", 0, 5));
itemDic.Add(102,new ItemData(102, "활", 0, 6));
itemDic.Add(103,new ItemData(103, "도끼", 0, 10));
itemDic.Add(104,new ItemData(104, "사슬 갑옷", 0, 0));
itemDic.Add(105,new ItemData(105, "체력 물약", 0, 0));
//사전에서 키로 값을 가져오기
//고블린을 잡았다
//장검이 나왔다!
ItemData data = itemDic[100];
Item item = new Item(data);
//Console.WriteLine(item.data.id); //100
//Console.WriteLine(item.data.name); //장검
//Console.WriteLine(item.data.damage); //8
//몬스터 데이터를 저장하는 컬렉션
Dictionary<int, MonsterData> monsterDic = new Dictionary<int, MonsterData>();
monsterDic.Add(1000, new MonsterData(1000, "고블린",15,100));
monsterDic.Add(1001, new MonsterData(1001, "트롤",20,101));
monsterDic.Add(1002, new MonsterData(1002, "오우거",30,102));
//고블린 데이터 가져오기
MonsterData monsterData = monsterDic[1000];
Monster monster = new Monster(itemDic,monsterData);
//Console.WriteLine(monster.monsterData.id); //1000
//Console.WriteLine(monster.monsterData.name); //고블린
//Console.WriteLine(monster.monsterData.item_id); //100
Item dropItem = monster.Die();
Console.WriteLine(dropItem.data.name); //장검
Inventory inven = new Inventory(3);
inven.AddItem(new Item(itemDic[100])); //장검추가
inven.AddItem(new Item(itemDic[101])); //단검추가
inven.AddItem(new Item(itemDic[102])); //활 추가
Item itemInven = inven.GetItem(100);
Console.WriteLine(itemInven.GetName());
//Console.WriteLine(inven.Count());
inven.PrintInventory();
//단검
//활
inven.AddItem(new Item(itemDic[100]));
inven.AddItem(new Item(itemDic[103]));//공간이 부족합니다
//상속 확인
Weapon weapon = new Weapon(itemDic[100]);
Armor armor = new Armor(itemDic[104]);
Potion potion = new Potion(itemDic[105]);
Inventory inven1 = new Inventory(3);
inven1.AddItem(weapon);
inven1.AddItem(armor);
inven1.AddItem(potion);
Weapon item2 = (Weapon)inven1.GetItem(100); //다운캐스팅
Console.WriteLine(item2.GetItemType());
//히어로 데이터를 저장하는 컬렉션
Dictionary<int, HeroData> heroDic = new Dictionary<int, HeroData>();
//히어로 데이터 가져오기
heroDic.Add(1, new HeroData(10000, "Arthor", 2,25));
}
}
}
결과
'C#프로그래밍' 카테고리의 다른 글
디자인 패턴 (0) | 2023.07.26 |
---|---|
DataManager (0) | 2023.07.26 |
2048 (이동 까지만 구현) (0) | 2023.07.25 |
2차원 배열을 통한 맵 이동 (워프 히어로) (0) | 2023.07.25 |
2차원 배열 응용, 맵 만들기 (0) | 2023.07.25 |