Gra w kropki

Gra w kropki jest kolejną znaną ze szkoły grą, którą sobie stworzymy. W grze chodzi o to, aby okrążyć kropki przeciwnika. Sam grałem w liceum w kropki dość często, głównie na religii :P. Mam duży sentyment do tej gry więc kiedy nauczyłem się programować, bardzo chciałem taką grę zrobić. Po kilku nieudanych próbach trochę się poddałem, ale powróciłem do projektu i dokończyłem go. Forma, którą zademonstruje tutaj w tutorialu, jest dosyć prosta:

Kropki1

 

 

Rodzaj elementu Nazwa elementu Ustawienia
Form Form1 Name: Form1
Text: Kropko mania
Size: 840; 663
Panel Panel_glowny Name: Panel_glowny
Size: 800; 600
Location: 12;12
BackColor: White
Anchor: Top, Bottom, Left, Right

 

 

Istnieje także program do pobrania mojego autorstwa, w którym można pograć ze znajomym poprzez sieć LAN, jak ktoś potrafi przekierować porty to również przez internet, przed monitorem z kolegą lub samemu z komputerem:

iconaDoKropek

 

 

Do pobrania tutaj: KropkoMania 1.4

 

 

 

W tym tutorialu gra zacznie się w momencie uruchomienia programu, nie ma co kombinować i budować niepotrzebnych przycisków i elementów upiększających, które tylko przysłonią i zamglą główny silnik gry. Nasza gra będzie wyglądać tak jak na gifie poniżej:

Każdy, kto zrozumie, na czym polega sposób okrążania kropek, będzie umiał dodać sobie dodatkowe elementy. Tworzymy Form_Load:

Po uruchomieniu programu naszym oczom powinna pokazać się, gotowa do kropkowania strona, można się pokusić o taką jej zmianę, aby bardziej przypominała stronę z zeszytu. Ważnym elementem, na który powinniśmy zwrócić uwagę, jest wystawanie naszych paneli poza obszar kartki. Ponieważ podczas działania programu elementy będą rozpatrywane w pewien logiczny sposób, proces ten będzie wymagał sprawdzania elementów powyżej, poniżej, z lewej i z prawej strony kropki dodanie dodatkowych paneli, do których użytkownik nie będzie miał dostępu na początku, będzie wygodniejsze niż wprowadzanie ograniczeń. Jeśli pokolorujemy te obszary, będą one wyglądały tak jak na zdjęciu:

graWkropki1

Obszary te będą traktowane jako obszary puste, a ich zablokowanie upewni nas, że takie pozostaną. Jeśli czytaliście tutorial o grze w piłkarzyki, dodanie kropek nie powinno dla was stanowić problemu. Odblokowujemy:

Dodajemy kod:

Są już kropki. Jeden kolor, bo gracz nie zmienia statusu na false, ale będzie to robił w innej pętli. Ponieważ wymagają tego zasady gry. Kiedy gracz okrąży przeciwnika, może położyć dodatkową kropkę.

graWkropki2

Jeśli chodzi o łatwe rzeczy, to właśnie się skończyły. Teraz musicie ogarnąć, co mam na myśli, tłumacząc sposób działania kilku elementów. Najtrudniejszym elementem gry jest stwierdzenie, czy kropki są okrążone. Kiedy kropka jest jedna, to sytuacja jest oczywista. Należy sprawdzić na naszej liście czy ze wszystkich czterech stron nasza kropka jest otoczona przez kropki przeciwnika. Niestety jest to jedna z wielu sytuacji, które musimy rozpatrywać. Będę starał się tłumaczyć co i jak, jeśli ktoś nie zrozumie, to  może napisać mi maila lub zostawi komentarz. Odblokowujemy:

Kod tego elementu razem z pierwszą funkcją wygląda następująco:

Metody zawarte w funkcji powyżej zwracają nam listę elementów sąsiadujących z kropkami.

graWkropki3 elementyGraniczące

 

 

 

 

 

 

 

 

 

Na zdjęciach widzimy pokolorowane elementy sąsiadujące. Kolejnym etapem jest stworzenie pewnej szczególnej listy elementów. Ja nazywam tę listę „listą wolności”. Każde zderzenie się elementu lub grupy podczas sprawdzania okrążenia z tą listą będzie oznaczało, że kropka/ki nie są okrążone.

Funkcja ta zwraca nam listę która zawiera elementy:
graWkropki4

 

Jak widać na obrazku, do naszej listy niedodawane są elementy graniczące z kropką, ponieważ są one przechowywane w innej liście. Jak funkcja ta działa, gdy mamy więcej elementów? Otóż tak jak na obrazku poniżej:

elementyStrefoweipuste

Fioletowe i niebieskie elementy to efekt funkcji „freedomPoints”, a czerwone to efekt funkcji „brzegi”. Spójrzcie na elementy w środku, okrążone przez zielone kropki. Nie mają żadnego koloru. Są one bardzo ważne, ponieważ będą naszą drogą do wolności lub okrążenia. Zaczniemy teraz bardzo ważny rozdział, w którym pogrupujemy sobie nasze kropki. Ważnym elementem będzie tutaj odgrywał gracz, musimy wiedzieć który gracz właśnie postawił kropkę. Taką wiedzę daje nam zmienna „gracz”. W momencie, gdy stawiana jest kropka zielona, nie rozpatrujemy, tak jak by nam się mogło zdawać kropek zielonych a kropki czerwone. Ponieważ wszystkie kropki gracza czerwonego grupujemy i każdą grupę po kolei rozpatrujemy czy dąży do naszej „ListyWolności”, jeśli nie, oznacza to, że jest okrążona.
Wstępne grupowanie jest dosyć proste. Tworzymy grupy elementów sąsiadujących, dodajemy je do listy, a następnie te listy, które zawierają te same elementy, łączymy ze sobą:

 

graWkropki5

Zobaczmy jak wygląda kod metody:

Najprościej pokazuje to przykład czterech kropek:

graWkropki6

W takich listach nie musimy chwilowo przejmować się powtarzającymi się elementami. Taka segregacja, jak dodamy kolory, wygląda to następująco:

grupowanieKropek

Jak widzimy, grupa B nie zalicza chwilowo pustych pól do swojej grupy, dlatego też nie wiemy, czy nasza grupa B jest na pewno okrążona, czy też nie. Ostatni etap ma na celu dodanie pustych lub brzegowych pól do naszych grup i usunięcie z listy tych grup, które łączą się z naszą listą wolności.

Ta funkcja pozwoli nam na wyeliminowanie grup otwartych a zachowanie grup zamkniętych, lub opróżnienie grup jeśli wszystkie są otwarte.

okrązenie

Kiedy wiemy która grupa jest okrążona, należy ją okrążyć i wyeliminować z gry, aby przeciwnik nie mógł już ich użyć. Tę ostatnią rzecz możemy bardzo łatwo osiągnąć poprzez dodanie okrążonych elementów do „listaKropekGracz1” lub „listaKropekGracz2” wtedy dla jednego gracza kropki będą wyeliminowane a dla drugiego i tak są bezużyteczne, skoro są już okrążone. Na podstawie tych list możemy również później stwierdzić, który z graczy wygrał, jeśli będziemy mówić o wygranej w kontekście zajętego terenu. Przejdźmy do elementu rysowania linii, widząc obrazek powyżej, łatwo domyślić się jak to zrobimy. Sprawdzimy każdy okrążony element czy jest obok niego kropka przeciwnika i stworzymy sobie listę tych kropek. Następnie z listy takiej usuniemy powtarzające się elementy tak, aby zostały pojedyncze, sprawdzimy jakie elementy z nimi graniczą i stworzymy listę Tupli, która będzie przechowywać współrzędne linii.

Tak zmodyfikowany test okrążenia sprawdzi, co trzeba, dodaj go do swojego kodu. Teraz dodamy sobie ostatni element „rysujLinie”, która okrąży nasze punkty. wygląda ona tak:

Pętla ta wymaga trochę jeszcze pracy ale jej założenia są chyba jasne.

Gotowy projekt dostępny pod adresem: GraWkropki_visualmonsters.cba.pl

Sam kod programu do pobrania: Kropki visualmonsters.cba.pl

 

Permalink do tego artykułu: https://visualmonsters.cba.pl/gra-w-kropki/

Dodaj komentarz

Twój adres email nie będzie publikowany.