Życie, co można zrobić, co?
Każda z piłeczek pingpongowych w moim układzie jest wyposażona w trójkolorową diodę LED. Kilka felietonów temu (EdW 12/2024) użyliśmy tablicy do realizacji pierwszego przejścia implementacji gry „Gra w życie” Hortona Conwaye’a (GOL).
W poprzednim odcinku (EdW 1/2025) ulepszyliśmy nasz oryginalny program: po pierwsze, aby dodać płynne zanikanie między przejściami, a następnie użyć dodatkowych kolorów, aby odzwierciedlić wszelkie stany międzypokoleniowe.
Zanim przejdziemy dalej, dobrym pomysłem może być zapoznanie się z najnowszą wersją tego programu, aby przypomnieć sobie, jak działała jego magia (plik CB-June21-02.txt, który jest dostępny na stronie PE z czerwca 2021 r. pod adresem https://bit.ly/3oouhbl). Ponadto, by sprawić Wam nieco przyjemności, umieściłem na YouTube film pokazujący to wszystko w akcji.
Sposób, w jaki zostawiliśmy rzeczy, polegał na posiadaniu dwóch wzorów komórek, zwanych „szybowcami”, które przekładają się na siatkę w ciągu wielu pokoleń. Chociaż było to dość skuteczne, chciałem zobaczyć coś nieco bardziej interesującego, więc zdecydowałem się losowo zasiać początkową populację tablicy, pozwolić ewoluować, aż nic się nie zmieni, a następnie rozpocząć wszystko od nowa z nową losowo wygenerowaną populacją.
Należy tu rozważyć kilka kwestii. Pierwszym z nich był przybliżony procent żywych komórek, którymi chcemy wypełnić tablicę. Zacząłem od dwóch definicji: RAND_MAX, którą ustawiłem na 100, i RAND_CUT, której używam jako wartości odcięcia. Następnie utworzyłem funkcję InitializeUniverse(), która „przechodzi” przez każdy wiersz (indeksowany przez yInd) i każdą kolumnę (indeksowaną przez xInd) w tablicy, wykonując następujące czynności: