#include #include #include #include using namespace std; // håller reda på positionen (x,y) using Point = std::pair; // Givet ett Movable objekt och en vektor av objekt, returnera true om // det uppstår en kollision mellan givna Movable objektet och vilket // annat objekt i vektorn. bool have_collisions(/*Movable*/ mov, std::vector const& objects) { for (auto & obj : objects) { if( /* Anropa collide från mov med obj som argument */ ) return true; } return false; } // Givet en vektor av Object (observera att detta är spelklassen // Object), för varje flyttbart objekt, spara den gamla positionen och // kalla sedan på dess move() funktion. // Om det sker en kollision på // den nya platsen, ställ om platsen till den sparade positionen, // skriv annars ut att objektet har flyttat på sig. void update(/* vector of Objects */) { for (auto & obj : objects) { if (/* Använd dynamic_cast för att konvertera obj till ett Movable objekt om det går */) { auto old_position{/* Hämta positionen av nuvarande objekt */}; // Anropa move från nuvarande objektet if (have_collisions(/*nuvarande objekt*/, objects)) { /* Flytta nuvarande objekt till gamla positionen */ } else { cout << /* hämta namnet på nuvarande objekt */ << " moved!" << endl; } } } } int main() { // Skapa en vektor med namnet objects där du sparar följande objekt: // Type Name Location (x,y) // Gorn "the gorn" (0,2) // Vulcan "the vulcan" (2,0) // Wall "east wall" (4,2) // Wall "outer wall" (2,5) // uppdatera alla objekt tio gånger (alltså en väldigt kort spel-loop) for (int i{0}; i < 10; ++i) update(objects); // Detta ska ge utskriften nedan: // the gorn moved! // the vulcan moved! // the gorn moved! // the vulcan moved! // the gorn moved! // the vulcan moved! // the vulcan moved! }