Я должен заполнить свои grid
кроликами, белками, волками и гепардами. Я ищу отображение строки в тип объектаКарта «RABBIT» для вызова нового «RABBIT»()
populate("CHEETAH", 2);
populate("WOLF", 3);
populate("SQUIRREL", 10);
populate("RABBIT", 10);
На данный момент у меня есть этот повторяющийся код, который я хотел бы избавиться.
CELL grid[GRIDHEIGHT][GRIDWIDTH];
void populate()
{
int num_rabbits = 0, num_squirrels = 0, num_wolves = 0, num_cheetahs = 0;
int random, randX, randY;
srand((int)time(NULL));
while (num_rabbits < 10)
{
randX = rand() % GRIDHEIGHT;
randY = rand() % GRIDWIDTH;
if (!(grid[randX][randY].Has_An_Animal()))
{
grid[randX][randY].animal = new RABBIT();
num_rabbits++;
}
}
while (num_squirrels < 10)
{
randX = rand() % GRIDHEIGHT;
randY = rand() % GRIDWIDTH;
if (!(grid[randX][randY].Has_An_Animal()))
{
grid[randX][randY].animal = new SQUIRREL();
num_squirrels++;
}
}
while (num_wolves < 3)
{
randX = rand() % GRIDHEIGHT;
randY = rand() % GRIDWIDTH;
if (!(grid[randX][randY].Has_An_Animal()))
{
grid[randX][randY].animal = new WOLF();
num_wolves++;
}
}
while (num_cheetahs < 2)
{
randX = rand() % GRIDHEIGHT;
randY = rand() % GRIDWIDTH;
if (!(grid[randX][randY].Has_An_Animal()))
{
grid[randX][randY].animal = new CHEETAH();
num_cheetahs++;
}
}
}//end
Для уточнения, вы хотите создать функцию Заселите создает объекты типа, используемого в качестве параметра? – Stephen
Да, извините за отсутствие деталей. заполнить («RABBIT», 2), следует создать 2 RABBIT. На самом деле, я просто ищу способ скомпенсировать этот код изящно, используя некоторое сопоставление строки с объектом. – user3487243
Нужно ли это «заполнять» («RABBIT», 2) », а не, скажем,' populate ([]() {return new RABBIT();}, 2); '? – immibis