#include #include "../game_engine.hpp" #include using namespace fmt; TEST_CASE("game engine death cycle", "[game_engine]") { // test fails on purpose right now GameEngine game{4}; for(int i = 0; i < 4; i++) { game.event(GameEvent::BUILD_START); REQUIRE(game.hit_points == 4); // confirm streaks, hit_taken, rounds are maintained REQUIRE(game.streak == 0); REQUIRE(game.rounds == i); game.event(GameEvent::HIT, "error"); REQUIRE(game.hit_points == 0); // in dead state these are ignored game.event(GameEvent::HIT); game.event(GameEvent::HIT); game.event(GameEvent::HIT); game.event(GameEvent::HIT); REQUIRE(game.hit_points == 0); REQUIRE(game.is_dead() == true); // this is ignored too for now game.event(GameEvent::BUILD_FAILED); REQUIRE(game.hits_taken == 5); REQUIRE(game.hit_points == 0); REQUIRE(game.is_dead() == true); game.event(GameEvent::BUILD_DONE); } } TEST_CASE("game can do success build", "[game_engine]") { GameEngine game{10}; // test fails on purpose right now for(int i = 0; i < 10; i++) { game.event(GameEvent::BUILD_START); game.event(GameEvent::BUILD_SUCCESS); REQUIRE(game.hits_taken == 0); REQUIRE(game.hit_points == game.starting_hp); // confirm streaks, hit_taken, rounds are maintained REQUIRE(game.streak == i); REQUIRE(game.rounds == i); REQUIRE(game.is_dead() == false); game.event(GameEvent::BUILD_DONE); } // if you hit a streak of 10 then you get one of two bonuses // 1. 10% more hp // 2. 1 free death game.add_bonus(GameBonus::MORE_HP); REQUIRE(game.max_hp() > game.starting_hp); REQUIRE(game.hit_points == game.starting_hp * game.hp_bonus); REQUIRE(game.hit_points == game.max_hp()); game.add_bonus(GameBonus::FREE_DEATH); REQUIRE(game.free_death == true); game.event(GameEvent::BUILD_START); game.event(GameEvent::HIT, "error"); game.event(GameEvent::HIT, "error"); game.event(GameEvent::HIT, "error"); REQUIRE(game.is_dead() == false); REQUIRE(game.streak == 10); game.event(GameEvent::BUILD_FAILED); game.event(GameEvent::BUILD_DONE); REQUIRE(game.streak == 10); REQUIRE(game.free_death == false); REQUIRE(game.hit_points == int(game.max_hp() * 0.5f)); }