[C++] 멤버함수응용 : monster 사냥

2022. 6. 2. 19:21코딩 1막 <C++개념편>/코딩 1막 <C++응용편>

728x90

1. <몬스터 구조체 멤버함수로 속성과 기능을 작성하고 몬스터를 잡아보기>

#include <iostream>
#include <string>

using namespace std;

// Monster의 구조체
// 모든 몬스터의 정보를 출력하는것은 적합하지 않다
// why? 멤버함수이기 때문이다.
struct Monster
{
	// Monster의 속성
	string name;
	string dropItem;
	int hp;
	int atk;
	int level;

	void PrintInfo()
	{
		cout << "몬스터 이름 : " << name << endl;
		cout << "레벨 : " << level << endl;
		cout << "체력 : " << hp << endl;
		cout << "공격력 : " << atk << endl;
	}

	void SetInfo(string _name, string _dropItem, int _hp, int _atk, int _level)
	{
		name = _name;
		dropItem = _dropItem;
		hp = _hp;
		atk = _atk;
		level = _level;
	}

	//Monster의 기능
	void Attack()
	{
		cout << name << "이 " << atk << "의 공격력으로 공격한다" << endl;
	}
	void Hit(int damage)
	{
		hp -= damage;
		cout << name << "에게 데미지 " << damage << "를 입혔다." << endl;
		cout << name << "의 현재 체력은 " << hp << endl;
		if (hp <= 0)
		{
			Die();
		}
	}
	void Die()
	{
		cout << name << "은 죽었다." << endl;
		DropItem();
	}
	void DropItem()
	{
		cout << dropItem << "을 떨어트렸다" << endl;
	}
};



void main()
{
	Monster dragon;
	dragon.SetInfo("드래곤", "용의 보옥", 100, 50, 10);

	Monster slime;
	slime.SetInfo("슬라임", "점액", 10, 1, 1);

	dragon.PrintInfo();
	dragon.Attack();
	dragon.Hit(10);
	dragon.Hit(50);
	dragon.Hit(50);

	cout << endl;
	slime.PrintInfo();
	slime.Attack();
	slime.Hit(5);
	slime.Hit(3);
	slime.Hit(2);

}

출력 결과

2. <플레이어 구조체를 추가하여 몬스터를 잡아보기>

#include <iostream>
#include <string>

using namespace std;


struct Monster
{
	// Monster의 속성
	string name;
	string dropItem;
	int hp;
	int atk;
	int level;

	void PrintInfo()
	{
		cout << "몬스터 이름 : " << name << endl;
		cout << "레벨 : " << level << endl;
		cout << "체력 : " << hp << endl;
		cout << "공격력 : " << atk << endl;
	}

	void SetInfo(string _name, string _dropItem, int _hp, int _atk, int _level)
	{
		name = _name;
		dropItem = _dropItem;
		hp = _hp;
		atk = _atk;
		level = _level;
	}

	//Monster의 기능
	void Attack()
	{
		cout << name << "이 " << atk << "의 공격력으로 공격한다" << endl;
	}
	void Hit(int damage)
	{
		hp -= damage;
		cout << name << "에게 데미지 " << damage << "를 입혔다." << endl;
		cout << name << "의 현재 체력은 " << hp << endl;
		if (hp <= 0)
		{
			Die();
		}
	}
	void Die()
	{
		cout << name << "은 죽었다." << endl;
		DropItem();
	}
	void DropItem()
	{
		cout << dropItem << "을 떨어트렸다" << endl;
	}
};

// 실습_ 플레이어의 구조체에 적합한 속성과 기능을 작성하고, 몬스터와 상호작용 해보기
struct Player
{
	// 플레이어의 속성
	string name;
	string dropItem;
	int level;
	int atk;
	int hp;

	void PlayerPrintInfo()
	{
		cout << "플레이어 이름 : " << name << endl;
		cout << "레벨 : " << level << endl;
		cout << "체력 : " << hp << endl;
		cout << "공격력 : " << atk << endl;
	}

	void PlayerSetInfo(string newName, string newDropItem, int newHp, int newAtk, int newLevel)
	{
		name = newName;
		dropItem = newDropItem;
		hp = newHp;
		atk = newAtk;
		level = newLevel;
	}

	//플레이어의 기능
	void Attack()
	{
		cout << name << "가 " << atk << "의 공격력으로 공격한다" << endl;
	}

	void Hit(int damage)
	{
		hp -= damage;
		cout << name << "에게 데미지 " << damage << "를 입혔다." << endl;
		cout << name << "의 현재 체력은 " << hp << endl;
		if (hp <= 0)
		{
			Die();
		}
	}

	void Die()
	{
		cout << name << "은 죽었다." << endl;
		DropItem();
	}
	void DropItem()
	{
		cout << dropItem << "을 떨어트렸다" << endl;
	}
};


void main()
{
	Player player;
	player.PlayerSetInfo("zl존전사", "50000메소", 100, 30, 7);
	
	Monster dragon;
	dragon.SetInfo("드래곤", "용의 보옥", 100, 50, 10);

	player.PlayerPrintInfo();
	cout << endl;
	dragon.PrintInfo();
	cout << endl << endl;

	player.Attack();
	dragon.Hit(20);
	dragon.Attack();
	player.Hit(40);
	player.Attack();
	dragon.Hit(10);
	dragon.Attack();
	player.Hit(30);
	player.Attack();
	dragon.Hit(30);
	dragon.Attack();
	player.Hit(30);

}

출력 결과

728x90