• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gra w życie C++ OOP

Object Storage Arubacloud
+2 głosów
2,006 wizyt
pytanie zadane 30 sierpnia 2016 w C i C++ przez Macek Kolo Mądrala (5,480 p.)
Piszę sobie obiektowo grę w życie i mam mały problem. Odnośnie sprawdzania czy komórka jest żywa czy martwa. W klasie mam licznik który mówi ile jest sąsiadów i usuwa jeśli za mało, lub za dużo. Ale nie wiem jak optymalnie sprawdzać, czy coś jest żywe, czy nie. Przechodzić po całej planszy? Ale co w wypadku kiedy plansza jest ogromna? Jak można takie sprawdzanie rozwiązać, przy założeniu, że punkt (0,0) jest w lewym górnym rogu ekranu?

3 odpowiedzi

0 głosów
odpowiedź 30 sierpnia 2016 przez niezalogowany
obiekty trzymaj w tablicy i sprawdzaj poprzez dodawanie zmiennych bool (żywa lub martwa) ich ilość. Np. int hv=tab[i-1][j] + ...+.... itd
komentarz 31 sierpnia 2016 przez Macek Kolo Mądrala (5,480 p.)
no, ale i tak muszę po całej tablicy iterować :(
0 głosów
odpowiedź 30 sierpnia 2016 przez draghan VIP (106,230 p.)

Ale co w wypadku kiedy plansza jest ogromna?

W tej grze plansza ma nieograniczony wymiar. :)

Ale nie wiem jak optymalnie sprawdzać, czy coś jest żywe, czy nie. Przechodzić po całej planszy?

Jeśli nie chcesz pominąć żadnej komórki, to wypadałoby sprawdzić każdą z nich. ;) Ale jeśli każda komórka posiada informacje na temat tego, ilu jej sąsiadów żyje, to liczbę sprawdzanych komórek możesz ograniczyć. Zakładając, że każda komórka posiada informacje o swoich ośmiu sąsiadach, możesz poruszać się po planszy w taki sposób (powiedzmy, że poniższy obrazek pokazuje całą planszę):

Pola na czerwono to jest obszar, który nie jest wielokrotnością kwadratu 3x3 a też wymaga sprawdzenia - je będziesz musiał sprawdzić 'pole po polu', chyba że uogólnisz swój algorytm skakania po planszy na takie sytuacje, w których obszar sprawdzania nie jest równy dziewięciu polom i jednocześnie nie będzie produkował fałszywych wyników ze względu na zazębianie obszarów.

komentarz 31 sierpnia 2016 przez Macek Kolo Mądrala (5,480 p.)
Użyłem skrótu myślowego, na kompie nie zrobisz nieskończonej planszy.

To ja już mniej więcej to robię. Problem jest(był) bo moja plansza w lewym górnym rogu ma (0,0). Więc zrobiłem -1 i przy pętlach też sobie jeden odejmuje od koordynatów(w tym wypadku (0,0)). I jak pisałem, myślałem, że mogę się ograniczyć (np. tylko robić warunki dla pól w obrębie danego pola).
komentarz 1 września 2016 przez draghan VIP (106,230 p.)
Chyba nie rozumiem. Dlaczego koodrynat (0,0) jest problemem?
0 głosów
odpowiedź 1 września 2016 przez plkpiotr Stary wyjadacz (12,420 p.)

Kiedyś gdy pisałem grę w życie, to rozpatrywałem 9 sytuacji, tj. narożniki, boki przy krawędzi i wnętrze, nie ukrywam było tam sporo if'ów. Możesz jednak "poszerzyć" sobie granicę planszy, tzn. dodać obramowanie, które w domyśle będzie martwymi komórkami, a którego nie musisz wyświetlać ;)

Pamiętaj, że musisz zapamiętywać stan tablicy podczas sprawdzania, to znaczy, że nie możesz jednocześnie zmieniać stanu komórek podczas liczenia sąsiadów, tylko najpierw od początku do końca przejść i przeliczyć sąsiadów, zapisać nowy stan komórek i dopiero wtedy przenieść do  informacje do pierwotnej tablicy.

Wartości logiczne true i false będą w porządku do określenia żywotności komórek.

Powodzenia! :)

Podobne pytania

+2 głosów
2 odpowiedzi 2,339 wizyt
pytanie zadane 12 czerwca 2018 w Inne języki przez lucelka Początkujący (260 p.)
0 głosów
0 odpowiedzi 1,046 wizyt
0 głosów
1 odpowiedź 2,174 wizyt
pytanie zadane 30 listopada 2016 w C i C++ przez Krystek102 Bywalec (2,440 p.)

92,548 zapytań

141,390 odpowiedzi

319,509 komentarzy

61,932 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...