Загрузил axagonex23

C++ Weapon Class Hierarchy Example

enum ammo_type{BULLET,PROJECTILE};
class Weapon {
protected:
ammo_type AMMO_TYPE = BULLET;
int ammo_pool = 0;
int clip_size = 0;
int ammo_reserves = 0;
float firerate = 1; // cooldown is 1/firerate seconds. read: rounds per second
int damage = 0;
public:
virtual bool shoot(){
if (ammo_pool <= 0){
return 0;
}
ammo_pool--;
return 1;
}
virtual bool reload(){
if (ammo_reserves <= 0){
return 0;
}
int needed = clip_size - ammo_pool;
ammo_pool += std::min(needed, ammo_reserves);
ammo_reserves -= std::min(needed, ammo_reserves); return 1;
}
};
class Crossbow : public Weapon {
public:
Crossbow(){
AMMO_TYPE = PROJECTILE;
ammo_pool = 1;
clip_size = 1;
ammo_reserves = 8;
firerate = 0.75f;
damage = 60;
}
virtual bool shoot(){
int shoot_result = Weapon::shoot();
if(!shoot_result) return 0;
printf("p: %d, r: %d, c: %d shot from the crossbow\n", ammo_pool, ammo_reserves, clip_size);
return 1;
}
virtual bool reload(){
int reload_result = Weapon::reload();
if(!reload_result) return 0;
printf("reloading the crossbow\n");
return 1;
}
};
class Pistol : public Weapon {
public:
Pistol(){
AMMO_TYPE = BULLET;
ammo_pool = 18;
clip_size = 18;
ammo_reserves = 18*4;
firerate = 3;
damage = 8;
};
virtual bool shoot(){
int shoot_result = Weapon::shoot();
if(!shoot_result) return 0;
printf("p: %d, r: %d, c: %d shot from the pistol\n", ammo_pool, ammo_reserves, clip_size);
return 1;
}
virtual bool reload(){
int reload_result = Weapon::reload();
if(!reload_result) return 0;
printf("reloading the pistol\n");
return 1;
}
};
class Rifle : public Weapon {
public:
Rifle(){
AMMO_TYPE = BULLET;
ammo_pool = 36;
clip_size = 36;
ammo_reserves = 36*3;
firerate = 6;
damage = 4;
}
virtual bool shoot(){
int shoot_result = Weapon::shoot();
if(!shoot_result) return 0;
printf("p: %d, r: %d, c: %d shot from the rifle\n", ammo_pool, ammo_reserves, clip_size);
return 1;
}
virtual bool reload(){
int reload_result = Weapon::reload();
if(!reload_result) return 0;
printf("reloading the rifle\n");
return 1;
}
};