장착 관리
ConsoleKeyInfo info = Console.ReadKey();
구조체 ConsoleKeyInfo를 이용해, info라는 변수를 만들고,
ReadKey로 사용자의 입력값을 저장!
public class Player //플레이어 클래스
{
public string name { get; }
public string job { get; }
public int lv { get; }
public int att { get; }
public int def { get; }
public int hp { get; }
public int currentGold { get; }
public Player(string _Name, string _Job, int _Lv, int _Att, int _Def, int _Hp, int _CurrentGold)
{
name = _Name;
job = _Job;
lv = _Lv;
att = _Att;
def = _Def;
hp = _Hp;
currentGold = _CurrentGold;
}
}
------------
//maingame클래스
```cs
public static Player player;
static void Data()
{
player = new Player("Tonton", "전사", 01, 10, 5, 100, 1500);
}
이런식으로 플레이어 클래스에서 생성자를 만들어, 메인메서드가 있는 클래스에서 초기화 후 객체생성을 해준다.
이렇게 하는 이유는 크게 3가지 있다.
- 객체 초기화:
생성자를 통해 플레이어 객체를 생성할 때 필요한 정보를 한 번에 전달하여 초기화할 수 있다.
이로 인해 객체 생성과 초기화를 분리하지 않고도 더 명확하게 초기화할 수 있다.
- 불변성 보장:
생성자를 통해 초기화한 속성들은 읽기 전용으로 설정하면서 객체의 불변성(immutable)을 보장할 수 있다.
이로써 객체의 상태가 변경되지 않도록 할 수 있다.
- 안정성과 유연성:
생성자를 사용하면 객체의 필수 정보를 누락 없이 전달받아 초기화하므로, 런타임 시 오류를 방지하고 안정성을 높일 수 있다.
또한 생성자 오버로딩을 통해 다양한 초기화 방법을 제공하여 유연성을 확보할 수 있다.
일단 인벤토리에 장비를 넣기위해선 2가지의 클래스가 필요하다
class Inven //인벤토리 클래스
{
private List<EquipItem> equipItemList; // 1번
public Inven()
{
equipItemList = new List<EquipItem>(); //2번
}
public void Items(EquipItem equipItem) //3번
{
equipItemList.Add(equipItem);
}
}
class EquipItem // 장비목록
{
public string itName { get; }
public int itAbility { get; }
public string itType { get; }
public string itInfo { get; }
public EquipItem(string _ItName, int _ItAbility, string _ItType, string _ItInfo)
{
itName = _ItName;
itAbility = _ItAbility;
itType = _ItType;
itInfo = _ItInfo;
}
}
---------------------------------
// maingame클래스
public static Player player;
public static Inven equipInven; // 인벤클래스 초기화
public static EquipItem equipItem1;
public static EquipItem equipItem2;
static void Data()
{
player = new Player("Tonton", "전사", 01, 10, 5, 100, 1500);
equipInven = new Inven();// 객체화
equipItem1 = new EquipItem("무쇠 갑옷", 5, "방어", "무쇠로 만들어져 튼튼한 갑옷입니다."); //장비 객체화
equipItem2 = new EquipItem("낡은 검", 2, "공격", " 쉽게 볼 수 있는 낡은 검 입니다."); //장비 객체화
equipInven.Items(equipItem1); // EquipList함수의 인자값으로 넣어주기
equipInven.Items(equipItem2); // EquipList함수의 인자값으로 넣어주기
}
인벤토리를 객체화할 클래스와 장비를 객체화할 클래스 두개가 필요하다
장비는 위의 플레이어와 같이 생성자로 만들어, 오류가 없도록 만들었다.
이제 설명을 하겠다
인벤토리객체에 장비를 담을 수 있게, 배열을 만들어준다.
하지만 일반 배열로는 장비의 status를 담을 수 없기에,
list로 배열을 선언해준다
Inven클래스를 생성자를 이용하여 1번에서 선언한 list배열을 동적할당 시켜준다
inven클래스의 메서드 Items의 인자값으로 객체화된 equipItem1,2를 넣어준다.
함수내부에서는 인자값(여기선 각 개체)이 들어오면, 그 인자값을 1번에서 생성된 배열에 추가해준다.
for (int i = 0; i < equipItemList.Count; i++)
{
Console.WriteLine($" {i+1}. {equipItemList[i].itName} | {equipItemList[i].itType} + {equipItemList[i].itAbility} | {equipItemList[i].itInfo}");
Console.WriteLine();
}
출력이 잘된다!