OOP HomeWork

This commit is contained in:
e2hang
2025-08-11 00:01:30 +08:00
commit e8a5ca2363
119 changed files with 3187 additions and 0 deletions

59
oop_hw6/hw2&3/monster.cpp Normal file
View File

@@ -0,0 +1,59 @@
#include "monster.h"
#include <iostream>
#include <typeinfo>
#include <cstring>
std::string demangle(const char* name) {
std::string s = name;
std::string prefix = "class ";
if (s.find(prefix) == 0) {
s = s.substr(prefix.length());
}
return s;
}
void Monster::fight(Monster& a, Monster& b)
{
//a<>ȹ<EFBFBD><C8B9><EFBFBD>b
while (a.hp > 0 && b.hp > 0) {
a.attack(b);
if (a.hp <= 0) break;
b.attack(a);
}
//дһ<D0B4><D2BB>typeid()
std::string x, y;
x = demangle(typeid(a).name());
y = demangle(typeid(b).name());
a.hp > 0 ? std::cout << "Monster " << x << " wins" << std::endl : std::cout << "Monster "<< y << " wins" << std::endl;
}
double& Monster::show_hp()
{
return this->hp;
}
double& Monster::show_damage()
{
return this->damage;
}
double& Monster::show_defence()
{
return this->defence;
}
void Wolf::attack(Monster& a)
{
a.show_hp() -= this->show_damage() - a.show_defence();
std::cout << "Attacked! (!Wolf) remains <20><>" << a.show_hp() << "<EFBFBD><EFBFBD> HP" << std::endl;
}
void Snake::attack(Monster& a)
{
a.show_hp() -= this->show_damage() - a.show_defence();
std::cout << "Attacked! (!Snake) remains <20><>" << a.show_hp() << "<EFBFBD><EFBFBD> HP" << std::endl;
}
Monster::~Monster() {
}