interface IMyInterface
{
void Method1();
int Method2(string str);
}
class MyClass : IMyInterface
{
public void Method1()
{
// 구현
}
public int Method2(string str)
{
// 구현
return 0;
}
}
1.인터페이스로 멤버를 정의한 클래스를 생성하면 인터페이스에 있는 메서드를 전부 사용해야함
2. 인터페이스는 틀이라고 생각하면 되고 후에 코드가 많을 때 헷갈리지 않게 해주는 장점을 가짐
enum MyEnum
{
Value1,
Value2,
Value3
}
try
{
// 예외가 발생할 수 있는 코드
}
catch (ExceptionType1 ex)
{
// ExceptionType1에 해당하는 예외 처리
}
catch (ExceptionType2 ex)
{
// ExceptionType2에 해당하는 예외 처리
}
finally
{
// 예외 발생 여부와 상관없이 항상 실행되는 코드
}
delegate int Calculate(int x, int y);
static int Add(int x, int y)
{
return x + y;
}
class Program
{
static void Main()
{
// 메서드 등록
Calculate calc = Add;
// 델리게이트 사용
int result = calc(3, 5);
Console.WriteLine("결과: " + result);
}
}
static void Dungeon()
{
Console.WriteLine("-----------------------------------------\n");
Console.WriteLine("던전입장");
Console.WriteLine("이곳에서 던전으로 들어가기전 활동을 할 수 있습니다.");
Console.WriteLine("1. 쉬운 던전 | 방어력 5 이상 권장");
Console.WriteLine("2. 일반 던전 | 방어력 11 이상 권장");
Console.WriteLine("3. 어려운 던전 | 방어력 17 이상 권장");
Console.WriteLine("0. 나가기\n");
Console.Write("원하시는 행동을 입력해주세요:");
Console.Write(">> ");
string str = Console.ReadLine();
switch (str)
{
case "0":
Console.WriteLine("던전을 나갔습니다.");
// 나가기
break;
case "1":
DungeonStart(1, 5, 1000);
break;
case "2":
DungeonStart(2, 11, 1700);
break;
case "3":
DungeonStart(3, 17, 2500);
break;
default:
Console.WriteLine("잘못된 선택지 입니다. 다시 입력해주세요!");
Dungeon();
break;
}
}
static void DungeonStart(int level, int defAvg, float ClearGold)
{
// 랜덤 변수 생성
Random random = new Random();
// 권장 방어력보다 낮다면
if (playerInfo.def + playerInfo.armor.vaule < defAvg)
{
Console.WriteLine("권장 방어력보다 낮습니다.");
// 40%로 던전 실패
if (random.Next(0, 10) > 5)
{
Console.WriteLine("40%로 던전 공략에 실패하였습니다.");
// 보상 X , 체력 절반 감소
playerInfo.hp -= (random.Next(20, 36) - playerInfo.def - defAvg) / 2;
}
else
{
Console.WriteLine("60%로 던전에서 도망쳤습니다.");
// 보상만 X
}
}
// 권장 방어력보다 높다면
else
{
// 던전이 클리어 되고 방어력 수치에 따른 체력 감소 및 골드 획득
Console.WriteLine("-----------------------------------------\n");
Console.WriteLine("던전 클리어");
Console.WriteLine("축하합니다!!");
if (level == 1)
{
Console.Write("쉬운");
}
else if (level == 2)
{
Console.Write("일반");
}
else
{
Console.Write("어려운");
}
Console.WriteLine("던전을 클리어 하였습니다.\n");
Console.WriteLine("[탐험 결과]");
Console.WriteLine($"체력 {playerInfo.hp} -> {playerInfo.hp -=
random.Next(20, 36) - playerInfo.def - defAvg}");
int attackMin = (int)playerInfo.str + playerInfo.weapon.vaule;
int attackMax = ((int)playerInfo.str + playerInfo.weapon.vaule) * 2;
int percentage = random.Next(attackMin, attackMax);
Console.WriteLine($"Gold {playerInfo.gold} G -> " +
$"{playerInfo.gold += ClearGold + ClearGold * (percentage / 100.0f)} G\n");
Console.WriteLine("0. 나가기");
Console.WriteLine("\n원하시는 행동을 입력해주세요.");
Console.Write(">> ");
string str = Console.ReadLine();
while (str != "0")
{
Console.WriteLine("잘못된 입력입니다. 다시 입력해주세요.\n");
Console.WriteLine("0. 나가기");
Console.WriteLine("\n원하시는 행동을 입력해주세요.");
Console.Write(">> ");
str = Console.ReadLine();
}
playerInfo.ExpUp();
}
}
static void SaveInfo()
{
// 게임 저장
Console.WriteLine();
string json = JsonConvert.SerializeObject(playerInfo);
string json1 = JsonConvert.SerializeObject(playerEquipments);
string json2 = JsonConvert.SerializeObject(equipments);
File.WriteAllText("infoSave.json", json);
File.WriteAllText("playerEqSave.json", json1);
File.WriteAllText("shopeqSave.json", json2);
Console.WriteLine("데이터가 저장되었습니다.\n");
gameEnd = false;
}
// 첫 시작
FirstText();
if (File.Exists("infoSave.json"))
{
Console.WriteLine("저장된 정보가 있습니다.");
Console.WriteLine("0. 네");
Console.WriteLine("1. 아니요");
Console.Write("이어서 하시겠습니까?");
Console.Write(">> ");
string str = Console.ReadLine();
while (str == "1" && str == "0")
{
Console.WriteLine("잘못된 입력입니다. 다시 입력해주세요.\n");
Console.WriteLine("0. 네");
Console.WriteLine("1. 아니요");
Console.Write("이어서 하시겠습니까?");
Console.Write(">> ");
str = Console.ReadLine();
}
// 게임 데이터를 불러옴
if (str == "0")
{
// 저장한 데이터 불러오기
string json = File.ReadAllText("infoSave.json");
string json1 = File.ReadAllText("playerEqSave.json");
string json2 = File.ReadAllText("shopeqSave.json");
Info loadedInfo = JsonConvert.DeserializeObject<Info>(json);
equipment[] loadedpleq = JsonConvert.DeserializeObject<equipment[]>(json1);
equipment[] loadedsheq = JsonConvert.DeserializeObject<equipment[]>(json2);
Console.WriteLine("정보를 불러옵니다.");
playerInfo = loadedInfo;
playerEquipments = loadedpleq;
equipments = loadedsheq;
}
else
{
Console.WriteLine("처음 부터 시작합니다.");
}
}
static void SellEquipment()
{
Console.WriteLine("-------------------------------");
Console.WriteLine("상점");
Console.WriteLine("필요한 아이템을 얻을 수 있는 상점입니다.\n");
Console.WriteLine("[보유 골드]");
Console.WriteLine(playerInfo.gold + "G\n");
Console.WriteLine("[아이템 목록]");
int count = 0;
foreach (equipment equipment in playerEquipments)
{
if(equipment.name != null)
{
Console.WriteLine($"- {count + 1} {equipment.name} | {equipment.equipType} +{equipment.vaule} | {equipment.introduct}");
count++;
}
}
bool check = true;
Console.WriteLine("\n판매할 아이템 이름을 입력해주세요.");
Console.Write(">> ");
string str = Console.ReadLine();
count = 0;
foreach (equipment equipment in playerEquipments)
{
// 검색한 아이템 이름이 있는지 확인하고 있다면
if (str == equipment.name)
{
// 장비가 무기라면
if (equipment.type == equipmentType.weapon)
{
// 플레이어의 무기 초기화
playerInfo.weapon = new equipment();
}
else if (equipment.type == equipmentType.armor)
{
// 플레이어의 방어구 초기화
playerInfo.armor = new equipment();
}
Console.WriteLine($"{equipment.name}을(를) 판매했습니다.\n");
playerEquipments[count] = new equipment();
equipments[count].buyCheck = false; // 해당 아이템 구매 여부 변경
playerEquipments[count].buyCheck = false; // 플레이어 장비도 구매로 변경
playerInfo.gold += (int)(equipment.gold * 0.85f); // 구매했으니 골드 감소
check = false;
}
count++;
}
if (check)
{
Console.WriteLine("입력하신 아이템의 이름은 존재하지 않습니다.\n");
Inventory();
}
}
public void ExpUp()
{
exp += 1;
// 경험치가 가득 차고 레벨이 5레벨 미만이라면
if(exp == maxExp && level < 5)
{
Console.WriteLine("-------------------------------\n");
Console.WriteLine("축하합니다! 레벨업을 하셨습니다.");
Console.WriteLine($"레벨 {level} -> {++level}");
Console.WriteLine($"공격력 {str} -> {str += 0.5f}");
Console.WriteLine($"방어력 {def} -> {def += 1}");
maxExp += 1;
exp = 0;
}
}