This article is currently in the process of being translated into Polish (~98% done).
In this article series, we're building a complete Snake game from scratch. It makes sense to start with the Introduction and then work your way through the articles one by one, to get the full understanding.
If you want to get the complete source code for the game at once, to get started modifying and learning from it right now, consider downloading all our samples!
Wprowadzenia
Krótkie o tym artykule wprowadzającym: Będziemy implementować klasyczną grę Snake w WPF, a końcowy rezultat będzie wyglądał mniej więcej tak:
Tworzenie gier jest często powodem, dla którego wiele, szczególnie młodych osób ciągnie do programowania. Na początku pojawia się pytanie: jak zacząć, i czego do tego startu potrzebuję? Na pewno niezbędny będzie język programowania, jak C#, C++, lub jeden z wielu popularnych języków - jeśli jesteś biegły w swoim preferowanym języku, tak naprawdę nie potrzebujesz niczego innego - zacznij od początku, od dodawania pikseli na ekranie w konkretnych miejscach, a stąd już niedaleko do działającej gry.
Jednakże, większość osób twierdzi, że przydałaby jej się odrobina pomocy z tą niskopoziomowością. Ktoś słusznie zapyta: Dlaczego ręcznie rysować piksele na ekranie, skoro jest już biblioteka/framework który może zrobić to za nas, a my moglibyśmy w międzyczasie skupić się na tworzeniu fajnej gry? Dostępnych jest wiele frameworków mogących w tym pomóc i jednym z nich jest WPF.
Przyznasz, że WPF nie jest najbardziej oczywistą opcją kiedy chcesz tworzyć gry - jest to framework zdecydowanie bardziej skoncentrowany na tworzeniu interfejsów użytkownika dla aplikacji biznesowych. Jednak wciąż jest wiele elementów w frameworku WPFa które możesz użyć aby stworzyć grę a co równie istotne: dostajesz wszystkie narzędzia do kolorowania i kontrolowania okien w Windowsie.
Więc jeśli chcesz stworzyć prostą grę, WPF może być całkiem spoko opcją. A przynajmniej będzie dużą pomocą przy wszystkich podstawowych aspektach takich jak tworzenie okna programu, rysowanie prostego obszaru dla gry itd. Jeżeli chciałbyś dodać rzeczy typu zaawansowane grafiki 3D i szybko poruszające się obiekty, możesz potrzebować pomocy z innej biblioteki czy frameworka, ale da sobie spokojnie radę z prostą grą np. z klasyczną grą w węża!
SnakeWPF
Jako dowód mojego pomysłu, zdecydowałem się stworzyć WPF-ową wersję klasycznej gry w węża. Wykorzysta ona klasyczne okno WPF jako planszę, jak i klasyczne kontrolki do stworzenia rozgrywki. Przyczyną, dla którego wybrałem węża jest fakt, że jest łatwy do zaimplementowania (nie ma zbyt dużo logiki do zakodowania) i może być zaimplementowany z użyciem prostych kształtów takich jak kwadraty czy koła, które można łatwo wykorzystać w WPF. Ale też dlatego że jest to naprawdę fajna gra pomimo swojej prostoty!
Jeżeli nie znasz węża, mogę jedynie zakładać że nigdy nie miałeś telefonu od Nokii w późnych latach 90. / wczesnych lat 2000. Pierwsza wersja węża została napisana i przedstawienia wiele lat wcześniej, ale stał się on wielkim hitem po tym, jak Nokia zdecydowała się dołączyć własną wersję do wszystkich swoich telefonów.
Gameplay jest tak samo prosty jak i angażujący: Poruszasz wirtualnym wężem w jednym kierunku (lewo, prawo, góra, dół) w poszukiwaniu jedzenia (czasami jabłka). Kiedy twój wąż uderzy w jabłko, zjada go, rośnie a nowe jabłko pojawia się gdzieś na ekranie. Kiedy uderzysz w ścianę albo w swój własny ogon, gra się kończy i musisz zacząć od początku. Im więcej jabłek zjesz, tym większy wynik uzyskasz, ale też tym trudniej będzie ci nie uderzyć się we własny ogon.
Istnieje WIELE wariantów rozgrywki - dla przykładu, prędkość z jaką porusza się twój wąż będzie się zwiększać za każdym razem kiedy zjesz jabłko, robiąc grę coraz trudniejszą, ale nie wszystkie implementacje węża tak robią. Innym wariantem są ściany - niektóre wersje pozwalają przejść przez ściany na drugą stronę, podczas gdy w innych gra się kończy w momencie, kiedy uderzysz w ścianę.
W naszej wersji, ściany będą nieprzenikalne (wąż umrze, jeżeli w nie uderzy) a jego prędkość będzie zwiększała się wykładniczo z każdym zjedzonym jabłkiem, aż do określonego punktu.
Podsumowanie
Przez kilka następnych artykułów, będziemy implementować wersję klasycznej gry w węża z wykorzystaniem frameworka WPF. Zaczniemy od przygotowania planszy a na końcu będziemy mieli naszą pierwszą, w pełni działającą grę stworzoną w WPFie.
Zwróć uwagę na fakt że JEST to tutorial WPF, będziemy potrzebowali trochę więcej kodu w C# niż zwykle aby zaimplementować logikę gry itp. Spróbuję wyjaśnić większość z tego w miarę progresu, ale w razie gdybyś potrzebował(a) więcej wiedzy na temat C#, nie zapominaj że mamy fajny, pełny kurs C#