#include #include "BeetleT.h" #include "BodyPartT.h" using namespace std; BeetleT::BeetleT() { } size_t BodyPartTToIndex(BodyPartT b){ return static_cast(b); } int BeetleT::PartCount(BodyPartT b) const { size_t i{BodyPartTToIndex(b)}; return beetle[i]; } bool BeetleT::NeedsPart(BodyPartT b) const { size_t i{BodyPartTToIndex(b)}; return beetle[i] < PARTS_NEEDED[i]; } BodyPartT BeetleT::NeedsFor(BodyPartT b) const { BodyPartT missing{BodyPartT::NONE}; switch(b) { case BodyPartT::HEAD : case BodyPartT::LEG : case BodyPartT::TAIL: if (NeedsPart(BodyPartT::BODY)) { missing = BodyPartT::BODY; } break; case BodyPartT::EYE : case BodyPartT::ANTENNA : if (NeedsPart(BodyPartT::HEAD)) { missing = BodyPartT::HEAD; } break; case BodyPartT::BODY : default: break; } return missing; } bool BeetleT::CanTakePart(BodyPartT b) const{ bool canTake{false}; bool rv; switch (b) { case BodyPartT::BODY : canTake = true; break; case BodyPartT::HEAD : case BodyPartT::LEG : case BodyPartT::TAIL: if (not NeedsPart(BodyPartT::BODY)) { canTake = true; } break; case BodyPartT::EYE : case BodyPartT::ANTENNA : if (not NeedsPart(BodyPartT::HEAD)) { canTake = true; } break; default: canTake = false; } rv = canTake and NeedsPart(b); return rv; } void BeetleT::GivePart(BodyPartT b) { size_t i{BodyPartTToIndex(b)}; // note, late add, untested. if (CanTakePart(b)) { ++beetle[i]; } } bool BeetleT::Finished() const { BodyPartT b; bool rv{true}; for(b = FIRST_PART; b != BodyPartT::NONE; ++b) { rv = rv and not NeedsPart(b); } return rv; }