오늘은 지난주 스파르타 던전 배틀 (Text 게임) 만들기 팀 프로젝트를 이어서 작업했다. 내일까지 완성을 목표로 오늘 최대한 마무리 하는 것으로 목표를 잡았다. 회의에서는 각자 작업한 내용을 공유했고, 자신이 맡은 부분을 모든 끝낸 조원은 추가로 조금씩 더 구현하기로 했다.
팀 프로젝트 추가 구현한 기능
경험치 증가와 레벨업
private void LevelController()
{
// 레벨업
if (player.Exp >= player.MaxExp)
{
player.Exp = player.Exp - player.MaxExp;
player.Level++;
player.MaxExp *= 1.5f;
player.Health = player.MaxHealth;
player.Mana = player.MaxMana;
Console.WriteLine();
Console.WriteLine("레벨업을 했습니다!");
Console.WriteLine($"Lv {player.Level - 1} -> Lv {player.Level}");
}
}
private void PlayerAttackResult(int idx)
{
SceneTitle(false);
int dodge = new Random().Next(1,100);
//데미지 계산
bool isCritical = false;
int Damage = player.Attack(mobs[idx]);
Damage = CirticalAttack(Damage, ref isCritical);
if(dodge > 11)
{
Console.WriteLine($"Lv.{mobs[idx].Level} {mobs[idx].Name} 을(를) 맞췄습니다. [데미지 : {Damage}] {(isCritical? "- 치명타 공격!!" : "")}");
Console.WriteLine("");
Console.WriteLine($"Lv.{mobs[idx].Level} {mobs[idx].Name}");
mobs[idx].IsDead = mobs[idx].Health - Damage <= 0 ? true : false;
Console.WriteLine($"HP {mobs[idx].Health} -> {(mobs[idx].IsDead ? "Dead" : mobs[idx].Health - Damage)}");
Console.WriteLine($"현재 경험치: {player.Exp}");
if (mobs[idx].IsDead)
{
deadCnt++;
player.Exp += mobs[idx].Exp;
LevelController();
}
Console.WriteLine("");
mobs[idx].Health -= Damage;
}
else
{
Console.WriteLine($"Lv.{mobs[idx].Level} {mobs[idx].Name} 을(를) 공격했지만 아무일도 일어나지 않았습니다.");
}
Console.WriteLine("0. 다음");
Console.WriteLine("");
int input = Program.CheckValidInput(0, 0);
if (input == 0)
{
// 몬스터가 전부 죽었다면 Victory
if (mobs.Count == deadCnt)
BattleResult(true);
else
MonsterAttackResult();
}
}
몬스터를 죽이게 되면, 각각 몬스터가 가지고 있는 경험치를 플레이어가 얻을 수 있게 하고, 함수를 통해 가지고 있는 경험치가 MaxExp를 넘는지 확인하여 레벨업을 할 수 있는 함수를 만들었다.
오늘 배운 내용
부모 클래스와 자식 클래스의 생성자 호출
기본 생성자
- 부모 클래스 생성자 -> 자식 클래스 생성자 실행
class Parent
{
public Parent()
{
Console.WriteLine("부모 생성자");
}
}
class Child : Parent
{
public Child()
{
Console.WriteLine("자식 생성자");
}
}
Child child= new Child();
// 출력
// "부모 생성자"
// "자식 생성자"
매개변수가 있는 생성자
- 매개변수가 있는 부모 클래스의 생성자가 실행되지 않고, 기본 생성자가 실행
public class Parent
{
public Parent()
{
Debug.Log("부모 생성자");
}
public Parent(string str)
{
Debug.Log($"매개변수가 있는 부모 생성자 {str}");
}
}
public class Child : Parent
{
public Child()
{
Debug.Log("자식 생성자");
}
public Child(string str)
{
Debug.Log($"매개변수가 있는 자식 생성자 {str}");
}
}
Child child = new Child("Test");
// 출력
// "부모 생성자"
// "매개변수가 있는 자식 생성자 Test"
매개변수가 있는 부모 클래스 생성자 호출
public class Parent
{
public Parent()
{
Debug.Log("부모 생성자");
}
public Parent(string str)
{
Debug.Log($"매개변수가 있는 부모 생성자 {str}");
}
}
public class Child : Parent
{
public Child()
{
Debug.Log("자식 생성자");
}
public Child(string str) : base(str)
{
Debug.Log($"매개변수가 있는 자식 생성자 {str}");
}
}
Child child = new Child("Test");
// 출력
// "매개변수가 있는 부모 생성자 Test"
// "매개변수가 있는 자식 생성자 Test"
오늘의 회고
오늘은 팀 프로젝트의 전체적인 마무리를 했고, 추가적으로 경험치와 레벨업 부분을 구현했는데 큰 어려움은 없었다. 오히려 협업을 위한 깃허브 사용방법이 아직 완벽하게 숙지하지 못해서 충돌이 나는 경우가 많아서, 조원들과 함께 해결하는데 시간을 많이 썼다. 그래서 오늘 깃허브의 Push, Pull 방법에 대해서 확실히 정리해서 티스토리에 정리했다. 깃허브는 협업에서 아주 중요하기 때문에 잘 정리해서 꼭 제대로 숙지하도록 할 것이다. 그리고 조원이 구현한 부분을 보던 중, 부모 생성자와 자식 생성자의 호출 부분에서 몰랐던 부분이 있었다. 자식 클래스를 정의하고 호출하면 자식 클래스의 생성자만 호출 되는 줄 알았지만, 부모 클래스의 생성자도 호출이 되었고, 매개변수가 있는 부모 클래스의 생서자를 호출하기 위해서는 base를 사용해야 하는 것을 알게되었다. 내일은 조원들과 마지막으로 프로젝트를 종합하고 정리하는 시간을 가지고 프로젝트 마무리를 잘 하도록 할 것이다!
'Unity_2기 내일배움캠프 TIL' 카테고리의 다른 글
Unity_2기 4주차 (231122) (0) | 2023.11.22 |
---|---|
Unity_2기 4주차 (231121) (2) | 2023.11.21 |
Unity_2기 3주차 (231117) (0) | 2023.11.17 |
Unity_2기 3주차 (231116) (0) | 2023.11.16 |
Unity_2기 3주차 (231115) (0) | 2023.11.15 |