728x90
아이템 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace starcraft
{
public class Item
{
public enum eItemType
{
WEAPON,
ARMOR,
POTION
}
public ItemData data;
private eItemType itemType;
//생성자
public Item(ItemData data)
{
this.data = data;
this.itemType = (eItemType)data.item_type;
}
//아이템 데이터의 이름을 반환하는 메서드
public string GetName()
{
//반환값
return this.data.name;
}
//아이템의 타입을 가져옴
public eItemType GetItemType()
{
return this.itemType;
}
}
}
아이템데이터 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace starcraft
{
public class ItemData
{
//아이템의 정보
public int id;
public string name;
public int item_type;
public int damage;
//생성자
public ItemData(int id, string name,int item_type, int damage)
{
this.id = id;
this.name = name;
this.item_type = item_type;
this.damage = damage;
}
}
}
몬스터 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace starcraft
{
internal class Monster
{
public MonsterData data;
Dictionary<int, ItemData> dicItemDatas;
public int hp;
//생성자
public Monster(Dictionary<int, ItemData> dicItemDatas, MonsterData data)
{
this.data = data;
this.dicItemDatas = dicItemDatas;
this.hp = this.data.hp;
}
//몬스터 죽는 메서드
public Item Die()
{
Console.WriteLine("몬스터({0})가 죽었습니다.", this.data.name);
ItemData itemData = this.dicItemDatas[this.data.item_id];
return new Item(itemData);
}
//몬스터 피해입는 메서드
public void HitDamage(int damage)
{
this.hp -= damage;
}
//몬스터 HP 보이기
public int GetHp()
{
return this.hp;
}
}
}
몬스터데이터 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace starcraft
{
internal class MonsterData
{
public int id;
public string name;
public int item_id;
public int hp;
//생성자
public MonsterData(int id, string name, int item_id,int hp)
{
this.id = id;
this.name = name;
this.item_id = item_id;
this.hp = hp;
}
}
}
인벤토리 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace starcraft
{
internal class Inventory
{
//아이템을 그룹/관리
List<Item> items; //변수 정의
public int capacity;
//생성자
public Inventory(int capacity)
{
this.capacity = capacity;
//컬렉션은 사용전 인스턴스화
this.items = new List<Item>();
Console.WriteLine("{0}칸짜리 가방이 생성되었습니다.", this.capacity);
}
//아이템 추가
public void AddItem(Item item)
{
//요소수
//Console.WriteLine("{0}/{1}", this.items.Count, this.capacity);
if(this.items.Count == this.capacity)
{
Console.WriteLine("공간이 부족합니다.");
return;
}
this.items.Add(item);
Console.WriteLine("{0}이 추가되었습니다. [{1}/{2}]", item.data.name, this.items.Count, this.capacity);
}
//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("찾았다!");
this.items.Remove(item);
return item;
}
}
return null;
}
}
}
아이템-weapon 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace starcraft
{
public class Weapon : Item
{
//생성자
public Weapon(ItemData data) : base(data)
{
}
}
}
아이템-armor 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace starcraft
{
public class Armor : Item
{
//생성자
public Armor(ItemData data) : base(data)
{
}
}
}
아이템-potion 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace starcraft
{
public class Potion : Item
{
//생성자
public Potion(ItemData data) : base(data)
{
}
}
}
app 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace starcraft
{
public class App
{
//생성자
public App()
{
//컬렉션의 초기화
Dictionary<int, ItemData> dic = new Dictionary<int, ItemData>();
dic.Add(100, new ItemData(100, "장검",0, 8));
dic.Add(101, new ItemData(101, "단검",0, 5));
dic.Add(102, new ItemData(102, "활",0, 6));
dic.Add(103, new ItemData(103, "도끼",0, 10));
dic.Add(104, new ItemData(104, "사슬 갑옷", 1, 0));
dic.Add(105, new ItemData(105, "체력 물약", 2, 0));
//진짜 무기 생성
Weapon weapon = new Weapon(dic[100]); //장검
Armor armor = new Armor(dic[104]); //사슬 갑옷
Potion potion = new Potion(dic[105]); //체력 물약
//인벤토리 초기화
Inventory inven = new Inventory(3);
inven.AddItem(weapon);
inven.AddItem(armor);
inven.AddItem(potion);
//ID로 아이템 찾아서 꺼내기
Weapon item = (Weapon)inven.GetItem(100); //다운캐스팅
//아이템타입 출력
Console.WriteLine(item.GetItemType()); //WEAPON
}
}
}
'KDT > C# 프로그래밍' 카테고리의 다른 글
23/07/27 전시간 수업 내용 정리 (0) | 2023.07.27 |
---|---|
23/07/26 과제 및 가짜 인벤토리 복습(집에서) (0) | 2023.07.26 |
23/07/26 가짜 인벤토리 만들기1 (0) | 2023.07.26 |
23/07/25 배열 복습 및 연습(집에서) (0) | 2023.07.25 |
23/07/25 다차원 배열 기초연습 (0) | 2023.07.25 |