#include #include #include using namespace std; // Frigate damage calculation (assuming access to data: sail_area, crew, cannons) void take_damage(int shots) { shots -= shots / 5; if ( shots <= 0 ) return; crew -= 1; shots -= 1; sail_area -= shots/2 * sail_area * 5/100.0; shots -= shots/2; if ( shots >= cannons ) cannons = 0; else cannons -= shots; } // Frigate print (assuming access to data: sail_area, crew, cannons) void print(ostream& os) { os << "Frigate with " << crew << " crew, " << sail_area << " sq m sails and " << cannons << " cannons." << endl; } // Transport damage calculation (assuming access to: sail_area, capacity, passengers) void take_damage(int shots) { shots -= shots / 5; passengers -= shots/2; shots -= shots/2; capacity -= shots/2 * capacity * 5/100.0; shots -= shots/2; sail_area -= shots * sail_area * 10/100.0; } // Transport print (assuming access to: crew, sail_area, capacity, passengers) void print(ostream& os) { os << "Transport with " << crew << " crew, " << sail_area << " sq m sails, " << capacity << " ton cargo and " << passengers << " passengers." << endl; } int main() { cout << setprecision(1) << fixed; // TODO välj datatyp och anpassa push_back mm nedan vector armada; Frigate enemy{70, 1600, 20}; // crew, sail area, cannons // TODO fixa slicing via rätt lösning i ovan TODO armada.push_back(Transport{15, 1964.0, 80.0, 65}); // crew, sail area, capacity, passengers armada.push_back(Transport{30, 2514.0, 101.0, 50}); armada.push_back(Frigate{100, 3000.0, 10}); armada.push_back(Frigate{100, 3000.0, 10}); armada.push_back(Frigate{100, 3000.0, 10}); armada.push_back(Frigate{100, 3000.0, 10}); while ( enemy.broadside() > 0 ) { // for every ship in the vector for ( auto && ship : armada ) { enemy.take_damage(ship.broadside()); ship.take_damage(enemy.broadside()); ship.print(cout); } enemy.print(cout); } return 0; }