C# 문법 종합반 개인 과제 / 던전 게임 만들기 / 아이템 세팅 및 착용 / 오류발생
2023. 8. 21. 20:17ㆍC# 문법 종합반
- C# 콘솔을 통해 마을에서 장비를 구하는 게임을 텍스트로 구현한다.
- 상점의 아이템들 중 내가 원하는 장비를 선택해 착용한다.
- 장비는 객체나 구조체를 활용, 여러 데이터를 다루는 부분은 배열을 활용.
<제작 프로세스>
1. 기본 화면 세팅
2. 아이템 정보 세팅 (배열 활용)
3. 기본화면 중 인벤토리에 아이템 정보 기입
4. 인벤토리를 통해 장비 장착 화면에서 아이템을 착용 및 해제할 수 있도록 적용
5. 추가 원하는 작업
2.
아이템 정보 세팅은 배열을 활용한다.
static void GameDataSetting() // 게임 데이터 세팅
{
// 캐릭터 정보 세팅
player = new Character("Chad", "전사", 1, 10, 5, 100, 1500); // 플레이어 정보 초기화
Item[] items = new Item[] // 아이템 정보 배열 활용
{
new Item("무쇠갑옷", "방어", 5),
new Item("낡은 검", "공격", 2),
new Item("가죽 샌들", "방어", 2),
new Item("금 목걸이", "체력", 5)
};
// 아이템을 플레이어의 인벤토리에 추가하세요
player.Inventory.AddRange(items);
}
static void DisplayInventory() // 인벤토리 표시
{
Console.Clear();
Console.WriteLine("인벤토리");
Console.WriteLine("보유 중인 아이템을 관리할 수 있습니다.");
Console.WriteLine();
Console.WriteLine("[아이템 목록]");
int itemIndex = 1;
foreach (var item in player.Inventory)
{
Console.WriteLine($"{itemIndex}. {item.Name} | {item.Type} +{item.StatBonus}");
itemIndex++;
}
Console.WriteLine();
Console.WriteLine("원하시는 행동을 입력해주세요");
Console.WriteLine("1. 장착 관리");
Console.WriteLine("0. 나가기");
int input = CheckValidInput(0, 1);
switch (input)
{
case 0:
DisplayGameIntro(); // 0을 입력하면 게임 인트로를 다시 보여주기
break;
case 1:
InventorySetting();
break;
}
}
2. 장착 관리
위 아이템 인벤토리 코드에서 1.장착관리 를 선택하면 아래 로직에 따라 아이템을 장착/해제할 수 있다.
static void InventorySetting() // 장착관리 표시
{
Console.Clear();
Console.WriteLine("장착 관리");
Console.WriteLine("장착 혹은 장착 해제할 아이템의 숫자를 입력하세요.");
Console.WriteLine();
Console.WriteLine("[아이템 목록]");
int itemIndex = 1;
foreach (var item in player.Inventory)
{
string equippedText = item.IsEquipped ? "[장착중] " : "";
Console.WriteLine($"{itemIndex}. {equippedText}{item.Name} | {item.Type} +{item.StatBonus}");
itemIndex++;
}
Console.WriteLine();
Console.WriteLine("원하시는 행동을 입력해주세요");
Console.WriteLine("1. 장착");
Console.WriteLine("2. 장착 해제");
Console.WriteLine("0. 나가기");
int input = CheckValidInput(0, 2);
switch (input)
{
case 0:
DisplayInventory();
break;
case 1:
EquipItem();
break;
case 2:
UnequipItem();
break;
}
}
static void EquipItem()
{
Console.WriteLine("장착할 아이템의 번호를 입력해주세요");
int input = CheckValidInput(1, player.Inventory.Count);
Item selected = player.Inventory[input - 1];
// 이미 장착 중인 경우
if (selected.IsEquipped)
{
Console.WriteLine($"{selected.Name}은 이미 장착 중입니다.");
Console.ReadLine();
}
else
{
selected.Equip(player); // 아이템 장착
Console.WriteLine($"{selected.Name}을(를) 장착하였습니다.");
Console.ReadLine();
}
InventorySetting();
}
static void UnequipItem()
{
Console.WriteLine("장착 해제할 아이템의 번호를 입력해주세요");
int input = CheckValidInput(1, player.Inventory.Count);
Item selected = player.Inventory[input - 1];
// 아직 장착되지 않은 경우
if (!selected.IsEquipped)
{
Console.WriteLine($"{selected.Name}은 장착되어 있지 않습니다.");
Console.ReadLine();
}
else
{
selected.Unequip(player); // 아이템 장착 해제
Console.WriteLine($"{selected.Name}의 장착을 해제하였습니다.");
Console.ReadLine();
}
InventorySetting();
}
3. 아이템 정보 캐릭터에 적용
public class Character // 캐릭터 정보
{
public string Name { get; }
public string Job { get; }
public int Level { get; }
public int Atk { get; set; } // setter를 추가하여 스탯 변경 가능하게
public int Def { get; set; } // setter를 추가하여 스탯 변경 가능하게
public int Hp { get; set; } // setter를 추가하여 스탯 변경 가능하게
public int Gold { get; }
public List<Item> Inventory { get; } = new List<Item>(); // 인벤토리 추가
public Character(string name, string job, int level, int atk, int def, int hp, int gold)
{
Name = name;
Job = job;
Level = level;
Atk = atk;
Def = def;
Hp = hp;
Gold = gold;
}
}
public class Item
{
public string Name { get; }
public string Type { get; }
public int StatBonus { get; }
public bool IsEquipped { get; set; } // 아이템 장착 상태 추가
public Item(string name, string type, int statBonus)
{
Name = name;
Type = type;
StatBonus = statBonus;
IsEquipped = false; // IsEquipped 속성 초기화
}
public void Equip(Character player)
{
if (Type == "공격")
{
player.Atk += StatBonus;
}
else if (Type == "방어")
{
player.Def += StatBonus;
}
else if (Type == "체력")
{
player.Hp += StatBonus;
IsEquipped = true; // 아이템 장착 상태 변경
}
}
public void Unequip(Character player)
{
if (Type == "공격")
{
player.Atk -= StatBonus;
}
else if (Type == "방어")
{
player.Def -= StatBonus;
}
else if (Type == "체력")
{
player.Hp -= StatBonus;
IsEquipped = false; // 아이템 장착 상태 변경
}
그런데 오류가 발생했다.
1~3은 장착 시 [장착중]이 나타나지 않고, 그에 따라 장착 해제도 되지 않는다...
1~3은 안되는데 4의 금목걸이는 잘 적용된다...
일단 이쯤 마무리하고 내일 이를 해결하려고 한다.
'C# 문법 종합반' 카테고리의 다른 글
C# 문법 종합반 / 2주차 / 컬렉션 / 배열과 리스트의 차이점 (0) | 2023.08.25 |
---|---|
C# 문법 종합반 개인 과제 / 던전 게임 만들기 / ([장착중] 오류 해결, 콘솔 색 ConsoleColor 설정, 전 화면으로 돌아가기) (0) | 2023.08.23 |
C# 문법 종합반 3주차 과제 1 - 지렁이 게임 (0) | 2023.08.18 |
C# 문법 종합반 개인 과제 - 던전 게임 만들기 / 기본 화면 세팅 / (0) | 2023.08.18 |
C# 문법 종합반 / 2주차 / 배열 (0) | 2023.08.17 |