C#) Text RPG 3
ShopScene

- 아이템을 구매 또는 판매 할 수 있는 공간으로 넘어가기 위한 Scene
- 이미 소지한 아이템은 가격 표시 제한
ShopBuyScene

- 이미 가지고 있는 아이템은 중복 구매를 막는 기능 (가격 표시 제한 및 구매 제한 기능)
BuyItem
- 구매 시도 시 몇 가지 분기를 거쳐 구매를 진행 한다.
- 이미 소지한 아이템인지
- 보유 골드가 충분 한지
private void BuyItem(int idx)
{
// 구매 불가
if (core.items[idx - 1].Own)
{
Console.WriteLine("이미 구매한 아이템입니다.");
Thread.Sleep(1000);
}
// 구매 가능
else
{
// Gold 충분
if (core.items[idx - 1].Gold <= character.Gold)
{
core.items[idx - 1].Own = true;
character.Gold -= core.items[idx - 1].Gold;
Console.WriteLine("구매를 완료했습니다.");
Thread.Sleep(1000);
}
// Gold 부족
else
{
Console.WriteLine("Gold가 부족합니다.");
Thread.Sleep(1000);
}
}
}
ShopSellScene

- 소지한 아이템을 판매 하는 기능
- 미소지 아이템은 미소유 표기
- 판매 가격은 구매 가격 대비 85%
SellItem
private void SellItem(int idx)
{
EquipmentScene equipmentScene = EquipmentScene.GetInst();
Item item = core.items[idx - 1];
// 판매 불가
if (!item.Own)
{
Console.WriteLine("소유하지 않은 아이템입니다.");
Thread.Sleep(1000);
}
// 판매 가능
else
{
// 장착 중이라면 장착 해제
if (item.Equip)
{
equipmentScene.MountItem(item, false);
}
item.Own = false;
character.Gold += (int)((float)item.Gold * 0.85f);
Console.WriteLine("판매를 완료했습니다.");
Thread.Sleep(1000);
}
}
- 장착 중인 아이템 판매 시도 시에, 장착 해제 후 판매 기능
RestScene


- 다른 Scene 들에 비해 많이 간단하지만, 새로운 Scene 구성을 안하고 하나의 Scene에서 구성 해본 Scene이다.
DungeonScene

- 난이도 별 구현
TryDungeon
private void TryDungeon(int dLevel)
{
int defese = character.Defense;
Random random = new Random();
// 캐릭터 방어력이 권장 방어력 보다 낮을 때
if (defese < levelDefense[dLevel - 1])
{
int ranValue = random.Next(1, 10);
// 40% 확률로 실패
if (ranValue <= 4)
{
// 체력 반토막 + 보상 없음
character.HP /= 2;
Clear();
Console.WriteLine("던전 클리어 실패.");
Console.WriteLine("[탐험 결과]");
Console.WriteLine($"체력 {prevHP} -> {character.HP}");
Thread.Sleep(2000);
return;
}
}
// 캐릭터 방어력이 권장 방어력 보다 높을 때
// 기본 20~35 감소, (내 방어력 - 권장 방어력) 만큼 랜덤 값에 설정
int subtractHP = random.Next(20, 36) + (levelDefense[dLevel - 1] - defese);
character.HP -= subtractHP;
Reward(dLevel);
}
- 40% 확률로 실패.
- 실패시 보상 없음
- 실패시 체력 반토막
- 성공시 체력 감소 알고리듬
Reward
private void Reward(int dLevel)
{
Random random = new Random();
//공격력 ~ 공격력 * 2 의 % 만큼 추가 보상 획득 가능
int ranValue = random.Next((int)character.Attack, (int)character.Attack * 2);
int resultReward = levelReward[dLevel - 1];
resultReward += (int)(((float)ranValue / 100) * levelReward[dLevel - 1]);
character.Gold += resultReward;
character.DGtry++;
character.LevelCheck();
Clear();
Console.WriteLine("던전 클리어\n");
Console.WriteLine($"축하합니다!!\n{levelName[dLevel - 1]} 던전을 클리어 하였습니다.\n");
Console.WriteLine("[탐험 결과]");
Console.WriteLine($"체력 {prevHP} -> {character.HP}");
Console.WriteLine($"Gold {prevGold} G-> {character.Gold}");
Console.WriteLine("\n0. 나가기");
Console.WriteLine("\n원하시는 행동을 입력해주세요.\n");
string result = Console.ReadLine();
switch (result)
{
case "0":
// 나가기
break;
default:
// 지금 Scene 재반환 및 화면 정리
Console.WriteLine("올바른 값을 입력하세요.");
Thread.Sleep(1000);
break;
}
}
- 성공시 보수 지급을 위한 메서드
- 공격력에 따른 추가 보상 알고리듬
Character
- 캐릭터의 여러 속성을 설정 및 반환 가능한 클래스
LevelCheck
// 레벨 업 구간인지 체크
public void LevelCheck()
{
for (int i = 0; i < Level; i++)
{
if (level == i && dgTry == i)
{
level++;
dgTry = 0;
attack += 0.5f;
defense += 1;
}
}
}
dgTry는 던전을 탐험 한 횟수를 기록하며, 레벨업 후에 0으로 초기화 된다.- 각 레벨과 동일한 횟수를 던전 탐험에 성공 시, 레벨 업 하는 구조
댓글남기기