Práctica de juegos pequeños en C++

Imaginemos un escenario simple:

Implementación básica (use Class para encapsular monstruos y héroes)

Hay un héroe y un monstruo: 1. Podemos inicializar el volumen de sangre, el maná y el poder de ataque del héroe, y el volumen de sangre y el poder de ataque del monstruo en la terminal. 2. El héroe tiene 4 habilidades, cada habilidad tiene un cierto daño (o puede aumentar la sangre), pero necesita consumir una cierta cantidad de maná (se puede escribir en el código). (Puede considerar el tiempo de enfriamiento, por ejemplo, la primera habilidad solo se puede jugar una vez después de 3 rondas). 3. El juego es por turnos. Los héroes pueden usar habilidades y ataques normales, mientras que los monstruos solo pueden usar ataques normales. Primero el ataque del héroe, luego el ataque del monstruo. Luego está el ataque del héroe, seguido del ataque del monstruo. ciclo a su vez. El héroe puede elegir la habilidad o el ataque normal a través de la entrada del teclado, pero si el maná del héroe no es suficiente, la habilidad no se puede liberar, por lo que el ataque falla y esta ronda no causará ningún daño. Después de cada ronda, el héroe recuperará una cierta cantidad de maná. (A medida que aumenta el número de rondas, aumenta la capacidad de recuperación de maná del héroe) 4. Muestra el resultado ganador final. 5. Puedes terminar el juego escribiendo q. En una ronda, puede ingresar un comando para ver la información de ambos lados (el volumen de sangre del héroe, el volumen azul, el poder de ataque, la capacidad de recuperación y el volumen de sangre del monstruo, el poder de ataque)

#include <iostream>
using namespace std;

class NPC{
public:
	NPC();
	NPC(int Health, int Attack);
	~NPC();

	int Health, Attack;
private:

};

NPC::NPC() {
}

NPC::NPC(int Health, int Attack) {
	this->Health = Health;
	this->Attack = Attack;
}

NPC::~NPC(){
}

class Hero : public NPC{
public:
	Hero(int Health, int Blue, int Attack);
	~Hero();

	int Blue;
	void Normal_Attackl(NPC &n);   //普通攻击
	void Attack_Skill(NPC &n);	  //攻击技能
	void Restoration_Skill(NPC &n);//回复技能
	
private:

};

Hero::Hero(int Health, int Blue, int Attack){
	this->Health = Health;
	this->Attack = Attack;
	this->Blue = Blue;
}

Hero::~Hero(){
}

void Hero::Normal_Attackl(NPC &n) {
	cout << "hero使用了普通公鸡,对monster造成了20点伤害!" << endl;
	n.Health -= this->Attack;
}

void Hero::Attack_Skill(NPC &n) {
	if (this->Blue - 20 < 0) {
		cout << "hero蓝量不足,释放火球失败,未对monster造成伤害!" << endl;
	}
	else {
		this->Blue -= 20;
		cout << "hero释放了豪火球之术,对monster造成了30点伤害!" << endl;
		n.Health -= 30;
	}
}

void Hero::Restoration_Skill(NPC &n) {
	if (this->Blue - 10 < 0) {
		cout << "hero蓝量不足,释放回复技能失败,未回复生命值!" << endl;
	}
	else {
		this->Blue -= 10;
		cout << "hero释放了圣光沐浴,回复生命值50!" << endl;
		this->Health += 50;
	}
}
int main() {
	int i = 1; //记录回合数
	int attack;    //匹配攻击方式
	Hero hero(100,50,10);  //NPC属性初始化
	NPC monster(100, 20);
	cout << "战斗开始"<<endl;
	while (1) {
		cout << "<*******************************第" << i << "回合*******************************>" << endl;
		cout << "请选择指令:" << endl;
		cout << "1:普通公鸡  2:豪火球之术(攻击技能)  3:圣光沐浴(回复技能)  4: 撤退" << endl;
		cin >> attack;
		while(attack != 1 & attack != 2 & attack != 3 & attack != 4) {
		cout << "输入指令无效,请重新输入!" << endl;
		cin >> attack;
		}
		if (attack == 1) {
			hero.Normal_Attackl(monster);
		}
		if (attack == 2) {
			hero.Attack_Skill(monster);
		}
		if (attack == 3) {
			hero.Restoration_Skill(monster);
		}
		if (attack == 4) {
			break;
		}
		if (monster.Health <= 0) {  //判断怪兽死否死亡,若死亡退出循环
			break;
		}
		cout << "monster使用了普通公鸡,对hero造成了20点伤害!" << endl;
		hero.Health -= monster.Attack;

		if (hero.Health <= 0) {     //判断英雄死否死亡,若死亡退出循环
			break;
		}
		cout << "第" << i << "回合结束" ;
		i++;
		hero.Blue += 50 / (10 - i);  //蓝量回复力随着回合的增加而增强
		cout << "    hero当前血量:" << hero.Health << "  蓝量:" << hero.Blue;
		cout << "    monster当前血量:" << monster.Health << endl;
		cout << endl;
	}
	
	if (attack == 4) {
		cout << "撤退成功,战斗结束!" << endl;
	}
	else if (hero.Health > monster.Health) {
		cout << "monster死亡,对战结束,hero胜利!" << endl;
	}
	else {
		cout << "hero死亡,对战结束,monster胜利!" << endl;
	}
	
	return 0;
}

 

Mejorar C++ es un lenguaje orientado a objetos (OOP) En la tarea anterior, las funciones y los atributos solo se empaquetan usando Class, que no se puede llamar OOP (debería llamarse ADT). OOP tiene tres propiedades:

  • Encapsulación: se ha intentado la encapsulación en el proceso anterior
  • heredar:? ?
  • Polimorfismo: ? ?

Piense en cómo se pueden agregar la herencia y el polimorfismo al código anterior.

Consejos: los héroes y los monstruos tienen HP y poder de ataque. ¿Es comprensible que puedan tener la misma clase principal? Si pertenecen a la misma clase principal, ¿cómo se aplica el polimorfismo? ?

 

Supongo que te gusta

Origin blog.csdn.net/weixin_44406127/article/details/131585212
Recomendado
Clasificación