과제

Day15 - 오버로딩 심화

qltjfeo55555 2024. 12. 10. 15:49

https://record5555.tistory.com/21

 

Day15 - 오버로딩 1,2,3단계

과제 1) Hero 클래스 생성새로운 cs 파일을 만들고, Hero 클래스 생성필드 혹은 프로퍼티문자열 영웅의 이름정수형 영웅의 체력정수형 영웅의 공격력정수형 영웅의 방어력생성자기본 생성자: "Unknow

record5555.tistory.com

 

심화 과제 1

위에서 main문에 적힌 모든 코드 삭제. 메인문은 아래 코드만 적음

class Program
{
    static void Main(string[] args)
    {
        Game game = new Game();
        game.Play();
    }
}
  • Game이라는 클래스를 새로운 cs에 작성
  • Game 클래스는 맴버변수로 Hero 하나와 Monster 하나를 가짐
  • Game 클래스는 생성과 동시에 Hero 와 Monster에 각각 뉴할당을 함.
    • Hero 는 이름"Archer", 체력 100, 공격력 30, 방어력 5 로 세팅
    • Monster는 이름"Skeleton", 체력 50, 공격력 20, 방어력 5, 레벨은 1로 세팅

 

  • 일단 게임이 시작되었다는 cw 출력
  • Game이 들고있는 영웅과 몹의 체력이 둘 다 0 이상이라면 무한 반복 시작
  • 무한 반복을 하며, 사용자에게 다음 행동을 물어봄
  •  
다음 행동으로 무엇을 하시겠습니까? (1혹은2 입력 후 엔터)
1. 영웅이 몬스터를 공격
2. 몬스터가 영웅 공격
  • 만약 1번이 입력되었다면 영웅이 몹 공격하는 로직 실행
  • 2번이 입력되었다면 몹이 영웅 치는 로직 실행
  • 1,2 가 아닌 입력값 들어오면 제대로 다시 입력하라고 출력 후 다시 입력받음
  • 1 혹은 2가 정상 수행되었다면, 이후 영웅과 몹의 상태 보여주는 메서드 각각 실행
  • 만약 영웅 체력이 0 이하면 “영웅 사망으로 종료” 출력 후 무한루프 탈출
  • 만약 몹 체력이 0 이하면 “몹 사망으로 종료” 출력 후 무한루프 탈출
  • 위 내용을 구현하면서 만약 Hero나 Monster쪽에 추가로 필요한 메서드나 프로퍼티가 있다면 자유롭게 추가해보기(0 이하 처리 등등)

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

나의 코드

internal class Game
{
    Hero hero =new Hero("Archer",100,30,5);
    Monster monster = new Monster("Skeleton",50,20,5,1);

    public void Play()
    {
        int answer;
        Console.WriteLine("일단 게임시작");
        
        //기존과 다르게 while 선언
        while (hero.HeroHP >= 0 || monster.MonsterHp >= 0)
        {

            Console.WriteLine("다음 행동으로 무엇을 하시겠습니까? (1 혹은 2 엔터)");
            Console.WriteLine("1. 영웅이 몬스터를 공격");
            Console.WriteLine("2. 몬스터가 영웅 공격");
            answer = int.Parse(Console.ReadLine());
            if(answer == 1)
            {
                monster.AttackHero(hero);
                hero.DisplayInfo();
                monster.DisplayInfo();
            }
            else if(answer == 2)
            {
                hero.AttackMob(monster);
                hero.DisplayInfo();
                monster.DisplayInfo();
            }
            while (true)
            {
                if(answer == 1 || answer == 2)
                {
                    break;
                }
                else if(answer != 1 && answer != 2)
                {
                    Console.WriteLine("1,2 아닌 값 입력했음 다시 입력바람");
                }
            }

            if(hero.HeroHP <= 0)
            {
                Console.WriteLine("영웅다이");
                break;
            }

            if(monster.MonsterHp <= 0)
            {
                Console.WriteLine("몹 사망");
                break;
            }

        }

    }

기존에 while문을 썻을때는 while(true)로 무한반복 시킨다음 if 문을 통해 break로  탈출시키는 코드로 만들었다.

예)

 while (true)
 {
     if (탈출 조건)
     {
         break;
     }
 }

 

나중에 긴 코드로 보면 가독성이 떨어질 수 있을 거 같다는 얘기를 듣고 while(탈출 조건)을 만들었다. 

무심코 만들다 변수가 하나 생겼었다. (탈출 조건)이 조건이 만족해야 했다. 처음에 true할 시 무조건 들어가는데  이 조건은  안 들어갈 수도 있다 각각의 장단점이 있는 것 같다

 

while(true)

장점 : 무조건 처음에는 들어온다. 간편하다

단점 : 무조건 처음에 들어와 기존보다 속도가 느리다, break 문을 찾아야 한다

 

while(탈출조건)

장점 : 정확하다

단점 : 탈출 조건을 명확히 선언해야 한다.