Моделювання життя за допомогою ресурсів мови С++, страница 3

                                                           DelEl (PTemp);

                                       PTemp->PObj->time++;

                                       if ((PTemp->PObj->Child->R == 3) && (PTemp->PObj->preg == 1))

                                       {

                                                           PTemp->PObj->Birth ();

                                                           AddNode (new CCircleSM (PTemp->PObj->Child->X, PTemp->PObj->Child->Y, PTemp->PObj->Child->R, PTemp->PObj->Child->color));

                                       }

                                       PTemp=PTemp->PNext;

                    }

};

void CList :: DelEl (CNode *PCur)

{

                    PTemp = PHead;

                    while (PTemp->PNext != PCur)

                    PTemp = PTemp->PNext;

                    PTemp->PNext = PCur->PNext;

                    PCur->PObj->Hide ();

                    if (PCur->PObj->preg == 1)

                                       delete PCur->PObj->Child;

                    delete PCur->PObj;

                    delete PCur;

                    PTemp = PTemp->PNext;

}

CList :: ~CList(void)

{

                    while(PHead!=NULL)

                    {

                                       PTemp=PHead->PNext;

                                       delete PHead->PObj;

                                       delete PHead;

                                       PHead=PTemp;

                    }

};

int main (void)

{

                    CList *PList;

                    randomize ();

                    int graphdriver = DETECT, graphmode;

                    initgraph(&graphdriver, &graphmode, "D:\\Programs\\C\\TC\\BGI");

                    PList=new CList;

                    for (int i=0;i<All;i++)

                    {

                                       PList->AddNode (new CCircleSM(random (620), random (460), 3, random (3) + 1));

                    }

                                       PList->AddNode (new Volk(random (620), random (460), 1, 15));

                    PList -> ShowAll ();

                    while (!kbhit())

                    {

                                       PList -> MoveAll ();

                                       delay (10);

                    }

                    closegraph();

                    getch();

                    delete PList;

                    return 0;

}

Результат роботи програми:

На екрані рухаються і взаємодіють між собою різні об’єкти

  1. Результат роботи програми UML

Ця програма малює 19 об’єктів класу CCircleSM та один об’єкт класу Volk. При зіткненні двох об’єктів класу CCircleSM з’являється новій об’єкт класу CCircleSM.

При зіткненні об’єкту класу CCircleSM  з об’єктом Volk  об’єкт класу CCircleSM зникає. Об’єкти класу CCircleSM мають обмежений час життя щоб не переповнювати пам’ять. Всі об’єкти знаходяться в динамічному списку.