#include <cstdlib>
#include <ctime>
#include <memory>
#include <vector>
#include <iostream>

struct NPC 
{

    virtual void AI() =0 ;
};

struct Pig : public NPC
{
    void AI() { std::cout << "Not by the hair of my chinny chin chin!\n" ; }
};

struct Wolf : public NPC
{
    void AI() { std::cout << "Little pig, little pig!  Let me in!\n" ; }
};


const unsigned numInitialEnemies = 10 ;

int main()
{
    std::srand(std::time(0)) ;

    std::vector<std::unique_ptr<NPC>> enemies ;

    for ( unsigned i=0; i<numInitialEnemies; ++i )
    {
        if ( rand() % 2 )
            enemies.emplace_back(new Pig) ;
        else
            enemies.emplace_back(new Wolf) ;
    }

    for ( unsigned i=0; i<enemies.size(); ++i )
        enemies[i]->AI() ;
}