Programowanie Kart Graficznych i Konsol
Microsoft XNA: Tank 1990

Ostatnio aktualizowano 16 kwietnia 2008 r.

Oto przykładzik gry napisanej na platforme Microsoft XBox 360, do tego celu mieliśmy wykorzystać XNA Framework (gdy rozpoczynaliśmy projekt zalecano pobranie XNA w wersji 1.0 lub 1.1, tydzień lub dwa później okazało się, że wersja 2.0 działa bez zarzutu). Do pisania wykorzystaliśmy Visual Studio 2005 Express Edition -- C#.

Po poprawnym zainstalowaniu i skonfigurowaniu IDE, możemy brać sie odrazu do pisania aplikacji. Możemy zobaczyć także przykład działającej gry 3D dostarczonej razem z SDK. Samo XNA Framework jest dość czytelne, ma spore możliwości do których czasami ciężko się dogrzebać bo w wielu przykładach z XNA Creators Club nie są one wykorzystywane. Po lepszym poznaniu tej "technologii" przekonałem się, że wiele rzeczy bym zrobił inaczej lub skorzystał z gotowych klas a nie pisał swoje odnowa.

Najwięcej informacji znajdziecie tutaj i powinno być to pierwsze miejsce do którego zajrzycie, na pozostałe pytania odpowiedzi powinno udzielić google ;)

Słów kilka o samej grze jest to można powiedzieć przeniesienie klasycznej gry z Pegasusa Tank 1990 lub nazywanej Battle City. Poruszając się czołgiem nasze zadanie polega na pilnowaniu bazy, którą symbolizuje orzełek. W naszej implementacji wrogów jest do pokonania 10 na każdą planszę, map wykonanych jest 17, co pozwala na dość długą i miłą rozgrywkę również z drugą osobą ;)
Plansza składa się z różnych przeszkód terytorialnych, część z nich nie stanowi dla naszego czołgu żadnej przeszkody, inne pozwalają się zniszczyć, a jeszcze inne z kolei są zupełnie nieprzejezdne i kuloodporne. Abyśmy mieli pewne szanse z komputerem na planszy, co jakiś czas pojawiają się różne wspomagacze np. unieruchamiające wrogie czołgi, fortyfikujące naszą bazę itp.

Jakbym miał pisać to odnowa, wiem napewno, że zrobiłbym to już inaczej. Jak zacząłem pisać nie znałem nawet C# a tym bardziej możliwośći XNA, wiadomo kilka tygodni to za mało aby dobrze poznać jakąś bibliotekę lub SDK, mam nadzieję, że kod zamieszczony tutaj mimowszystko będzie przydatny ;)

Całość kodu można pobrać tutaj... W pacze są pliki projektu VS (solution i csproject), wszystkie klasy, tekstury i dźwięki

* Główna klasa silnika gry

Pakiet: Tank1990.Base.Management:
* Klasa zarządzająca czcionkami -- ładuje czcionki opisane pliami .spritefont
* Klasa zarządzająca wejściem -- pobiera dane co aktualnie wcisnął gracz
* Klasa zarządzająca ładowaniem map -- wczytuje plansze z pliku, tworzy klasę definiującą mapę
* Klasa zarządzająca ekranami gry -- przełącza gracza pomiędzy ekranami
* Klasa zarządzająca dzwiękiem -- pozwala na odtwarzanie muzyki
* Klasa zarządzająca zapisem i odczytem stanu gry
* Klasa zarządzająca teksturami -- przechowuje w jednym miejscu wszystkie tekstury
* Opakowywacz tekstury, aby łatwo móc zmienić wszystkie bez problemów w reszcie kodu gry

Pakiet: Tank1990.Base.Utils:
* Klasa narzędziowa -- wszystkie funkcje które nie znalazły nigdzie indziej miejsca ;)
* Klasa prostokąta -- reimplementacja klasy Rectangle ale wykorzystująca float-y

Pakiet: Tank1990.Base: * Klasa stanu rozgrywki -- jest serializowana do pliku i odtwarzana przy load

Pakiet: Tank1990.Drawable.MapItems:
* Abstrakcyjna klasa przeciwnika -- 4 rodzaje przeciwników dziedzią po niej
* Abstrakcyjna klasa mapy -- znajduje sie tutaj zasadnicza część logiki gry
* Abstrakcyjna klasa czołgu -- dziedziczą po niej zarówno gracze i przeciwnicy
* Klasa bazy gracza -- mało szczęśliwa nazwa
* Klasa ceglanej ściany
* Klasa bruku
* Klasa lasu -- las jest półprzezroczysty w przeciwieństwie do oryginału
* Klasa kamiennej ściany
* Klasa wody -- woda jest animowana jak w oryginale
* Klasa przeciwnika lepiej strzelającego
* Klasa przeciwnika szybciej poruszającego się
* Klasa przeciwnika z grubym pancerzem
* Klasa najsłabszego przeciwnika
* Klasa pocisku
* Klasa znacznika pozostałych wrogów na mapie
* Klasa mapy
* Podstawowy interfejs określający położenie

Pakiet: Tank1990.Drawable
* Główna klasa rysująca elemnt na ekranie -- jest taka w XNA Framework (sterowana zdarzeniami)
* Klasa tła ekranu rozgrywki
* Klasa tła ekranu tytułowego
* Klasa tła ekranu przejściowego oraz menu

Pakiet: Tank1990.Screens
* Klasa abstrakcyjnego ekranu -- dziedziczą po niej wszystkie klasy ekranow gry
* Klasa tytułowego ekranu gry
* Klasa przejściowego ekranu gry
* Klasa głównego ekranu gry -- tutaj rozgrywa sie cała walka ;)
* Klasa menu pojawiającego się po naciśniećiu ESC (Windows) lub Back (XBox)
* Klasa wiadomości przsyłanych pomiędzy ekranami
* Klasa wyświetlająca bieżący stan gry

Wiedza tylko wtedy jest wiedzą, kiedy zdobyta została wysiłkiem własnej myśli, a nie wyłącznie dzięki pamięci.

Poprawny XHTML 1.0! Poprawny styl CSS!hacker emblem open source emblem