부트캠프 10일차
1. 오늘 학습 키워드
Text RPG, C#
2. 오늘 학습 한 내용을 나만의 언어로 정리하기
우선 Program.cs에 모두 작성되어있던 클래스를 전부 나눠줬다.
혹시나 오류가 날까봐, 걱정이 되어 미뤄왔지만, 오늘 과제 제출하는 날이기에, 제출 후에
추가적으로 작업했는데, 오류가 뭐에요? 라고 비웃듯이 아무런 문제가 없었다.

그리고 던전 클래스를 제작했다.
우선 던전 입장시에 콘솔에 나타나는 메서드다.
class Dungeon
{
Random random = new Random();
float temp_HP;
int temp_Gold;
int Need_Stage_Defense = 0;
float Damage = 0;
int Gain_Gold = 0;
int Stage_Gold = 0;
public void Display_Dungeon(Player player)
{
while (true)
{
Console.Clear();
Console.WriteLine("던전입장");
Console.WriteLine("이곳에서 던전으로 들어가기전 활동을 할 수 있습니다.");
Console.WriteLine("\n1.쉬운 던전\t | 방어력 5 이상 권장");
Console.WriteLine("2.일반 던전\t | 방어력 11 이상 권장");
Console.WriteLine("3 어려운 던전 \t | 방어력 17 이상 권장");
Console.WriteLine("0. 나가기\n");
Console.Write("원하시는 행동을 입력해주세요.\n>> ");
string choice = Console.ReadLine();
if (choice == "0")
{
Lobby._Lobby(player);
}
if (int.TryParse(choice, out int difficulty) && difficulty <= 3 && difficulty > 0)
{
_Dungeon(player, difficulty);
}
else
{
Console.WriteLine("잘못된 값을 입력했습니다");
Console.ReadKey();
}
}
}
이건 던전의 클리어 여부를 던전 세팅 메서드로부터 받은 매개 변수인 bool Is_Clear를 사용해
던전의 공략 여부를 결정했다.
던전 세팅은 난이도에 따른 스테이지의 권장 방어력 설정, 클리어시 얻는 보상 등을 넣어두었다.
그리고 권장 방어력보다 낮을시에, 40% 확률로 던전을 클리어 할 수 있게 했다.
private void _Dungeon(Player player, int difficulty)
{
bool Is_Clear;
Dungeon_Setting(player, difficulty, out Is_Clear);
if (Is_Clear)
{
Clear_Dungeon(player, difficulty);
}
else
{
Fail_Dungeon(player);
}
}
private void Dungeon_Setting(Player player, int difficulty, out bool Isclearable)
{
Dungeon_Diff dungeon_Diff = (Dungeon_Diff)difficulty;
switch (dungeon_Diff)
{
case Dungeon_Diff.쉬운: Need_Stage_Defense = 5; Stage_Gold = 1000; break;
case Dungeon_Diff.일반: Need_Stage_Defense = 11; Stage_Gold = 1700; break;
case Dungeon_Diff.어려운: Need_Stage_Defense = 17; Stage_Gold = 2500; break;
}
if (player.Stat_Defense >= Need_Stage_Defense)
{
Isclearable = true;
}
else
{
int Pencent = random.Next(1, 11);
if (Pencent < 4)
{
Isclearable = true;
}
else
{
Isclearable = false;
}
}
}
이제 던전의 난이도에 따라 클리어시에 받는 보상 그리고 깎이는 체력 등을 메서드에 넣어뒀다
private void Clear_Dungeon(Player player, int difficulty)
{
Dungeon_Diff enum_value = (Dungeon_Diff)difficulty;
temp_Gold = player.Gold;
Gain_Gold = Stage_Gold += Stage_Gold * random.Next(player.Stat_Offense, player.Stat_Offense * 2 + 1)/100;
player.Gold += Gain_Gold;
_Damage(player);
while (true)
{
Console.Clear();
Console.WriteLine("던전 클리어");
Console.WriteLine("축하합니다!!");
Console.WriteLine($"{enum_value} 던전을 클리어 하였습니다.\n");
Console.WriteLine("탐험 결과");
Console.WriteLine($"체력 {temp_HP} -> {player.HP}");
Console.WriteLine($"Gold {temp_Gold} -> {player.Gold}\n");
Console.WriteLine("아무 키를 눌려 계속");
Console.ReadKey();
Display_Dungeon(player);
}
}
private void Fail_Dungeon(Player player)
{
_Damage(player);
while (true)
{
Console.Clear();
Console.WriteLine("던전 실패\n");
Console.WriteLine($"체력 :{temp_HP} -> {player.HP}\n");
Console.WriteLine("아무 키를 눌려 계속");
Console.ReadKey();
Display_Dungeon(player);
}
}
이는 player 클래스에서, 플레이어의 체력이 0이 되면 GAME OVER를 띄우고
다시 플레이를 할 것인지,
다시하기를 고를 경우 다시 게임을 시작하고,
종료를 선택할 시엔 콘솔이 종료되는 메서드다.
//player.cs
public void GameOver()
{
while (true)
{
Console.Clear();
Console.WriteLine(" ________ ________ _____ ______ _______ ________ ___ ___ _______ ________ \r\n|\\ ____\\|\\ __ \\|\\ _ \\ _ \\|\\ ___ \\ |\\ __ \\|\\ \\ / /|\\ ___ \\ |\\ __ \\ \r\n\\ \\ \\___|\\ \\ \\|\\ \\ \\ \\\\\\__\\ \\ \\ \\ __/| \\ \\ \\|\\ \\ \\ \\ / / | \\ __/|\\ \\ \\|\\ \\ \r\n \\ \\ \\ __\\ \\ __ \\ \\ \\\\|__| \\ \\ \\ \\_|/__ \\ \\ \\\\\\ \\ \\ \\/ / / \\ \\ \\_|/_\\ \\ _ _\\ \r\n \\ \\ \\|\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\_|\\ \\ \\ \\ \\\\\\ \\ \\ / / \\ \\ \\_|\\ \\ \\ \\\\ \\| \r\n \\ \\_______\\ \\__\\ \\__\\ \\__\\ \\ \\__\\ \\_______\\ \\ \\_______\\ \\__/ / \\ \\_______\\ \\__\\\\ _\\ \r\n \\|_______|\\|__|\\|__|\\|__| \\|__|\\|_______| \\|_______|\\|__|/ \\|_______|\\|__|\\|__|\r\n \r\n \r\n ");
Console.WriteLine($"{Name}님의 캐릭터의 HP가 0이 되었습니다.");
Console.WriteLine("0.다시하기");
Console.WriteLine("1.종료하기");
Console.Write("\n원하시는 행동을 입력해주세요. \n >> ");
string choice = Console.ReadLine();
if (choice == "0")
{
gameManager.Game_start();
}
else if(choice == "1")
{
Environment.Exit(0);
}
}
마지막으로 아직 부족한 부분이지만, 게임 매니저 클래스를 만들어서 싱글톤화 해주고,
게임 시작에 대한 부분을 넣어두었다.
아직은 기능이 뭐가 없어서 필요한지는 잘 모르겠으나,,
게임 오버시에, Game_Start 메서드를 호출해야하기에, 제작해보았다.
class GameManager
{
private static GameManager gameManager;
public static GameManager Instance()
{
if(gameManager == null)
{
gameManager = new GameManager();
}
return Instance();
}
public void Game_start()
{
Setup setup = new Setup();
Player player = new Player();
Store store = new Store();
Dungeon dungeon = new Dungeon();
setup._Setup(player);
Lobby._Lobby(player);
}
}
3. 학습하며 겪었던 문제점 & 에러
제작을 하면서 내가 객체 지향 프로그래밍은 개나 주고 제작하는게 아닌가 우려가 되었다.
그리고 제작을 하다보니 매개 변수로 player를 너무 많이 들고 다녔는데, 이도 좋은 방법은 아닌것같아서, 다른 방향성을 찾아봐야겠다..
4. 내일 학습 할 것은 무엇인지
내일 본격적으로 팀 과제가 시작되는데, 새로운 팀 과제가 시작 되는 만큼 또 새롭게 출발해야겠다.
'TIL' 카테고리의 다른 글
25.02.07 TIL (0) | 2025.02.07 |
---|---|
25.02.06 TIL (0) | 2025.02.06 |
25.02.04 TIL (0) | 2025.02.04 |
25.02.03 TIL (0) | 2025.02.03 |
인터페이스, TRPG 초안 (0) | 2025.02.03 |