Advertisement
Guest User

zabijmy się

a guest
Mar 28th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.01 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <fstream>
  5. #include <iostream>
  6. #include <string>
  7.  
  8. using namespace std;
  9. // komorka == 1 jest zywa
  10. // komorka == 0 jest martwa
  11. // uzywamy krawedzi wokol
  12.  
  13. // void odczytajPlik(int tablica[13][21]) {}
  14.  
  15. void oczyscEkran() {
  16. // Czyscimy ekran w zaleznosci od OS,
  17. // mozesz to usunac - nie chcialo mi sie bootowac Windy
  18. #ifdef WINDOWS
  19.   system("cls");
  20. #else
  21.   system("clear");
  22. #endif
  23. }
  24.  
  25. // Kopiujemy tablice2 do tablicy1
  26. void kopiuj(int tablica1[13][21], int tablica2[13][21]) {
  27.   for (int j = 1; j < 13; j++) {
  28.     for (int i = 1; i < 21; i++)
  29.       tablica2[j][i] = tablica1[j][i];
  30.   }
  31. }
  32.  
  33. // Funkcja zycie odpowiada za symulacje, zlicza sasiadow komorki i dokonuje
  34. // selekcji
  35. void zycie(int tablica[13][21]) {
  36.   // Kopiuje tablice do tablicy tymczasowej, by zapewnic poprawnosc obliczen
  37.   // to tablice tymczasowa bedziemy edytowac, a na tablicy aktualnej bedziemy
  38.   // przeprowadzac obliczenia
  39.   int tymczasowa[13][21];
  40.   kopiuj(tablica, tymczasowa);
  41.   for (int j = 1; j < 13; j++) {
  42.     for (int i = 1; i < 21; i++) {
  43.       // Sprawdza sasiadow w 8 roznych kierunkach
  44.       int licznikSasiadow = 0;
  45.       licznikSasiadow = tablica[j - 1][i] + tablica[j - 1][i - 1] +
  46.                         tablica[j][i - 1] + tablica[j + 1][i - 1] +
  47.                         tablica[j + 1][i] + tablica[j + 1][i + 1] +
  48.                         tablica[j][i + 1] + tablica[j - 1][i + 1];
  49.       // Zdychaj komoreczko, austriacki malarz pocztowek pozdrawia
  50.       // zabraklo zarcia albo nie bylo sie z kim reprodukowac
  51.       if (licznikSasiadow < 2 || licznikSasiadow > 3)
  52.         tymczasowa[j][i] = 0;
  53.       // Komorka sie nie zmienia
  54.       if (licznikSasiadow == 2)
  55.         tymczasowa[j][i] = tablica[j][i];
  56.       // Komorka sie rodzi albo pozostaje jedynka (jezeli nia byla)
  57.       if (licznikSasiadow == 3)
  58.         tymczasowa[j][i] = 1;
  59.     }
  60.   }
  61.   // Kopiuje tymczasową do tablicy
  62.   kopiuj(tymczasowa, tablica);
  63. }
  64.  
  65. // sprawdza czy dwie tablice są intentyczne, jeżeli są to zwraca true
  66. bool porownaj(int tablica1[13][21], int tablica2[13][21]) {
  67.   int licznikIdentycznych = 0;
  68.   for (int j = 1; j < 13; j++) {
  69.     for (int i = 1; i < 21; i++) {
  70.       if (tablica1[j][i] == tablica2[j][i])
  71.         licznikIdentycznych++;
  72.     }
  73.   }
  74.   // z racji, że licznik identycznych jest zwiększany za każdym razem, gdy
  75.   // tablica jest identyczna to
  76.   // wystarczy porównać go z ogólną ilością komórek
  77.   if (licznikIdentycznych == 12 * 20)
  78.     return true;
  79.   else
  80.     return false;
  81. }
  82.  
  83. // Funkcja rysuje pole o wymiarach 13 x 21
  84. void rysuj(int tablica[13][21]) {
  85.   for (int j = 1; j < 13; j++) {
  86.     for (int i = 1; i < 21; i++) {
  87.       if (tablica[j][i] == 1)
  88.         cout << 'x';
  89.       else
  90.         cout << '.';
  91.     }
  92.     cout << endl;
  93.   }
  94. }
  95.  
  96. int main() {
  97.   int pokolenie0[13][21];
  98.   int aktualna[13][21];
  99.   int zapasowa[13][21];
  100.   bool wynikPorownania;
  101.   // Czyscimy ekran
  102.   oczyscEkran();
  103.   int i = 0;
  104.   do {
  105.     //  odczytajPlik(pokolenie0); TODO
  106.  
  107.     srand(time(NULL));
  108.     for (int j = 1; j < 13; j++) {
  109.       for (int i = 1; i < 21; i++)
  110.         pokolenie0[j][i] = rand() % 2;
  111.     }
  112.  
  113.     // Wypisuje numer pokolenia
  114.     cout << endl << "Pokolenie " << i << ":" << endl << endl << endl;
  115.     // jeżeli jest to pokolenie 0, to kopiuje je do aktualnej tablicy
  116.     if (i == 0) {
  117.       kopiuj(pokolenie0, aktualna);
  118.     }
  119.     kopiuj(aktualna, zapasowa);
  120.     rysuj(aktualna);
  121.     zycie(aktualna);
  122.     i++;
  123.     // Zatrzymuje na chwile refresh, zeby nie dostac oczoplasu
  124.     system("sleep .1");
  125.     // sprawdzamy czy wykonano już 100 symulacji
  126.     if (i == 101) {
  127.       cout << endl;
  128.       // przerywamy
  129.       break;
  130.     }
  131.     // porownuje ze soba tablice, jezeli nie sa identyczne to kontynuuje
  132.     // symulacje
  133.     wynikPorownania = porownaj(aktualna, zapasowa);
  134.     if (wynikPorownania == false)
  135.       oczyscEkran();
  136.     if (wynikPorownania == true)
  137.       cout << endl;
  138.   } while (wynikPorownania == false);
  139.   return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement