Item 클래스에서는 아이템 리스트를 만들고 다른 곳(상점, 인벤토리)에서 리스트를 출력할 수 있게 만들며 인벤토리에서 장비를 장착하면 플레이어의 능력치가 오르게 하는 기능을 필수로 가지고 있다. 필수적인 기능을 구현한 후 좀 더 게임을 재밌게 할 수 있는 요소가 없을까 고민을 했다. 고민 끝에 아이템 세트 효과 기능을 구현하면 재밌을 것 같아서 구현하기 시작했다.
1. SetBonus()
public string SetBonus(Player player)
{
StringBuilder message = new StringBuilder();
var equippedItems = player.inventory.Where(i => i.IsEquip).ToList();
// 기존에 적용된 세트 효과 확인
int previousBonus = player.CurrentSetBonus;
player.CurrentSetBonus = 0;
if (equippedItems.Any(i => i.Name == "지배자의 피갑옷") && equippedItems.Any(i => i.Name == "몰락한 왕의 검"))
player.CurrentSetBonus = 1;
if (equippedItems.Any(i => i.Name == "심연의 갑옷") && equippedItems.Any(i => i.Name == "어둠불꽃 횃불"))
player.CurrentSetBonus = 2;
// 기존 세트 보너스 해제
if (previousBonus == 1 && player.CurrentSetBonus != 1)
{
player.Attack -= 2;
player.Defense -= 1;
message.AppendLine("세트 효과가 사라졌습니다! 공격력 -2, 방어력 -1 감소.");
}
if (previousBonus == 2 && player.CurrentSetBonus != 2)
{
player.Attack -= 1;
player.Defense -= 1;
player.Dexterity -= 1;
player.Luck -= 1;
player.Intelligence -= 1;
message.AppendLine("세트 효과가 사라졌습니다! 모든 능력치 -1 감소.");
}
// 새로운 세트 보너스 적용
switch (player.CurrentSetBonus)
{
case 1:
player.Attack += 2;
player.Defense += 1;
message.AppendLine("세트 효과 발동! 공격력 +2, 방어력 +1 증가.");
break;
case 2:
player.Attack += 1;
player.Defense += 1;
player.Dexterity += 1;
player.Luck += 1;
player.Intelligence += 1;
message.AppendLine("세트 효과 발동! 모든 능력치 +1 증가.");
break;
}
return message.ToString();
}
특정 아이템 조합을 장착했을 때 추가 능력치를 부여하는 기능이다.
var equippedItems = player.inventory.Where(i => i.IsEquip).ToList();
플레이어의 인벤토리에서 IsEquip == true인 아이템만 가져와서 확인한다.
int previousBonus = player.CurrentSetBonus;
player.CurrentSetBonus = 0;
- previousBonus → 플레이어가 기존에 적용받고 있던 세트 보너스 값을 저장한다.
- player.CurrentSetBonus = 0; → 세트 보너스를 다시 계산하기 위해 초기화한다.
if (equippedItems.Any(i => i.Name == "지배자의 피갑옷") && equippedItems.Any(i => i.Name == "몰락한 왕의 검"))
player.CurrentSetBonus = 1;
if (equippedItems.Any(i => i.Name == "심연의 갑옷") && equippedItems.Any(i => i.Name == "어둠불꽃 횃불"))
player.CurrentSetBonus = 2;
장착된 아이템 목록을 equippedItems.Any(i => i.Name == "아이템이름")으로 검사하여 특정 조합이 있으면 세트 보너스를 부여한다.
if (previousBonus == 1 && player.CurrentSetBonus != 1)
{
player.Attack -= 2;
player.Defense -= 1;
message.AppendLine("세트 효과가 사라졌습니다! 공격력 -2, 방어력 -1 감소.");
}
기존 보너스(previousBonus == 1)가 있었지만 새로운 CurrentSetBonus가 1이 아니라면 세트 효과를 해제한다.
switch (player.CurrentSetBonus)
{
case 1:
player.Attack += 2;
player.Defense += 1;
message.AppendLine("세트 효과 발동! 공격력 +2, 방어력 +1 증가.");
break;
case 2:
player.Attack += 1;
player.Defense += 1;
player.Dexterity += 1;
player.Luck += 1;
player.Intelligence += 1;
message.AppendLine("세트 효과 발동! 모든 능력치 +1 증가.");
break;
}
CurrentSetBonus 값에 따라 능력치를 증가한다. (값이 1이면 공격력 +2, 방어력 +1 증가 / 2면 모든 능력치 +1 증가 )
'C#' 카테고리의 다른 글
[TIL] C# 싱글톤 패턴 (0) | 2025.03.06 |
---|---|
[TIL] C# 프로그래머스 _ 아이스아메리카노 (2) | 2025.02.13 |
[C#] List (0) | 2025.02.11 |
[TIL] C# 프로그래머스_ 피자 나눠먹기(3), 배열의 평균 (1) | 2025.02.10 |
[TIL] C# 프로그래머스_ 더 크게 합치기, 홀짝에 따라 다른 값 반환하기 (0) | 2025.02.07 |