//--------------------------------------------------------------------------- #include #pragma hdrstop #include "auto.h" #include //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- int sasiedzi(int x, int a, int b) // x - stan; a - wsp x; b - wsp y { int stan = 0; if (Tablica[a-1][b-1]==x) stan++; if (Tablica[a-1][b]==x) stan++; if (Tablica[a-1][b+1]==x) stan++; if (Tablica[a][b+1]==x) stan++; if (Tablica[a+1][b+1]==x) stan++; if (Tablica[a+1][b]==x) stan++; if (Tablica[a+1][b-1]==x) stan++; if (Tablica[a][b-1]==x) stan++; return stan; } //--------------------------------------------------------------------------- void przepisz() { for (int i=0; i<60; i++) { for (int j=0; j<60; j++) { Tablica[i][j]=Tablicab[i][j]; } } } //--------------------------------------------------------------------------- void __fastcall TForm1::Panel1Click(TObject *Sender) { ColorDialog1->Execute(); Panel1->Color = ColorDialog1->Color; } //--------------------------------------------------------------------------- void __fastcall TForm1::Panel2Click(TObject *Sender) { ColorDialog1->Execute(); Panel2->Color = ColorDialog1->Color; } //--------------------------------------------------------------------------- void __fastcall TForm1::Panel3Click(TObject *Sender) { ColorDialog1->Execute(); Panel3->Color = ColorDialog1->Color; } //--------------------------------------------------------------------------- /* void __fastcall TForm1::Button3Click(TObject *Sender) { StringGrid1->RowCount = Edit1->Text.ToInt(); StringGrid1->ColCount = Edit2->Text.ToInt(); StringGrid1->Width = Edit1->Text.ToInt()*10+Edit1->Text.ToInt()+4; StringGrid1->Height = Edit2->Text.ToInt()*10+Edit1->Text.ToInt()+4; } */ //--------------------------------------------------------------------------- void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect) { Label2->Caption = String(ACol+1); Label4->Caption = String(ARow+1); if (RadioButton1->Checked == True) { StringGrid1->Canvas->Brush->Color = Panel1->Color; StringGrid1->Canvas->FillRect(Rect(10*ACol+ACol,10*ARow+ARow,10*ACol+ACol+10,10*ARow+ARow+10)); Tablica[ACol][ARow]=1; } if (RadioButton2->Checked == True) { StringGrid1->Canvas->Brush->Color = Panel2->Color; StringGrid1->Canvas->FillRect(Rect(10*ACol+ACol,10*ARow+ARow,10*ACol+ACol+10,10*ARow+ARow+10)); Tablica[ACol][ARow]=0 ; } if (RadioButton3->Checked == True) { StringGrid1->Canvas->Brush->Color = Panel3->Color; StringGrid1->Canvas->FillRect(Rect(10*ACol+ACol,10*ARow+ARow,10*ACol+ACol+10,10*ARow+ARow+10)); Tablica[ACol][ARow]=2 ; } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { int i=0, j=0; for (j=0; j<60;j++) { for (i=0; i<60;i++) { Tablica[i][j] = 0 ; } } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { int i=0; int j=0; int nic = 0; if (ComboBox1->ItemIndex == 0) { // jeśli zaznaczono Inwazje for (i=0; i<60;i++) { for (j=0; j<60;j++) { if (Tablica[i][j] == 1) // jesli komórka jest aktywna { if (sasiedzi(1, i, j) >= 3 || sasiedzi(2, i, j) >= 3) // i ma przynajmniej 3 aktywnych lub 3 subaktywnych sasiadow { Tablicab[i][j] = 2; //to staje sie subaktywna continue; } else nic++; // jesli warunek nie spełniony to zwiększ licznik if (sasiedzi(1, i, j) >= 1 && sasiedzi(1, i, j) <= 2 || sasiedzi(2, i, j) >= 1 && sasiedzi(2, i, j) <= 2) // jeśli komórka jest aktywna i ma od 1-2 aktywnych lub subaktywnych sasiadów { Tablicab[i][j] = 1; // to ma zostć aktywna continue; } else nic++; // jesli warunek nie spełniony to zwiększ licznik } if (Tablica[i][j] == 0) // jesli komórka jest NIEaktywna { if (sasiedzi(1, i, j) >= 3 || sasiedzi(2, i, j) >= 3) //i ma co najmniej 3 aktywnych lub subaktywnych sasiadów { Tablicab[i][j] = 1; // to staje sie aktywna continue; } else nic++; // jesli warunek nie spełniony to zwiększ licznik } if (nic == 3) Tablicab[i][j] = 0; // W innych przypadkach staje się nieaktywna. nic = 0; } } Button4->Click(); } // zamkniety if - wybor dzialania //===================================== if (ComboBox1->ItemIndex == 1) { // jeśli zaznaczono Marsz for (int i=0; i<60;i++) { for (int j=0; j<60;j++) { if (Tablica[i][j] == 1) // jesli komórka jest aktywna { if (sasiedzi(1, i, j) >= 4) // i ma przynajmniej 4 aktywnych sąsiadów { Tablicab[i][j] = 0; // ma sie stac nieaktywna continue; } else nic++; } if (Tablica[i][j] == 0) // jeśli komórka jest nieaktywna { if (sasiedzi(1, i, j) == 2) //i ma dwóch aktywnych sąsiadów { Tablicab[i][j] = 1; // to staje sie aktywna continue; } else nic++; } if (sasiedzi(1, i, j) == 3) //jeśli komórka ma 3 aktywnych sąsiadów { Tablicab[i][j] = 1; // to staje sie aktywna continue; } else nic++; if (nic == 3) { Tablicab[i][j] = 0; // W innych przypadkach staje się nieaktywna. continue; } nic = 0; } // zamyka for 2 } // zamyka for 1 Button4->Click(); //odrysuj plansze } // zamyka warunek wyboru dzialania //===================================== if (ComboBox1->ItemIndex == 2) { // jeśli zaznaczono Zycie for (int i=0; i<60;i++) { for (int j=0; j<60;j++) { if (Tablica[i][j] == 1 || Tablica[i][j] == 0) // jesli komórka jest aktywna lub nie { if (sasiedzi(1, i, j) == 3) // i ma 3 aktywnych sasiadow { Tablicab[i][j] = 1; // to staje sie aktywna continue; } else nic++; } if (Tablica[i][j] == 1) // jesli komórka jest aktywna { if (sasiedzi(1, i, j) == 2) // i ma 2 aktywnych sasiadow { Tablicab[i][j] = 1; // to staje sie aktywna continue; } else nic++; } if (nic == 2) { Tablicab[i][j] = 0; // to staje sie martwa continue; } nic = 0; } // zamyka for 2 } // zamyka for 1 Button4->Click(); //odrysuj plansze } // zamyka ifa wyboru dzialania } // konczacy //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { int i=0; int j=0; for (i=0; i<60;i++) { for (j=0; j<60;j++) { if (Tablicab[i][j] == 1) { StringGrid1->Canvas->Brush->Color = Panel1->Color; StringGrid1->Canvas->FillRect(Rect(10*i+i,10*j+j,10*i+i+10,10*j+j+10)); } if (Tablicab[i][j] == 0) { StringGrid1->Canvas->Brush->Color = Panel2->Color; StringGrid1->Canvas->FillRect(Rect(10*i+i,10*j+j,10*i+i+10,10*j+j+10)); } if (Tablicab[i][j] == 2) { StringGrid1->Canvas->Brush->Color = Panel3->Color; StringGrid1->Canvas->FillRect(Rect(10*i+i,10*j+j,10*i+i+10,10*j+j+10)); } } } przepisz(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button5Click(TObject *Sender) { int i=0, j=0; randomize(); if (ComboBox1->ItemIndex == 1 || ComboBox1->ItemIndex == 2) { for (j=0; j<60;j++) { for (i=0; i<60;i++) { int rand = random(2); Tablicab[i][j] = rand ; } } } if (ComboBox1->ItemIndex == 0) { for (j=0; j<60;j++) { for (i=0; i<60;i++) { int rand = random(3); Tablicab[i][j] = rand ; } } } Button4->Click(); przepisz(); } //--------------------------------------------------------------------------- void __fastcall TForm1::ComboBox1Change(TObject *Sender) { if (ComboBox1->ItemIndex == 1 || ComboBox1->ItemIndex == 2) { Label7->Enabled = False; Panel3->Enabled = False; RadioButton3->Enabled = False; } else { Label7->Enabled = True; Panel3->Enabled = True; RadioButton3->Enabled = True; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { int i=0, j=0; for (j=0; j<60;j++) { for (i=0; i<60;i++) { Tablicab[i][j] = 0 ; } } Button4->Click(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { Form1->Close(); } //---------------------------------------------------------------------------