diff --git a/13psh_assignment/.idea/.idea.13psh_assignment/.idea/.gitignore b/13psh_assignment/.idea/.idea.13psh_assignment/.idea/.gitignore
new file mode 100644
index 0000000..aac5aad
--- /dev/null
+++ b/13psh_assignment/.idea/.idea.13psh_assignment/.idea/.gitignore
@@ -0,0 +1,13 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/contentModel.xml
+/projectSettingsUpdater.xml
+/modules.xml
+/.idea.13psh_assignment.iml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/13psh_assignment/.idea/.idea.13psh_assignment/.idea/indexLayout.xml b/13psh_assignment/.idea/.idea.13psh_assignment/.idea/indexLayout.xml
new file mode 100644
index 0000000..7b08163
--- /dev/null
+++ b/13psh_assignment/.idea/.idea.13psh_assignment/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/13psh_assignment/.idea/.idea.13psh_assignment/.idea/vcs.xml b/13psh_assignment/.idea/.idea.13psh_assignment/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/13psh_assignment/.idea/.idea.13psh_assignment/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/13psh_assignment/13psh_assignment.sln b/13psh_assignment/13psh_assignment.sln
new file mode 100644
index 0000000..7c20056
--- /dev/null
+++ b/13psh_assignment/13psh_assignment.sln
@@ -0,0 +1,16 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "13psh_assignment", "13psh_assignment\13psh_assignment.csproj", "{A0A394BC-F612-40FA-AFC6-C297203D2C21}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A0A394BC-F612-40FA-AFC6-C297203D2C21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A0A394BC-F612-40FA-AFC6-C297203D2C21}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A0A394BC-F612-40FA-AFC6-C297203D2C21}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A0A394BC-F612-40FA-AFC6-C297203D2C21}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/13psh_assignment/13psh_assignment/13psh_assignment.csproj b/13psh_assignment/13psh_assignment/13psh_assignment.csproj
new file mode 100644
index 0000000..5e8ad35
--- /dev/null
+++ b/13psh_assignment/13psh_assignment/13psh_assignment.csproj
@@ -0,0 +1,55 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {A0A394BC-F612-40FA-AFC6-C297203D2C21}
+ Exe
+ Properties
+ _13psh_assignment
+ _13psh_assignment
+ v4.7.1
+ 512
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/13psh_assignment/13psh_assignment/Program.cs b/13psh_assignment/13psh_assignment/Program.cs
new file mode 100644
index 0000000..1cc2ec5
--- /dev/null
+++ b/13psh_assignment/13psh_assignment/Program.cs
@@ -0,0 +1,295 @@
+using System;
+
+namespace _13psh_assignment
+{
+ internal class Program
+ {
+ enum ClassType
+ {
+ None = 0,
+ Knight = 1,
+ Archer = 2,
+ Mage = 3
+ }
+
+ struct Player
+ {
+ public int hp;
+ public int attack;
+ }
+
+ // ClassType, Player를 참고해 MonsterType과 Monster 구조체를 완성해보세요.
+ // 몬스터 종류
+ // Slime -> 체력: 20 / 공격력: 2
+ // Orc -> 체력: 40 / 공격력: 5
+ // Skeleton -> 체력: 30 / 공격력: 7
+ enum MonsterType
+ {
+ // TODO
+ 슬라임,
+ 오크,
+ 스켈레톤
+ }
+
+ struct Monster
+ {
+ // TODO
+ public int hp;
+ public int attack;
+ }
+
+ // 플레이어 직업 선택 함수
+ static ClassType ChooseClass()
+ {
+ Console.WriteLine("직업을 선택하세요!");
+ Console.WriteLine("[1]. 검사");
+ Console.WriteLine("[2]. 궁수");
+ Console.WriteLine("[3]. 법사");
+
+ ClassType choice = ClassType.None;
+
+ string input = Console.ReadLine();
+
+ switch (input)
+ {
+ case "1":
+ choice = ClassType.Knight;
+ break;
+ case "2":
+ choice = ClassType.Archer;
+ break;
+ case "3":
+ choice = ClassType.Mage;
+ break;
+ }
+
+ return choice;
+ }
+
+ // 플레이어 생성 함수
+ static void CreatePlayer(ClassType choice, out Player player)
+ {
+ switch (choice)
+ {
+ case ClassType.Knight:
+ player.hp = 100;
+ player.attack = 10;
+ break;
+ case ClassType.Archer:
+ player.hp = 85;
+ player.attack = 12;
+ break;
+ case ClassType.Mage:
+ player.hp = 60;
+ player.attack = 15;
+ break;
+ default:
+ player.hp = 0;
+ player.attack = 0;
+ break;
+ }
+ }
+
+ static void InitializeMonsterStats(MonsterType monsterType, out int hp, out int attack)
+ {
+ hp = 0;
+ attack = 0;
+
+ switch (monsterType)
+ {
+ case MonsterType.슬라임:
+ hp = 20;
+ attack = 2;
+ break;
+ case MonsterType.오크:
+ hp = 40;
+ attack = 5;
+ break;
+ case MonsterType.스켈레톤:
+ hp = 30;
+ attack = 7;
+ break;
+
+ default:
+ hp = 0;
+ attack = 0;
+ break;
+ }
+ }
+
+ // 플레이어 생성 함수 (CreatePlayer)를 참고해 몬스터 랜덤 생성 함수 (CreateRandomMonster)를 완성해보세요.
+ // 1. 1~3 중 랜덤으로 수를 하나 뽑습니다.
+ // 2. 뽑은 숫자가 1일 경우에는 슬라임, 2일 경우에는 오크, 3일 경우에는 스켈레톤을 생성하는 코드를 짭니다. (CreatePlayer 참고)
+ // default의 경우 몬스터의 체력을 0, 공격력을 0이로 초기화만 해줍니다.
+ // 2-1. 이 때 공격력과 체력을 초기화해주는 코드가 case 실행문에 반복적으로 나타납니다. 함수로 따로 빼서 구현해봅시다.
+ // 3. "(몬스터 이름)이 생성되었습니다."라는 문구를 출력해줍니다. (default의 경우 생략)
+
+ // 몬스터 종류
+ // Slime -> 체력: 20 / 공격력: 2
+ // Orc -> 체력: 40 / 공격력: 5
+ // Skeleton -> 체력: 30 / 공격력: 7
+
+ // 몬스터 랜덤 생성 함수
+ static void CreateRandomMonster(out Monster monster)
+ {
+ // TODO
+
+ Random random = new Random();
+
+ int randomValue = random.Next(0,3);
+
+ monster.hp = 0;
+ monster.attack = 0;
+
+ MonsterType monsterType = (MonsterType)randomValue;
+
+ InitializeMonsterStats(monsterType, out monster.hp, out monster.attack);
+
+ Console.WriteLine($"{monsterType}이 생성되었습니다.");
+
+ }
+
+
+
+
+
+ // 게임 접속 함수
+ static void EnterGame(ref Player player)
+ {
+ while (true)
+ {
+ Console.WriteLine("마을에 접속했습니다!");
+ Console.WriteLine("[1]. 필드로 간다");
+ Console.WriteLine("[2]. 로비로 돌아가기");
+
+ string choice = Console.ReadLine();
+ switch (choice)
+ {
+ case "1":
+ EnterField(ref player);
+ break;
+ case "2":
+ return;
+ }
+ }
+ }
+
+ // 필드 접속 함수
+ static void EnterField(ref Player player)
+ {
+ Console.WriteLine("필드에 접속했습니다!");
+
+ while (true)
+ {
+ // 랜덤 몬스터 등장
+ Monster monster;
+ CreateRandomMonster(out monster);
+
+ Console.WriteLine("[1]. 전투 모드로 돌입");
+ Console.WriteLine("[2]. 일정 확률로 마을로 도망");
+
+ // 사용자 입력을 받아 input에 저장
+ string input = Console.ReadLine();
+
+ if (input == "1")
+ {
+ Fight(ref player, ref monster);
+
+ //continue를 이용해 플레이어가 사망상태가 아니라면 루프를 계속 돌고 ,
+ //사망한 상태라면 break로 EnterField를 빠져나가 마을로 가게 함.
+ if (player.hp > 0)
+ continue;
+ break;
+ }
+ else
+ {
+ // 30퍼센트 확률로 도망에 성공
+ Random rand = new Random();
+ int randValue = rand.Next(0, 101);
+ if (randValue <= 33)
+ {
+ Console.WriteLine("도망쳤습니다!");
+ break;
+ }
+ // 도망에 실패했다면 전투에 돌입한다.
+ else
+ {
+ Console.WriteLine("도망치지 못합니다!");
+ Fight(ref player, ref monster);
+ if (player.hp > 0)
+ continue;
+ break;
+ }
+ }
+ }
+ }
+
+ // 무한루프 안을 채워 플레이어 vs 몬스터 전투 함수를 완성해보세요.
+ // 1. 플레이어가 먼저 몬스터를 공격한 뒤, 몬스터가 플레이어를 공격합니다. 플레이어가 몬스터를 공격할 경우, 몬스터의 체력에서 플레이어의 공격력 수치만큼을 뺍니다. 몬스터가 플레이어를 공격할 경우, 플레이어의 체력에서 몬스터의 공격력 수치만큼을 뺍니다.
+ // 2. 플레이어가 몬스터를 공격했을 때, 몬스터의 체력이 0 이하가 된다면
+ // 1. "적을 무찔렀습니다!" 라는 문구를 출력합니다
+ // 2. 플레이어의 남은 체력을 출력해줍니다 (ex. 남은 체력: 87)
+ // 3. 무한루프를 빠져나갑니다.
+ // 3. 몬스터가 플레이어를 공격했을 때, 플레이어의 체력이 0 이하가 된다면 "Game Over... 마을로 돌아갑니다..."를 출력한 뒤 무한루프를 빠져나갑니다.
+
+ // 플레이어 vs 몬스터 전투 함수
+ static void Fight(ref Player player, ref Monster monster)
+ {
+
+ // TODO
+
+ while (true)
+ {
+
+ // Player attacks monster
+ monster.hp -= player.attack;
+ Console.WriteLine($"몬스터에게 {player.attack}의 피해를 입혔습니다.");
+
+ if (monster.hp <= 0)
+ {
+ Console.WriteLine("적을 무찔렀습니다!");
+ Console.WriteLine($"남은 체력: {player.hp}");
+ break;
+ }
+
+ // Monster attacks player
+ player.hp -= monster.attack;
+ Console.WriteLine($"몬스터의 공격! 플레이어는 {monster.attack}의 피해를 입었습니다.");
+
+ if (player.hp <= 0)
+ {
+ Console.WriteLine("Game Over... 마을로 돌아갑니다...");
+ break;
+ }
+ }
+
+
+ }
+
+
+
+ public static void Main(string[] args)
+ {
+ ClassType choice = ClassType.None;
+
+ while (true)
+ {
+ // 플레이어의 직업을 선택
+ choice = ChooseClass();
+
+ // continue 이용해 ClassType선택이 완료되지 않은 상태라면 이후 코드로 넘어가지 않도록 함.
+ if (choice == ClassType.None)
+ continue;
+
+ // 플레이어 생성 (체력과 공격력 정보 초기화)
+ Player player;
+ CreatePlayer(choice, out player);
+ Console.WriteLine($"HP:{player.hp} Attack:{player.attack}");
+
+ // 게임 시작
+ EnterGame(ref player);
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/13psh_assignment/13psh_assignment/Properties/AssemblyInfo.cs b/13psh_assignment/13psh_assignment/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..f9688a9
--- /dev/null
+++ b/13psh_assignment/13psh_assignment/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("_13psh_assignment")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("_13psh_assignment")]
+[assembly: AssemblyCopyright("Copyright © 2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("A0A394BC-F612-40FA-AFC6-C297203D2C21")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
\ No newline at end of file
diff --git a/13psh_assignment/13psh_assignment/bin/Debug/_13psh_assignment.exe b/13psh_assignment/13psh_assignment/bin/Debug/_13psh_assignment.exe
new file mode 100644
index 0000000..1d04b23
Binary files /dev/null and b/13psh_assignment/13psh_assignment/bin/Debug/_13psh_assignment.exe differ
diff --git a/13psh_assignment/13psh_assignment/bin/Debug/_13psh_assignment.pdb b/13psh_assignment/13psh_assignment/bin/Debug/_13psh_assignment.pdb
new file mode 100644
index 0000000..6c598cb
Binary files /dev/null and b/13psh_assignment/13psh_assignment/bin/Debug/_13psh_assignment.pdb differ
diff --git a/13psh_assignment/13psh_assignment/obj/Debug/.NETFramework,Version=v4.7.1.AssemblyAttributes.cs b/13psh_assignment/13psh_assignment/obj/Debug/.NETFramework,Version=v4.7.1.AssemblyAttributes.cs
new file mode 100644
index 0000000..2afc031
--- /dev/null
+++ b/13psh_assignment/13psh_assignment/obj/Debug/.NETFramework,Version=v4.7.1.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.1", FrameworkDisplayName = ".NET Framework 4.7.1")]
diff --git a/13psh_assignment/13psh_assignment/obj/Debug/13psh_assignment.csproj.AssemblyReference.cache b/13psh_assignment/13psh_assignment/obj/Debug/13psh_assignment.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..053a967
Binary files /dev/null and b/13psh_assignment/13psh_assignment/obj/Debug/13psh_assignment.csproj.AssemblyReference.cache differ
diff --git a/13psh_assignment/13psh_assignment/obj/Debug/13psh_assignment.csproj.CoreCompileInputs.cache b/13psh_assignment/13psh_assignment/obj/Debug/13psh_assignment.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..a739868
--- /dev/null
+++ b/13psh_assignment/13psh_assignment/obj/Debug/13psh_assignment.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+717d269d046802244127817e6e9d5dc1e9004b98cd708f1c8d2a54fe7c693380
diff --git a/13psh_assignment/13psh_assignment/obj/Debug/13psh_assignment.csproj.FileListAbsolute.txt b/13psh_assignment/13psh_assignment/obj/Debug/13psh_assignment.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..22c6912
--- /dev/null
+++ b/13psh_assignment/13psh_assignment/obj/Debug/13psh_assignment.csproj.FileListAbsolute.txt
@@ -0,0 +1,6 @@
+C:\Users\User\Desktop\assignment\king14-assignment_Sihyeon\13psh_assignment\13psh_assignment\bin\Debug\_13psh_assignment.exe
+C:\Users\User\Desktop\assignment\king14-assignment_Sihyeon\13psh_assignment\13psh_assignment\bin\Debug\_13psh_assignment.pdb
+C:\Users\User\Desktop\assignment\king14-assignment_Sihyeon\13psh_assignment\13psh_assignment\obj\Debug\13psh_assignment.csproj.AssemblyReference.cache
+C:\Users\User\Desktop\assignment\king14-assignment_Sihyeon\13psh_assignment\13psh_assignment\obj\Debug\13psh_assignment.csproj.CoreCompileInputs.cache
+C:\Users\User\Desktop\assignment\king14-assignment_Sihyeon\13psh_assignment\13psh_assignment\obj\Debug\_13psh_assignment.exe
+C:\Users\User\Desktop\assignment\king14-assignment_Sihyeon\13psh_assignment\13psh_assignment\obj\Debug\_13psh_assignment.pdb
diff --git a/13psh_assignment/13psh_assignment/obj/Debug/_13psh_assignment.exe b/13psh_assignment/13psh_assignment/obj/Debug/_13psh_assignment.exe
new file mode 100644
index 0000000..1d04b23
Binary files /dev/null and b/13psh_assignment/13psh_assignment/obj/Debug/_13psh_assignment.exe differ
diff --git a/13psh_assignment/13psh_assignment/obj/Debug/_13psh_assignment.pdb b/13psh_assignment/13psh_assignment/obj/Debug/_13psh_assignment.pdb
new file mode 100644
index 0000000..6c598cb
Binary files /dev/null and b/13psh_assignment/13psh_assignment/obj/Debug/_13psh_assignment.pdb differ