Treść programowa

Rozwiązanie wybranego problemu programowania współbieżnego z animacją jako formą prezentacji

Cel zajęć

Celem zajęć jest implementacja gry Game of Life zaproponowanej przez brytyjskiego matematyka Johna Conwaya.

Opis gry

Gra toczy się na nieskończonej dwu-wymiarowej planszy podzielonej na komórki. Każda komórka ma ośmiu sąsiadów oraz może być w dwóch stanach - “żywa” lub “martwa”. Stany komórek zmieniają się określonych interwałach czasu w zależności od stanu całej planszy. Po wykonaniu obliczeń, wszystkie komórki zmieniają swój stan dokładnie w tym samym momencie.

<aside> 💡

Bardziej dokładny opis oraz interaktywne wizualizacje można znaleźć w sekcji Linki.

</aside>

Ewolucja komórek

Wykorzystamy standardowy zestaw reguł (Conway 23/3):

  1. Martwa komórka, która ma dokładnie 3 żywych sąsiadów, staje się żywa w następnej jednostce czasu (rodzi się)
  2. Żywa komórka z 2 lub 3 żywymi sąsiadami pozostaje nadal żywa; przy innej liczbie sąsiadów umiera (samotność / zatłoczenie)

Projekt

Poniżej przestawiono wymagania dotyczące implementacji projektu.

<aside> 💡 Przetwarzanie równoległe Prosta, sekwencyjna implementacja Game of Life może być zrealizowana za pomocą trzech pętli (jedna dla jednostek czasu, dwie pozostałe do iteracji po planszy). Warto jednak zauważyć, że obliczenie nowego stan każdej komórki na planszy jest niezależną operacją i może być przeprowadzone w dowolnej kolejności. Nie oznacza to jednak, że przetwarzania każdej komórki powinno odbywać się o osobnym wątku - to zbyt duża optymalizacja.

</aside>

<aside> 💡 Obszar gry (mapa 2D) powinna być zamodelowana jako torus - każda komórka posiada dokładnie osiem sąsiadów - szczególnie komórki na krawędziach.

x  @  x  _  _  _  _
x  x  x  _  _  _  _
_  _  _  _  _  _  _
_  _  _  _  _  _  _
_  _  _  _  _  _  _
_  _  _  _  _  _  _
x  x  x  _  _  _  _

W tym przypadku komórki X są sąsiadami komórki @.

</aside>

Format pliku wejściowego

Plik wejściowy zawiera linie tekstu ASCII w następującej konwencji: