OOP HomeWork
This commit is contained in:
9
oop_hw6/hw2&3/main.cpp
Normal file
9
oop_hw6/hw2&3/main.cpp
Normal file
@@ -0,0 +1,9 @@
|
||||
#include <iostream>
|
||||
#include "monster.h"
|
||||
using namespace std;
|
||||
int main(){
|
||||
Wolf A(100, 10, 3);
|
||||
Snake B(50, 15, 5);
|
||||
Monster::fight(A,B);
|
||||
return 0;
|
||||
}
|
59
oop_hw6/hw2&3/monster.cpp
Normal file
59
oop_hw6/hw2&3/monster.cpp
Normal 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() {
|
||||
|
||||
}
|
34
oop_hw6/hw2&3/monster.h
Normal file
34
oop_hw6/hw2&3/monster.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#pragma once
|
||||
#include <iostream>
|
||||
|
||||
class Monster {
|
||||
private:
|
||||
double hp;
|
||||
double damage;
|
||||
double defence;
|
||||
public:
|
||||
Monster() : hp(0), damage(0), defence(0) {};
|
||||
Monster(double h, double dam, double den) : hp(h), damage(dam), defence(den) {};
|
||||
virtual void attack(Monster& a) = 0;
|
||||
static void fight(Monster& a,Monster& b);
|
||||
double& show_hp();
|
||||
double& show_damage();
|
||||
double& show_defence();
|
||||
virtual ~Monster();
|
||||
};
|
||||
|
||||
class Wolf : public Monster{
|
||||
public:
|
||||
Wolf() : Monster(0,0,0){};
|
||||
Wolf(double h, double dam, double den) : Monster(h, dam, den) {};
|
||||
void attack(Monster& a) override;
|
||||
|
||||
};
|
||||
|
||||
class Snake : public Monster {
|
||||
public:
|
||||
Snake() : Monster(0, 0, 0) {};
|
||||
Snake(double h, double dam, double den) : Monster(h, dam, den) {};
|
||||
void attack(Monster& a) override;
|
||||
|
||||
};
|
BIN
oop_hw6/hw2&3/测试截图2.png
Normal file
BIN
oop_hw6/hw2&3/测试截图2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 413 KiB |
Reference in New Issue
Block a user