과제
Day15 - 오버로딩 1,2,3단계
qltjfeo55555
2024. 12. 10. 15:32
과제 1) Hero 클래스 생성
새로운 cs 파일을 만들고, Hero 클래스 생성
- 필드 혹은 프로퍼티
- 문자열 영웅의 이름
- 정수형 영웅의 체력
- 정수형 영웅의 공격력
- 정수형 영웅의 방어력
- 생성자
- 기본 생성자: "Unknown Hero"로 영웅 이름을 설정하고, HP는 100, 공격력은 20, 방어력은 10으로 설정
- 오버로딩 생성자: 이름, 체력, 공격력, 방어력을 모두 외부에서 세팅해 줄 수 있는 생성자도 하나 생성
- 메서드
- 피격을 나타내는 메서드 TakeDamage
- 반환은 없음. 인자값은 정수형 damage
- 받은 피해를 체력에서 차감, 방어력은 피해를 경감시키는 역할
- 예를 들어, 인자로 넘어온 데미지는 40, 방어력은 10이면 총 30 데미지 받음
- 몬스터 공격하는 메서드 AttackMob
- 반환 없음. 인자값은 아래 만들 Monster형 mob
- cw 로 “몹 이름을 공격!” 출력
- mob의 TakeDamage 메서드 호출하되, 인자로 hero의 공격력 넘김
- 영웅의 상태를 출력하는 함수 DisplayInfo
- cw로 영웅 속 다양한 요소들을 본인 취향에 맞게 자유롭게 출력하는 기능
- 피격을 나타내는 메서드 TakeDamage
internal class Hero
{
public string HeroName;
public int HeroHP;
public int HeroPower;
public int HeroDefensive;
//먼저 값을 대입하면서 기본값 생성
public Hero(string Name = "Unknown Hero", int HP = 100, int Power = 20, int Defensive = 10)
{
HeroName = Name;
HeroHP = HP;
HeroPower = Power;
HeroDefensive = Defensive;
}
public Hero()
{
HeroName = "Unknown Hero";
HeroHP = 100;
HeroPower = 20;
HeroDefensive = 10;
}
public void TakeDamage(int monsterdamage)
{
HeroHP = HeroHP + HeroDefensive - monsterdamage;
}
public void AttackMob(Monster mob)
{
Console.WriteLine($"{mob.MonsterName} 공격");
TakeDamage(mob.MonsterPower);
}
public void DisplayInfo()
{
Console.WriteLine("영웅의 이름 : " + HeroName);
Console.WriteLine("영웅의 체력 : " + HeroHP);
Console.WriteLine("영웅의 공격력 : " + HeroPower);
Console.WriteLine("영웅의 방어력 : " + HeroDefensive);
}
}
과제 2) Monster 클래스 생성
새로운 cs 파일을 만들고, Monster 클래스를 생성
- 필드 혹은 프로퍼티
- 문자열 몹 이름
- 정수형 몹 체력
- 정수형 몹 공격력
- 정수형 몹 방어력
- 정수형 몹 레벨
- 생성자
- 기본 생성자: “Basic Monster"로 몬스터 이름을 설정하고, HP는 50, 공격력은 15, 방어력은 5, 레벨은 1로 설정
- 오버로딩 생성자: 이름, 체력, 공격력, 방어력, 레벨을 외부에서 세팅해 줄 수 있는 생성자도 하나 생성
- 메서드
- TakeDamage
- 반환은 없음
- 받은 피해를 체력에서 차감, 방어력은 피해를 경감시키는 역할
- 예를 들어, 인자로 넘어온 데미지가 40이고 방어력이 5이면 35 뎀지 입음
- AttackHero
- 반환은 없음
- 인자값으로 영웅 객체 hero 를 받아 몬스터가 영웅을 공격하도록 구현
- hero 속 메서드 TakeDamage를 호출, 인자값으로 몹 공격력 넘겨줌
- DisplayInfo
- 몬스터의 상태를 출력하는 함수
- 몬스터의 이름, 체력, 공격력, 방어력, 레벨을 출력
- TakeDamage
internal class Monster
{
public string MonsterName;
public int MonsterHp;
public int MonsterPower;
public int MonsterDefensive;
public int MonsterLevel;
public Monster(string name = "Basic Monster", int hp = 50, int power = 15, int defensive = 5, int level = 1)
{
MonsterName = name;
MonsterHp = hp;
MonsterPower = power;
MonsterDefensive = defensive;
MonsterLevel = level;
}
public Monster()
{
MonsterName = "Basic Monster";
MonsterHp = 50;
MonsterPower = 15;
MonsterDefensive = 5;
MonsterLevel = 1;
}
public void TakeDamage(int herodamage)
{
MonsterHp = MonsterHp + MonsterDefensive - herodamage;
}
public void AttackHero(Hero hero)
{
TakeDamage(hero.HeroPower);
}
public void DisplayInfo()
{
Console.WriteLine("몬스터의 이름 : " + MonsterName);
Console.WriteLine("몬스터의 체력 : " + MonsterHp);
Console.WriteLine("몬스터의 공격력 : " + MonsterPower);
Console.WriteLine("몬스터의 방어력 : " + MonsterDefensive);
Console.WriteLine("몬스터의 레벨 : " + MonsterLevel);
}
}
과제 3) 게임 테스트
- 메인으로 이동해서 다음을 작성 후 테스트
- Hero 객체와 Monster 객체를 각각 하나씩 생성.
- Hero는 기본 생성자로 호출해보고 Monster는 오버로딩된 생성자 호출하고 값은 적당히 체력 40, 공격력 14, 방어력 4, 레벨3 정도 세팅
- Hero 객체는 AttackMob() 메서드를 사용하여 Monster 객체를 공격
- Monster 객체는 AttackHero() 메서드를 사용하여 Hero 객체를 공격
- 각각의 공격 후 Hero와 Monster 객체의 상태를 출력하는 DisplayInfo 를 활용해서 현재 상태 확인하기
static void Main(string[] args)
{
//hero 기본값 할당
//Hero hero = new Hero();
//monster 입력값 할당
//Monster monster = new Monster("유니콘", 40, 14, 4, 3);
//hero.AttackMob(monster);
//monster.AttackHero(hero);
//hero, monster 상태 출력
//hero.DisplayInfo();
//monster.DisplayInfo();
}
https://record5555.tistory.com/22
Day15 - 오버로딩 심화
https://record5555.tistory.com/21 Day15 - 오버로딩 1,2,3단계과제 1) Hero 클래스 생성새로운 cs 파일을 만들고, Hero 클래스 생성필드 혹은 프로퍼티문자열 영웅의 이름정수형 영웅의 체력정수형 영웅의 공
record5555.tistory.com