새로새록

[c++]8. 어벤져스 캐릭터 배틀 본문

소프트웨어융합/경희대 c++ 과제

[c++]8. 어벤져스 캐릭터 배틀

류지나 2020. 7. 16. 21:13

어벤져스 캐릭터 배틀 프로그램을 만들려고 한다. 3번 문제와 유사한 방식으로 Avengers 클래스를 상속받아 Character 클래스를 구현하고, 다음 조건에 맞게 구현하라. 사용자는 캐릭터를 선택하고 상대방 캐릭터는 랜덤으로 선택된다.
1. 각 캐릭터는 캐릭터 이름, 공격력, 방어력, 체력을 갖는다.
2. 공격하는 함수는 상대방에게 공격력을 가하고, 공격받는 함수(방어 함수)는 상대방의 공격력에서 자신의 방어력의 차만큼 자신의 체력을 감소한다.
3. 서로 공격을 주고 받다가, 어느 한쪽의 체력이 0이하가 되면 배틀을 종료한다. 공격을 주고 받을 때 마다 자신과 상대방의 캐릭터 체력을 출력하고 선공은 자신의 캐릭터가 먼저 하는 것으로 설정한다.

  IronMan CaptainAmerica Thor
공격 70 60 80
방어 40 50 30
체력 100 100 100

 

[참조1]
class Avengers
{
public:
	Avengers() {
		name = "";
		attack_point = 0;
		defense_point = 0;
		health = 0;
	}
	~Avengers() {}
	//캐릭터 설정 함수 
	virtual void set(string _name, int _attack, int _defense, int _health)
	{
	}
	//공격 함수 
	virtual int attack()
	{
		return 0;
	}
	//방어 함수 
	virtual void defense(int _attack_point)
	{
	}
	//캐릭터 정보 출력 함수 
	virtual void print_info()
	{
	}
protected:
	string name;//캐릭터 이름 
	int attack_point;//공격력 
	int defense_point;//방어력 
	int health;//체력 
};

[참조 2]
class Character : public Avengers
{
public:
	//구현 
	int get_health() { return health; }
};

[참조 3]
int main()
{
	Character my_char;
	Character enemy_char;
	/*
	구현
	*/

	cout << endl << "--Battle--" << endl;
	cout << "My Life: " << my_char.get_health() << "\t"
		<< "Enemy Life:" << enemy_char.get_health() << endl;

	while (1)
	{
		/*
		구현
		*/
	}
	return 0;
}



 

 

 

 

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;

class Avengers {
public:
	Avengers():name(""), attack_point(0),defense_point(0),health(0){}
	Avengers(string _name, int _attack, int _defense, int _health) :
		name(_name), attack_point(_attack), defense_point(_defense), health(_health) {}
	~Avengers(){}
	
	virtual int attack() {
		return 0;
	}
	virtual void defense(int _attack_point) {
	}
	virtual void print_info() {
		cout << "Name : " << name << "\nAttack_Point : " << attack_point << endl;
		cout << "Defense_Point : " << defense_point << "\nHealth : " << health << endl;
	}
protected:
	string name;
	int attack_point;
	int defense_point;
	int health;
};
class Character : public Avengers {
public:
	Character() : Avengers() {}
	Character(string _name, int _attack, int _defense, int _health) :
		Avengers(_name, _attack, _defense, _health) {}
	string get_name() { return name; }
	int get_health() { return health; }

	int attack() override {
		return attack_point;
	}
	void defense (int _attack_point) override {
		health = health - _attack_point + defense_point;
		if (health <= 0) 
			health = 0;
	}

	void operator=(const Character& chr) {
		this->name = chr.name;
		this->attack_point = chr.attack_point;
		this->defense_point = chr.defense_point;
		this->health = chr.health;
	}

};


int main() {
	Character my_char;
	Character enemy_char;

	Character chter[] = { 
		Character("IronMan", 70, 40, 100),
		Character("CaptainAmerica", 60,50,100),
		Character("Thor", 80, 30, 100)};
	int used[] = { 1,1,1 };
	
	string my_char_name;
	cout << "Choose your character(IronMan, CaptainAmerica, Thor) : ";
	cin >> my_char_name;

	for (int i = 0; i < 3; i++) {
		if (my_char_name == chter[i].get_name()) {
			my_char = chter[i];
			used[i] = 0;
			while (1) {
				srand((unsigned int)time(NULL));
				int enemy_index = rand() % 3;
				if (used[enemy_index] == 1) {
					enemy_char = chter[enemy_index];
					break;
				}
			}
		}
	}
	cout << "--My Character--" << endl;
	my_char.print_info();
	cout << "--Enemy Character--" << endl;
	enemy_char.print_info();
	

	cout << endl << "--Battle--" << endl;
	cout << "My Life: " << my_char.get_health() << "\t"
		<< "Enemy Life: " << enemy_char.get_health() << endl;

	while (1) {
		int my_attack = my_char.attack();
		enemy_char.defense(my_attack);
		cout << "My life: " << my_char.get_health() << "\t "
			<< "Enemy Life: " << enemy_char.get_health() << endl;
		if (enemy_char.get_health() == 0) {
			cout << "You Win!" << endl;
			break;
		}

		int enemey_attack = enemy_char.attack();
		my_char.defense(enemey_attack);
		
		cout << "My life: " << my_char.get_health() << "\t "
			<< "Enemy Life: " << enemy_char.get_health() << endl;
		if (my_char.get_health() == 0) {
			cout << "You Win!" << endl;
			break;
		}
	}	
	return 0;
}