2016-04-14 15 views
1

grid benim tavşanlar, sincaplar, kurtlar ve çitalarla doldurmam gerekiyor. Şu anda nesneyiHarita "RABBIT" dizgisini aramak için "RABBIT"()

populate("CHEETAH", 2); 
populate("WOLF", 3); 
populate("SQUIRREL", 10); 
populate("RABBIT", 10); 

yazmak için bir ip haritalama arıyorum, ben kurtulmak istiyorum bu tekrarlayan kodu var.

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 
+0

Bir doldurmak fonksiyonu parametre olarak kullanılan tipte nesneler oluşturur oluşturmak istiyor, netleştirmek için? – Stephen

+0

Evet, ayrıntı eksikliği için özür dilerim. doldurun ("RABBIT", 2), 2 RABBIT oluşturmanız gerekir. Gerçekten, bu kodun nesneye nesne eşlemesini bazılarını kullanarak zarif bir şekilde yoğunlaştırmanın bir yolunu arıyorum. – user3487243

+0

'("RABBIT", 2); "ve" diyelim ki, "," [-] (yeni) RABBIT();}, 2); – immibis

cevap

2

Bunun hakkında kolay bir yol, bir şablon işlevinin uygulanmasıdır.

template <typename T> 
void populate(int maxPop) { 
    int i = 0; 

    while (i < maxPop) 
    { 
     randX = rand() % GRIDHEIGHT; 
     randY = rand() % GRIDWIDTH; 

     if (!(grid[randX][randY].Has_An_Animal())) 
     { 
      grid[randX][randY].animal = new T(); 
      i++; 
     } 
    } 
} 

Ve sonra basitçe Uygun türde işlevini çağırmak için:

populate<RABBIT>(10); 
+0

Çözüme baktım, benimkine baktım ve güldüm. Bu harika! Tamamen gözden kaçan şablonlar. Teşekkür ederim! – user3487243

+0

Aynı problemim var, temel olarak benim durumum için çalışacaksa kendime sormam gerekiyor. – Stephen

İlgili konular