Układanka – prosta gra

Pokarze dzisiaj jak zrobić bardzo prostą grę, nazywam ją układanką. Nie jest to gra mojego pomysłu ale gdy ją zobaczyłem, stwierdziłem, że jest prosta i można by wrzucić ją na bloga. Gra do przetestowania dostępna jest pod adresem:

ukladanka_exe

Gotowy projekt (Ready project to download) => ukladanka_visualmonsters-cba-pl

Tylko kod użyty w projekcie (Only code used in project) => ukladanka

Gra polega na takim układaniu elementów w kształcie literki 'L’ aby kolory z niej zbudowane sąsiadowały ze sobą. Kolory wtedy znikają, a pojedyncze kolory niesąsiadujące z takimi samymi kolorami zostają. Gra kończy się w momencie, gdy nie ma miejsca na ułożenie nowych elementów. Za każdy usunięty kolor gracz dostaje jeden punkt.

Zaczynamy od dodania elementów tak jak na obrazku:

ukladanka1

Rodzaj elementu Nazwa elementu ustawienia
Form Ukladanka Name: Ukladanka
Text: Układanka
Size: 342; 513
Panel PanelWyboru Name: Panel_wyboru
Size: 303; 169
Location: 10; 12
BackColor: White
Panel Panel_glowny Name: Panel_glowny
Size: 200; 100
Location: 12; 201
BackColor: White
Panel Elementy1 Name: Panel_glowny
Size: 115; 115
Location: 27; 13
BackColor: Transparent
BorderStyle: FixedSingle
Panel Elementy2 Name: Panel_glowny
Size: 115; 115
Location: 160; 13
BackColor: Transparent
BorderStyle: FixedSingle
Panel Pan_wew1 Name: Pan_wew1
Size: 50; 50
Location: 35; 20
BackColor: Transparent
BorderStyle: None
Panel Pan_wew2 Name: Pan_wew2
Size: 50; 50
Location: 85; 20
BackColor: Transparent
BorderStyle: None
Panel Pan_wew3 Name: Pan_wew3
Size: 50; 50
Location: 35; 70
BackColor: Transparent
BorderStyle: None
Panel Pan_wew4 Name: Pan_wew4
Size: 50; 50
Location: 85; 70
BackColor: Transparent
BorderStyle: None
Panel Pan_wew5 Name: Pan_wew5
Size: 50; 50
Location: 168; 20
BackColor: Transparent
BorderStyle: None
Panel Pan_wew6 Name: Pan_wew6
Size: 50; 50
Location: 218; 20
BackColor: Transparent
BorderStyle: None
Panel Pan_wew7 Name: Pan_wew7
Size: 50; 50
Location: 168; 70
BackColor: Transparent
BorderStyle: None
Panel Pan_wew8 Name: Pan_wew8
Size: 50; 50
Location: 218; 70
BackColor: Transparent
BorderStyle: None
label Label1 Name: Label1
Text: Points:
Location: 18; 140
Label Label_Punkty Name: Label_Punkty
Text: 0
Location: 68; 140

Zaczniemy od załadowania formy, gra rozpoczyna się w momencie załadowania formy, nie ma żadnych timerów, więc jeśli ktoś będzie chciał grę udoskonalić, na pewno sobie z tym poradzi po zrozumieniu mechaniki, konstrukcji gry. Tak więc dodajemy zmienne i suba Form_Load, ta funkcja będą generować główną planszę gry, wielkość planszy określamy w opcji 'wielkosc’, jej zmiana spowoduje wyświetlenie planszy o wymiarach 'wielkosc’x’wielkosc’ (w tym wypadku 4×4):

Kod widoczny powyżej ma za zadanie utworzyć główną planszę gry w panelu „Panel_glowny”, dodać owe elementy do poszczególnych list (ListaPaneliTla i ListaLokalizacji), aby można było w trakcie działania programu swobodnie odwoływać się do tych elementów, te przechowywane są w listach w formie Tupli (jest to pewnego rodzaju zmienna mogące przechowywać kilka, różnego rodzaju zmiennych). Nasza forma wygląda chwilowo goło, ale niedługo się to zmieni:
ukladanka2Mamy już główną planszę gry, teraz dodamy sobie jakieś elementy do wyświetlenia na planszy. Ten etap polega na wyzerowaniu elementów wyświetlających wybrany element, jego losowym doborze przy użyciu opcji random i wyświetleniu go na panelu „elementy1” i „elementy2”. Trzeba również umieścić ograniczenie które nie pozwoli nam wyświetlić dwukrotnie tego samego koloru, gdyż po ułożeniu kolory te zostaną wyzerowane.

Musimy teraz odblokować dwa elementy z naszego Form_Load:

Efekt po uruchomieniu programu będzie taki jak na obrazku poniżej.

ukladanka1

Sercem naszego programu będzie funkcja umożliwiająca umieszczanie wyświetlanych elementów w panelu „elementy1” na planszy gry (Panel_glowny). Umożliwia to funkcja zamrozona w Form_load która do każdego generowanego kwadracika dodaje możliwość umieszczenia owych elementów na planszy. Odblokuj teraz tę opcję w form_load:

Teraz każde kliknięcie małego kwadracika przekieruje nas na funkcję „pan_Click”. Funkcja ta na początku pobiera informacje o lokalizacji klikniętego kwadracika, szuka go w „ListaLokalizacji” po nazwie (każdy kwadracik ma unikatową nazwę) i pobiera z utworzonego wcześniej Tupla jego lokalizację „X” i „Y”. Następnie przy użyciu funkcji „sprawdzCzyMozna” sprawdza, czy można położyć w określonym miejscu nasze kwadraty. Jeśli można, nasza funkcja zwróci „True” i funkcja ułożenia będzie kontynuowana, jeśli jakieś kwadraty ze sobą koligują, funkcja zwróci „False” uniemożliwiając kontynuacje programu:

Funkcja sprawdza wszystkie możliwości na piechotę w liście zawierającej panele głównej planszy (listaPaneliTla), pomijając kwadraty z panelu „elementy1” które zawierają kolorTla. (w tym przypadku puste pola). Sprawdza, czy każdy element z panelu „elementy1 ” w miejscu ułożenia na planszy ma pod sobą kolorTla. Jeśli tak nie jest i pod elementem znajduje się inny kolor, funkcja zostaje przerywana i zwracana wartość „False”

ukladanka4

Program wie teraz, czy w danym punkcie można ułożyć nasze elementy, czy też nie. Teraz przyszedł czas na wyświetlenie ułożonego elementu na planszy. Zrobi to funkcja:.

która należy odblokować. Kolorowanie, nie jest trudne i bazuje na poprzedniej pętli. Na piechotę poprzez dodanie wartości 1 do lokalizacji kolorujemy kwadraty z listy ListaPaneliTla:

Efekt:

ukladanka5

Mimo iż nie zrobiłem funkcji „przesun()” następną, odblokujemy teraz właśnie ją.

Przesuwa ona elementy z panelu „elementy2” na panel „elementy1” w momencie ułożenia elementów z tego pierwszego panelu. Wgląd w nadchodzące elementy pozwala graczowi na opracowanie strategi gry. Odblokowujemy również funkcję wyboru nowego elementu dla panelu „elementy2”.

Efekt przesunięcia gotowy:

ukladanka6

Zajmiemy się teraz opcją zakończenia gry.

Opcja ta na pierwszy rzut oka może wydawać się skomplikowana, ale wcale taka nie jest i tak jak poprzednie funkcje, tak i ta na piechotę sprawdza wszystkie możliwe opcje i zapisuje je w liście „pierwszalistabool” w tym wypadku mamy tylko 16 możliwości kliknięcia więc nasza pętla będzie sprawdzała 16 możliwości po 3 (gdyż nasze elementy składają się z 3 kolorowych kwadratów):

Oczywiście moglibyśmy skorzystać z wymienionej wcześniej funkcji „sprawdzCzyMozna” ale tak jest chyba czytelniej. Efekt funkcji przedstawiony jest na obrazku:

ukladanka7

Pozostał już ostatni element do rozwikłania, czyli znikanie kwadratów w momencie pojawienia się obok elementów takiego samego koloru. Odblokowujemy opcje:

Tutaj tak jak poprzednio, program sprawdza na piechotę wszystkie lokalizacje, czyli sprawdzi wszystkie panele na czerwono:

ukladanka8

 

Zrobi to poprzez sprawdzenie każdego ułożonego kwadratu. Najpierw sprawdzi możliwości, zaczynając od (x-1,y) do (x+1,y), czyli sprawdzi elementy w pionie, a potem w poziomie (x,y+1) do (x,y-1). Służy do tego funkcja „sp”. Następnie, jeśli znajdzie elementy o takim samym kolorze w tym wybranym obszarze, doda je do listy „listaDoWyzerowania” na końcu nadaje tym elementom tło równe „kolorTla”

Na koniec dodajemy pętle, która przydziela jeden punkt za każdy wyzerowany kwadracik. Jest ona konieczna, ponieważ w toku działania pętli sprawdzającej kolory, kwadraty mogą być dodawane dwukrotnie, widoczne jest to w momencie wstawiania naszej formacji w taki sposób, że pusty element wypełniany jest jakimś kolorem:

ukladanka9

Potraktuje on wtedy taki element jako swój, co sprawi, że jeśli jest takiego samego koloru, jak element po jego prawej nastąpi zdublowanie tych elementów na liście (listaDoWyzerowania). NIe jest to tak naprawdę problem, ponieważ jeśli element zostanie wyzerowany (nadany zostanie mu kolorTla) to ponowne jego wyzerowanie nic nie zmieni. Jeśli jednak chcemy dodawać tylko jeden punkt za wyzerowanie każdego kwadratu, należy taką listę uporządkować. Ja stworzyłem dodatkową listę, do której dodaje tylko nowe elementy, pomijając elementy już się w niej znajdujące:

 

No i to by było na tyle 🙂 jak by były jakieś pytania to proszę pytać :P.

 

 

Permalink do tego artykułu: https://visualmonsters.cba.pl/ukladanka-prosta-gra/

Dodaj komentarz

Twój adres email nie będzie publikowany.