首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 課程設計:捕食者-被捕食者模擬 (螞蟻與獅蟻) 完整架構設計

     編輯:程式設計綜合問答

在 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(); }。
  • 初始放置:5 隻獅蟻、100 隻螞蟻隨機分佈於空格。

此為經典物件導向模擬作業,重點在於多型設計與步驟順序控制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved