Implementacja bez użycia biblioteki graficznej

Implementację programu Gra w życie, rozpoczniemy od omówienia klasklasaklas, które zostaną wykorzystane w programie.

Do wyświetlania siatki reprezentującej mapę będziemy korzystać ze standardowego wyjścia. Komórka żywa będzie reprezentowana przez znak czarnego kwadratu, znajdujący się w zestawie znaków Unicode. Dodatkowo, aby móc wpisywać znaki Unicode na standardowe wyjście, skorzystamy z obiektuobiektobiektu klasy PrintWriter, który znajduje się w pakiecie java.io.PrintWriter.

W celu zaimportowania pakietu na początku pliku źródłowego programu dodajemy polecenie import wraz z nazwą pakietu, którego potrzebujemy.

Linia 1. import java kropka io kropka PrintWriter średnik.
Przykład 1
Linia 1. public static void wypiszUnicode otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. PrintWriter printWriter znak równości new PrintWriter otwórz nawias okrągły System kropka out przecinek true zamknij nawias okrągły średnik. Linia 4. char znak znak równości apostrof lewy ukośnik u25a0 apostrof średnik. Linia 5. printWriter kropka println otwórz nawias okrągły znak zamknij nawias okrągły średnik. Linia 6. zamknij nawias klamrowy.

Przeanalizujmy powyższy kod. Zastosowano tu klasę PrintWriter, która wypisuje na standardowym wyjściu przykładowy znak Unicode. Na samym początku tworzymy instancję klasy PrintWriter, podając w konstruktorzekonstruktorkonstruktorze dwa argumenty:

  • System.out – strumień, na którym będziemy wypisywać informacje,

  • true – określa, że dane mają być wyświetlane automatycznie, po każdym wywołaniu funkcji println().

Następnie wybieramy znak i wypisujemy go.

Po uruchomieniu programu na standardowym wyjściu zobaczymy czarny kwadrat:

Linia 1. ■.

By upewnić się, że niezależnie od wyboru środowiska znaki UTF‑8 będą poprawnie wyświetlane, zmodyfikujemy kod:

Linia 1. public static void wypiszUnicode otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. PrintWriter printWriter znak równości new PrintWriter otwórz nawias okrągły new OutputStreamWriter otwórz nawias okrągły System kropka out przecinek StandardCharsets kropka UTF podkreślnik 8 zamknij nawias okrągły przecinek true zamknij nawias okrągły średnik. Linia 4. char znak znak równości apostrof lewy ukośnik u25a0 apostrof średnik. Linia 5. printWriter kropka println otwórz nawias okrągły znak zamknij nawias okrągły średnik. Linia 6. zamknij nawias klamrowy.

Tworzenie programu rozpocznijmy od importu klas, które wykorzystamy w dalszej części.

Linia 1. import java kropka io kropka PrintWriter średnik. Linia 2. import java kropka util kropka Random średnik.

Pierwszą populację w automacie komórkowym generujemy losowo. Z danym prawdopodobieństwem każda komórka będzie żywa lub martwa.

Do tego wykorzystujemy obiekt klasy Random z pakietu java.util.Random oraz metodę nextInt(). Zwraca ona całkowitą pseudolosowąliczba pseudolosowapseudolosową liczbę typu int. Każda z  2 32 możliwych wartości tego typu może zostać wygenerowana (w przybliżeniu) z takim samym prawdopodobieństwem.

Przykładowe użycie klasy losującej:

Linia 1. static Random generator znak równości new Random otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 3. public static void wypiszLosowaLiczbe otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. int i znak równości generator kropka nextInt otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 5. System kropka out kropka print otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 6. zamknij nawias klamrowy.

Metoda ta – jako parametr – może przyjąć dowolną liczbę naturalną dodatnią n. W takim przypadku losowa liczba będzie wygenerowana w zakresie od 0 do n - 1.

Linia 1. prawy ukośnik prawy ukośnik Losuje liczbę od 0 do 4. Linia 2. generator kropka nextInt otwórz nawias okrągły 5 zamknij nawias okrągły średnik.

Poznaliśmy klasy i metody, które wykorzystamy w programie. Przejdźmy do implementacji klasy GraWZycie wraz z jej metodami.

Na początku zaprezentujemy implementację Gry w życie bez wykorzystywania biblioteki graficznej, zasady gry oraz schemat jej działania został opisany w materiale wstępnymPhPMLGH2imateriale wstępnym.

Dodajemy klasę GraWZycie wraz z metodami.

  • inicjalizujSiatke() – metoda wykorzystywana przez konstruktor obiektu głównej klasy GraWZycie, odpowiadająca za losowe wygenerowanie pierwszej populacji komórek, widoczna tylko wewnątrz klasy;

  • policzZywychSasiadow() – metoda wykorzystywana podczas operacji ewolucji komórek, odpowiadająca za policzenie żywych sąsiadów danej komórki, widoczna tylko wewnątrz klasy;

  • ewolucja() – publiczna metoda odpowiadająca za wywołanie procesu ewolucji komórek;

  • wypiszSiatke() – publiczna metoda odpowiadająca za wypisanie obecnego stanu siatki na standardowe wyjście programu.

Klasa ma postać:

Linia 1. public class GraWZycie otwórz nawias klamrowy. Linia 2. private boolean otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy siatka średnik. Linia 3. private int otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy ileSasiadow średnik. Linia 4. private int rozmiarSiatki średnik. Linia 5. private final boolean ZYWA znak równości true średnik. Linia 6. private final boolean MARTWA znak równości false średnik. Linia 7. private final Random generator średnik. Linia 8. zamknij nawias klamrowy.

W klasie GraWZycie utworzymy również konstruktor:

Linia 1. public GraWZycie otwórz nawias okrągły int rozmiar zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. rozmiarSiatki znak równości rozmiar średnik. Linia 3. siatka znak równości new boolean otwórz nawias kwadratowy rozmiarSiatki zamknij nawias kwadratowy otwórz nawias kwadratowy rozmiarSiatki zamknij nawias kwadratowy średnik. Linia 4. ileSasiadow znak równości new int otwórz nawias kwadratowy rozmiarSiatki zamknij nawias kwadratowy otwórz nawias kwadratowy rozmiarSiatki zamknij nawias kwadratowy średnik. Linia 5. generator znak równości new Random otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 6. inicjalizujSiatke otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 7. zamknij nawias klamrowy.

Zauważ, że w konstruktorze wywołamy metodę inicjalizujSiatke(), która odpowiada za losowe wygenerowanie pierwszej populacji komórek:

Linia 1. private void inicjalizujSiatke otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. prawy ukośnik prawy ukośnik Do każdej komórki w siatce przypisujemy jedną z wartości od 0 do 4. Linia 3. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny rozmiarSiatki średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny rozmiarSiatki średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. prawy ukośnik prawy ukośnik Generujemy liczbę losową. Linia 6. int n znak równości generator kropka nextInt otwórz nawias okrągły 5 zamknij nawias okrągły średnik. Linia 8. prawy ukośnik prawy ukośnik Jeżeli wygenerowana liczba wynosi 0 minus komórka jest żywa. Linia 9. if otwórz nawias okrągły n znak równości znak równości 0 zamknij nawias okrągły. Linia 10. siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości ZYWA średnik. Linia 11. else. Linia 12. siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości MARTWA średnik. Linia 13. zamknij nawias klamrowy. Linia 14. zamknij nawias klamrowy. Linia 15. zamknij nawias klamrowy.

Implementujemy metodę policzZywychSasiadow. Zlicza ona żywych sąsiadów danej komórki. Ta metoda oblicza, ile komórek wokół sprawdzanej komórki jest żywych. Każda kolejna żywa komórka powoduje zwiększenie wartości zmiennej ile o 1.

Zasadę działania gry w życie znajdziesz w e‑materiale Gra w życiePhPMLGH2iGra w życie.

Linia 1. private int policzZywychSasiadow otwórz nawias okrągły int y przecinek int x zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. int ile znak równości 0 średnik. Linia 4. prawy ukośnik prawy ukośnik Przechodzimy po kwadracie 3 x 3 dookoła komórki. Linia 5. for otwórz nawias okrągły int i znak równości y minus 1 średnik i otwórz nawias ostrokątny znak równości y plus 1 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. for otwórz nawias okrągły int j znak równości x minus 1 średnik j otwórz nawias ostrokątny znak równości x plus 1 średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. prawy ukośnik prawy ukośnik Jeżeli nie wyszliśmy poza zakres siatki. Linia 8. if otwórz nawias okrągły i zamknij nawias ostrokątny znak równości 0 ampersant ampersant j zamknij nawias ostrokątny znak równości 0 ampersant ampersant i otwórz nawias ostrokątny rozmiarSiatki ampersant ampersant j otwórz nawias ostrokątny rozmiarSiatki zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. prawy ukośnik prawy ukośnik Oraz gdy komórka jest żywa minus dodajemy żywego sąsiada. Linia 10. if otwórz nawias okrągły siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości ZYWA zamknij nawias okrągły otwórz nawias klamrowy. Linia 11. ile plus plus średnik. Linia 12. zamknij nawias klamrowy. Linia 13. zamknij nawias klamrowy. Linia 14. zamknij nawias klamrowy. Linia 15. zamknij nawias klamrowy. Linia 17. prawy ukośnik prawy ukośnik Ponieważ sprawdzaliśmy również podaną komórkę przecinek. Linia 18. prawy ukośnik prawy ukośnik to jeżeli ona jest żywa przecinek musimy ją odjąć. Linia 19. prawy ukośnik prawy ukośnik minus sama komórka nie jest swoim sąsiadem. Linia 20. if otwórz nawias okrągły siatka otwórz nawias kwadratowy y zamknij nawias kwadratowy otwórz nawias kwadratowy x zamknij nawias kwadratowy znak równości znak równości ZYWA zamknij nawias okrągły. Linia 21. ile minus minus średnik. Linia 23. return ile średnik. Linia 24. zamknij nawias klamrowy.

Implementujemy metodę o nazwie ewolucja, która oblicza liczbę żywych sąsiadów dla każdej komórki. Ta metoda wprowadza zmiany zgodne z zasadami gry w życie. Zatem żywa komórka, która ma zbyt mało lub zbyt wielu żywych sąsiadów umiera, natomiast ta, która była martwa, ale teraz ma 3 żywych sąsiadów, ożywa. Ewolucja jest przeprowadzana dla każdej komórki.

Linia 1. public void ewolucja otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. prawy ukośnik asterysk Najpierw obliczamy liczbę żywych sąsiadów. Linia 3. dla każdej komórki asterysk prawy ukośnik. Linia 4. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny rozmiarSiatki średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny rozmiarSiatki średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. ileSasiadow otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości policzZywychSasiadow otwórz nawias okrągły i przecinek j zamknij nawias okrągły średnik. Linia 7. zamknij nawias klamrowy. Linia 8. zamknij nawias klamrowy. Linia 10. prawy ukośnik asterysk Następnie przeprowadzamy dla każdej z komórek. Linia 11. ewolucje zgodnie z zasadami Gry w życie asterysk prawy ukośnik. Linia 12. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny rozmiarSiatki średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny rozmiarSiatki średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. if otwórz nawias okrągły siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości MARTWA ampersant ampersant ileSasiadow otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości 3 zamknij nawias okrągły otwórz nawias klamrowy. Linia 15. prawy ukośnik prawy ukośnik Komórka ożywa minus ma 3 żywych sąsiadów. Linia 16. siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości ZYWA średnik. Linia 18. zamknij nawias klamrowy else if otwórz nawias okrągły siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości ZYWA zamknij nawias okrągły otwórz nawias klamrowy. Linia 19. if otwórz nawias okrągły ileSasiadow otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy otwórz nawias ostrokątny 2 kreska pionowa kreska pionowa ileSasiadow otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias ostrokątny 3 zamknij nawias okrągły otwórz nawias klamrowy. Linia 20. prawy ukośnik prawy ukośnik Komórka umiera minus za mało sąsiadów lub przeludnienie. Linia 21. siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości MARTWA średnik. Linia 22. zamknij nawias klamrowy. Linia 23. zamknij nawias klamrowy. Linia 24. prawy ukośnik prawy ukośnik W przeciwnym wypadku komórka nie zmienia swojego stanu. Linia 25. zamknij nawias klamrowy. Linia 26. zamknij nawias klamrowy. Linia 27. zamknij nawias klamrowy.

Zaimplementowaliśmy wcześniej metodę reprezentującą siatkę. Będziemy ją uzupełniać w sposób losowy. W tym celu dla każdej komórki losujemy liczbę całkowitą w zakresie 0 , 4 . W przypadku, gdy wylosujemy liczbę równą 0, komórka staje się żywa, a w przeciwnym wypadku martwa. W ten sposób uzupełniamy każdą komórkę jako żywą, z prawdopodobieństwem 20%.

Najważniejszym elementem algorytmu będzie proces wykonywania ewolucji. Składa się on z dwóch etapów. Pierwszy to policzenie żywych sąsiadów dla każdej komórki na planszy. Drugi polega na określeniu, które z komórek będą żywe, a które martwe w wyniku ewolucji. Ewolucja będzie przebiegała zgodnie z zasadami Gry w życie. Przypomnijmy je:

  • martwa komórka, która ma dokładnie trzech żywych sąsiadów, staje się żywa;

  • żywa komórka umiera, jeśli ma mniej niż dwóch albo więcej niż trzech żywych sąsiadów;

  • pozostałe komórki pozostają bez zmian.

Sąsiadami danej komórki są wszystkie komórki przylegające do niej bokami i rogami.

Przejdźmy zatem do właściwej implementacji Gry w życie. Oto pełen kod źródłowy programu:

Linia 1. import java kropka io kropka OutputStreamWriter średnik. Linia 2. import java kropka io kropka PrintWriter średnik. Linia 3. import java kropka nio kropka charset kropka StandardCharsets średnik. Linia 4. import java kropka util kropka Random średnik. Linia 6. public class GraWZycie otwórz nawias klamrowy. Linia 8. private boolean otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy siatka średnik. Linia 9. private int otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy ileSasiadow średnik. Linia 10. private int rozmiarSiatki średnik. Linia 11. private final boolean ZYWA znak równości true średnik. Linia 12. private final boolean MARTWA znak równości false średnik. Linia 13. private final Random generator średnik. Linia 15. public GraWZycie otwórz nawias okrągły int rozmiar zamknij nawias okrągły otwórz nawias klamrowy. Linia 16. rozmiarSiatki znak równości rozmiar średnik. Linia 17. siatka znak równości new boolean otwórz nawias kwadratowy rozmiarSiatki zamknij nawias kwadratowy otwórz nawias kwadratowy rozmiarSiatki zamknij nawias kwadratowy średnik. Linia 18. ileSasiadow znak równości new int otwórz nawias kwadratowy rozmiarSiatki zamknij nawias kwadratowy otwórz nawias kwadratowy rozmiarSiatki zamknij nawias kwadratowy średnik. Linia 19. generator znak równości new Random otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 20. inicjalizujSiatke otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 21. zamknij nawias klamrowy. Linia 23. private void inicjalizujSiatke otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 24. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny rozmiarSiatki średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 25. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny rozmiarSiatki średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 26. int n znak równości generator kropka nextInt otwórz nawias okrągły 5 zamknij nawias okrągły średnik. Linia 28. if otwórz nawias okrągły n znak równości znak równości 0 zamknij nawias okrągły. Linia 29. siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości ZYWA średnik. Linia 30. else. Linia 31. siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości MARTWA średnik. Linia 32. zamknij nawias klamrowy. Linia 33. zamknij nawias klamrowy. Linia 34. zamknij nawias klamrowy. Linia 36. private int policzZywychSasiadow otwórz nawias okrągły int y przecinek int x zamknij nawias okrągły otwórz nawias klamrowy. Linia 37. int ile znak równości 0 średnik. Linia 39. for otwórz nawias okrągły int i znak równości y minus 1 średnik i otwórz nawias ostrokątny znak równości y plus 1 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 40. for otwórz nawias okrągły int j znak równości x minus 1 średnik j otwórz nawias ostrokątny znak równości x plus 1 średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 41. if otwórz nawias okrągły i zamknij nawias ostrokątny znak równości 0 ampersant ampersant j zamknij nawias ostrokątny znak równości 0 ampersant ampersant i otwórz nawias ostrokątny rozmiarSiatki ampersant ampersant j otwórz nawias ostrokątny rozmiarSiatki zamknij nawias okrągły otwórz nawias klamrowy. Linia 42. if otwórz nawias okrągły siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości ZYWA zamknij nawias okrągły otwórz nawias klamrowy. Linia 43. ile plus plus średnik. Linia 44. zamknij nawias klamrowy. Linia 45. zamknij nawias klamrowy. Linia 46. zamknij nawias klamrowy. Linia 47. zamknij nawias klamrowy. Linia 50. if otwórz nawias okrągły siatka otwórz nawias kwadratowy y zamknij nawias kwadratowy otwórz nawias kwadratowy x zamknij nawias kwadratowy znak równości znak równości ZYWA zamknij nawias okrągły. Linia 51. ile minus minus średnik. Linia 53. return ile średnik. Linia 54. zamknij nawias klamrowy. Linia 56. public void ewolucja otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 57. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny rozmiarSiatki średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 58. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny rozmiarSiatki średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 59. ileSasiadow otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości policzZywychSasiadow otwórz nawias okrągły i przecinek j zamknij nawias okrągły średnik. Linia 60. zamknij nawias klamrowy. Linia 61. zamknij nawias klamrowy. Linia 63. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny rozmiarSiatki średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 64. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny rozmiarSiatki średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 65. if otwórz nawias okrągły siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości MARTWA ampersant ampersant ileSasiadow otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości 3 zamknij nawias okrągły otwórz nawias klamrowy. Linia 66. siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości ZYWA średnik. Linia 68. zamknij nawias klamrowy else if otwórz nawias okrągły siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości ZYWA zamknij nawias okrągły otwórz nawias klamrowy. Linia 69. if otwórz nawias okrągły ileSasiadow otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy otwórz nawias ostrokątny 2 kreska pionowa kreska pionowa ileSasiadow otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias ostrokątny 3 zamknij nawias okrągły otwórz nawias klamrowy. Linia 70. siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości MARTWA średnik. Linia 71. zamknij nawias klamrowy. Linia 72. zamknij nawias klamrowy. Linia 73. zamknij nawias klamrowy. Linia 74. zamknij nawias klamrowy. Linia 75. zamknij nawias klamrowy. Linia 77. public void wypiszSiatke otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 78. PrintWriter printWriter znak równości new PrintWriter otwórz nawias okrągły new OutputStreamWriter otwórz nawias okrągły System kropka out przecinek StandardCharsets kropka UTF podkreślnik 8 zamknij nawias okrągły przecinek true zamknij nawias okrągły średnik. Linia 79. char zywa znak równości apostrof lewy ukośnik u25a0 apostrof średnik. Linia 80. char martwa znak równości apostrof lewy ukośnik u25a1 apostrof średnik. Linia 82. printWriter kropka println otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 84. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny rozmiarSiatki średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 85. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny rozmiarSiatki średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 86. if otwórz nawias okrągły siatka otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości ZYWA zamknij nawias okrągły. Linia 87. printWriter kropka print otwórz nawias okrągły zywa zamknij nawias okrągły średnik. Linia 88. else. Linia 89. printWriter kropka print otwórz nawias okrągły martwa zamknij nawias okrągły średnik. Linia 90. zamknij nawias klamrowy. Linia 92. printWriter kropka print otwórz nawias okrągły apostrof lewy ukośnik n apostrof zamknij nawias okrągły średnik. Linia 93. printWriter kropka flush otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 94. zamknij nawias klamrowy. Linia 95. zamknij nawias klamrowy. Linia 97. public static void czekaj otwórz nawias okrągły int ms zamknij nawias okrągły otwórz nawias klamrowy. Linia 98. try otwórz nawias klamrowy. Linia 99. Thread kropka sleep otwórz nawias okrągły ms zamknij nawias okrągły średnik. Linia 100. zamknij nawias klamrowy catch otwórz nawias okrągły InterruptedException ex zamknij nawias okrągły otwórz nawias klamrowy. Linia 101. Thread kropka currentThread otwórz nawias okrągły zamknij nawias okrągły kropka interrupt otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 102. zamknij nawias klamrowy. Linia 103. zamknij nawias klamrowy. Linia 105. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 106. GraWZycie gra znak równości new GraWZycie otwórz nawias okrągły 10 zamknij nawias okrągły średnik. Linia 108. while otwórz nawias okrągły true zamknij nawias okrągły otwórz nawias klamrowy. Linia 109. gra kropka wypiszSiatke otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 110. gra kropka ewolucja otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 111. czekaj otwórz nawias okrągły 500 zamknij nawias okrągły średnik. Linia 112. zamknij nawias klamrowy. Linia 113. zamknij nawias klamrowy. Linia 114. zamknij nawias klamrowy.
Ważne!

Powyższy kod został uruchomiony i sprawdzony w środowisku Eclipse. Jeśli używany przez ciebie kompilator ma problem z wyświetlaniem kwadratów, możesz zamienić oznaczenie żywych i martwych komórek:

Linia 1. char zywa znak równości apostrof X apostrof średnik. Linia 2. char martwa znak równości apostrof minus apostrof średnik.

W celu zakończenia działania programu wciskamy skrót klawiszowy Ctrl + C.

Ciekawostka

Dodatkowo, by spowolnić program, możemy do kodu dodać metodę czekaj(). Jako argument przyjmuje ona liczbę milisekund, określającą, na jak długo program powinien się zatrzymać. Jej implementacja jest następująca:

Linia 1. public static void czekaj otwórz nawias okrągły int ms zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. try otwórz nawias klamrowy. Linia 3. Thread kropka sleep otwórz nawias okrągły ms zamknij nawias okrągły średnik. Linia 4. zamknij nawias klamrowy catch otwórz nawias okrągły InterruptedException ex zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. Thread kropka currentThread otwórz nawias okrągły zamknij nawias okrągły kropka interrupt otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 6. zamknij nawias klamrowy. Linia 7. zamknij nawias klamrowy.

Do napisania tej metody użyliśmy Thread.sleep(). Musimy również obsłużyć wyjątek InterruptedException, który pojawia się w momencie, w którym program zostanie przerwany w trakcie oczekiwania. Do tego celu użyliśmy bloku try‑catch.

Blok ten wprowadza obsługę wyjątków. Nie jest jednak konieczny do działania programu, więc nie poświęcimy mu więcej miejsca.

Słownik

klasa
klasa

rodzaj szablonu (wzorca) opisującego zbiór zmiennych oraz funkcji służących do ich przetwarzania; korzystając z klasy można tworzyć obiekty, będące rozbudowanymi odpowiednikami zmiennych; można powiedzieć, że obiekt jest zmienną typu klasa

konstruktor
konstruktor

specjalna funkcja, metoda klasy, której wywołanie nastąpi przy inicjalizacji obiektu danej klasy

liczba pseudolosowa
liczba pseudolosowa

liczba wygenerowana za pomocą generatora pseudolosowego; ciąg liczb przez niego wygenerowanych wydaje się losowy dla obserwatora

obiekt
obiekt

zmienna typu klasa; pojedyncze wywołanie (instancja) klasy

Swing
Swing

biblioteka graficzna używana w języku programowania Java; jest rozwinięciem biblioteki AWT; niezależna od platformy systemu, zapewnia dostęp do zaawansowanych komponentów okna aplikacji