在 20×20 網格模擬螞蟻 (Ant) 與獅蟻 (Doodlebug) 互動,需實現移動、繁殖、飢餓、死亡等規則,並以 ASCII 字元顯示。
class Organism { // 基類
int x, y; // 位置
int breedTicks; // 繁殖計時
virtual void Move(Grid&) = 0;
virtual void Breed(Grid&) = 0;
virtual bool IsPrey() = 0; // true=螞蟻, false=獅蟻
};
class Ant : Organism { // 螞蟻
void Move(Grid& g) override { /* 隨機上下左右,邊界/佔用則留原地 */ }
void Breed(Grid& g) override { if (++breedTicks >= 3) { /* 鄰近空格生新螞蟻 */ breedTicks=0; } }
bool IsPrey() override { return true; }
};
class Doodlebug : Organism { // 獅蟻
int starveTicks;
void Move(Grid& g) override {
if (鄰近有螞蟻) { 移動吃掉; starveTicks=0; }
else { 隨機移動; starveTicks++; }
}
void Breed(Grid& g) override { if (++breedTicks >= 8) { /* 鄰近空格生新獅蟻 */ breedTicks=0; } }
bool Starve() { return starveTicks >= 3; }
bool IsPrey() override { return false; }
};
class Grid {
Organism* cells[20][20];
vector organisms;
void Step() {
// 1. 所有獅蟻先 Move
// 2. 所有螞蟻 Move
// 3. 所有生物 Breed
// 4. 移除飢餓獅蟻
// 5. 顯示網格
}
};
vector 追蹤所有生物,每步按類型分批處理。while (true) { grid.Step(); cout << "Press Enter..."; cin.get(); }。此為經典物件導向模擬作業,重點在於多型設計與步驟順序控制。