오늘은 어제 제출한 개인 과제, 스파르타 던전 Text게임 튜터님의 피드백을 받았다.
전체적으로 많이 헤맸고, 어려워서 필수 구현부분까지만 만들었는데 생각보다 피드백이 좋았다.
● 피드백 내용
- 깃, 리드미 정리를 잘함
- 요구사항 충실하게 구현 잘함
- 클래스 상속과 생성자에 관련된 부분들을 한번 더 공부해서 정리가 필요
리드미를 검색을 해서 최대한 깔끔하게 정리했긴 하지만, 이 부분에서 칭찬을 받으니 사실 조금 의외였다.
그리고 요구사항을 모두 잘 구현하였다는 피드백을 받았고, 클래스 상속과 생성자에 관련된 부분을 한번 더 공부가 필요하다는 피드백을 받았는데, 이 부분은 Item을 정의하고 기타 생성자를 정의하지 않고, 기본 생성자를 호출하고 하나씩 변수를 대입했기 때문에 받은 피드백인 것 같다.
그리고 오늘 스파르타코딩클럽 C# 4주차 강의를 모두 들었다. 확실히 앞 주차에 비해서 많이 어렵다고 생각했다. 생각보다 완전히 처음 들어보는 내용도 많아서 당황했지만 티스토리에 최대한 다 정리를 했다.
● 강의 내용
1. 델리게이트, 람다, Func, Action ☞ : https://kkln2486.tistory.com/76
2. LINQ ☞ : https://kkln2486.tistory.com/77
3. Nullable형 ☞ : https://kkln2486.tistory.com/78
4. 문자열 빌더 ☞ : https://kkln2486.tistory.com/79
4주차 마지막 강의를 들으니 역시 숙제가 있었다. 숙제는 앞의 개인 과제와 비슷한 텍스트 RPG게임 턴제 만들기였다.
개인과제에서 아이템, 인벤토리, 캐릭터 능력치 같은 기본적인 것들을 구현했기 때문에 추가로 몇가지만 구현하기로 했다.
● 추가 구현
1. 던전입장
static void DisplayDungeon()
{
int randomValue = random.Next(0, 3);
Console.Clear();
Console.WriteLine("던전");
Console.WriteLine();
switch (randomValue)
{
case 0:
monster.Name = "슬라임";
monster.Atk = 20;
monster.Def = 3;
monster.Hp = 20;
break;
case 1:
monster.Name = "오크";
monster.Atk = 40;
monster.Def = 5;
monster.Hp = 20;
break;
case 2:
monster.Name = "드래곤";
monster.Atk = 50;
monster.Def = 8;
monster.Hp = 30;
break;
default:
break;
}
Console.WriteLine($"{monster.Name} 이(가) 등장했습니다.");
Console.WriteLine();
Console.WriteLine($"[{monster.Name}]");
Console.WriteLine($"공격력 : {monster.Atk}");
Console.WriteLine($"방어력 : {monster.Def}");
Console.WriteLine($"체 력 : {monster.Hp}");
Console.WriteLine();
Console.WriteLine("[플레이어]");
Console.WriteLine($"공격력 : {player.Atk}");
Console.WriteLine($"방어력 : {player.Def}");
Console.WriteLine($"체 력 : {player.Hp}");
Console.WriteLine();
Console.WriteLine("1. 싸우기");
Console.WriteLine("2. 도망가기");
Console.WriteLine();
Console.WriteLine("원하시는 행동을 입력해주세요.");
int input = CheckValidInput(1, 2);
switch (input)
{
case 1:
Battle();
break;
case 2:
DisplayGameIntro();
break;
}
}
rand.Next() 함수를 통해 랜덤 값을 0~3을 받고, 숫자에 따라 랜덤한 몬스터가 생성되도록 했다.
2. 몬스터 클래스 추가
public class Monster
{
public string Name { get; set; }
public int Atk { get; set; }
public int Def { get; set; }
public int Hp { get; set; }
}
각 몬스터 능력치를 모두 프로퍼티로 정의했다.
3. 배틀
static void Battle()
{
Console.Clear();
Console.WriteLine($"플레이어가 {monster.Name} 을(를) 공격합니다.");
// 플레이어 공격
if(player.Atk > monster.Def)
{
monster.Hp -= (player.Atk - monster.Def);
if(monster.Hp <= 0)
{
Console.WriteLine($"플레이어가 {monster.Name} 을(를) 쓰러트렸습니다.");
Console.WriteLine();
Console.WriteLine("아무키나 입력해주세요.");
Console.ReadKey();
DisplayDungeon();
}
}
else
{
Console.WriteLine("플레이어가 공격에 실패했습니다.");
}
// 몬스터 공격
Console.WriteLine($"{monster.Name} 이(가) 플레이어를 공격합니다.");
if (monster.Atk > player.Def)
{
player.Hp -= (monster.Atk - player.Def);
if (player.Hp <= 0)
{
Console.WriteLine($"{monster.Name} 이(가) 플레이어를 쓰러트렸습니다.");
Console.WriteLine();
Console.WriteLine("============ GAME OVER ============");
Environment.Exit(0);
}
}
else
{
Console.WriteLine($"{monster.Name} 이(가) 공격에 실패했습니다.");
}
Console.WriteLine();
Console.WriteLine($"[{monster.Name}]");
Console.WriteLine($"공격력 : {monster.Atk}");
Console.WriteLine($"방어력 : {monster.Def}");
Console.WriteLine($"체 력 : {monster.Hp}");
Console.WriteLine();
Console.WriteLine("[플레이어]");
Console.WriteLine($"공격력 : {player.Atk}");
Console.WriteLine($"방어력 : {player.Def}");
Console.WriteLine($"체 력 : {player.Hp}");
Console.WriteLine();
Console.WriteLine("1. 싸우기");
Console.WriteLine("2. 도망가기");
Console.WriteLine();
Console.WriteLine("원하시는 행동을 입력해주세요.");
int input = CheckValidInput(1, 2);
switch (input)
{
case 1:
Battle();
break;
case 2:
DisplayGameIntro();
break;
}
}
먼저 플레이어가 공격하고 몬스터가 죽지 않았다면, 몬스터가 공격하는 함수를 만들어서 반복했다.
플레이어 공격은 몬스터체력에 플레이어의 공격력 - 몬스터의 방어력 만큼 빼주었고, 몬스터의 공격은 반대로 했다.
한 번의 전투가 끝나면 플레이어와 몬스터의 능력치를 모두 볼 수 있게 해서, 싸우기와 도망가기를 선택할 수 있다.
4. 휴식하기
static void Healing()
{
Console.Clear();
Console.WriteLine("모두 회복하였습니다.");
Console.WriteLine();
Console.WriteLine("아무키나 입력해주세요.");
Console.ReadKey();
player.Atk = 10 + player.WeaponAtk;
player.Def = 5 + player.ArmorDef;
player.Hp = 100 + player.ArmorHp;
}
휴식하기를 통해 모든 능력치를 기본 능력치로 변경했다.
● 느낀점
이번에는 3마리의 몬스터중 랜덤으로 생성하는 부분이 가장 어려웠다. 처음에는 몬스터를 각각 클래스로 구현하고 그 중 랜덤으로 인스턴스를 생성하는 식으로 구현하려고 했으나, 전투부분에서 hp를 수정하는 부분에서 많이 막혀서, 결국 이미 생성된 인스턴스에 3마리의 몬스터 중 랜덤 몬스터의 능력치 수치를 직접 변수에 대입하는 것으로 구현했다. 항상 느끼는 것인데, 구현하기 전에는 금방할 수 있을 것이라고 생각하지만 막상 구현을 시작하면 항상 막히는 부분이 있고 생각보다 많은 시간이 걸린다. 더욱더 집중해서 한번에 구현을 할 수 있는 날까지 열심히 공부해야겠다.
'Unity_2기 내일배움캠프 TIL' 카테고리의 다른 글
Unity_2기 3주차 (231116) (0) | 2023.11.16 |
---|---|
Unity_2기 3주차 (231115) (0) | 2023.11.15 |
Unity_2기 3주차 (231113) (1) | 2023.11.13 |
Unity_2기 2주차 (231110) (0) | 2023.11.10 |
Unity_2기 2주차 (231109) (0) | 2023.11.09 |