[tutotial][C#][XNA 4.0] 1 - podstawy framworka

Dla języka C# jednym z frameworków do tworzenia gier jest XNA w wersji aktualnej oznaczony numerkiem 4.0. Dzięki temu że fremwork ten tworzy microsoft posiada on kilka znaczących zalet:
- możliwość pisania aplikacji na Windows, Xbox i Windows phone
- dobra dokumentacja
- łatwa integracja z Microsoft Visual C#
Te rzeczy oraz prostota budowa aplikacji w XNA 4.0 sprawia że zaczęcie nauki programowania gier warto właśnie rozpocząć od tego rozwiązania. Chociaż jednym z problemów jaki może spotkać twórcę gry to brak zainstalowanego przez gracza framworka XNA Redistrubite.



A więc do rzeczy: żeby zacząć programować w XNA 4.0 będa nam potrzebne następujące programy:
- Microsoft Visual C# 2010 Express(ewentualnie inny, z tym że w tym tutorialu będziemy pracować właśnie na takim IDE)
- XNA 4.0 wersja dla developerów http://www.microsoft.com/download/en/details.aspx?id=23714(48mb)
- jakiś program do grafiki. Ja korzystam z Gimpa

Instalacja tych programów nie powinna nastręczać jakiś specjalnych problemów więc już możemy przejść do wdrażania się w tą technologię. Jeśli jednak miałeś jakieś kłopoty z instalacją warto poszukać wskazówek w internecie:)
Jeśli nie miałeś wcześniej styczności z językiem C# to zalecam zapoznanie się z składnią tego języka. Strony gdzie można zacząć naukę tego języka podałem w polecanych(na dole strony). Chwilę zaznajomić się z konsolą, później możecie wypróbować swoich sił w WinForm(opcjonalne) albo od razu przejść do projektów w  XNA.

Tworząc nowy projekt w VS możemy wybrać 2 rodzaje projektów XNA na Windowsa:
Windows Game - projekt w której piszemy kod naszej gry
Windows Game Library - projekt w którym możemy stworzyć biblioteki do naszego kodu w XNA. Dzięki temu możemy z nich korzystać także w innych projektach lub za pomocą nich zmieniać funkcje i parametry w naszej grze.

Gdy utworzymy projekt(mój będzie się nazywał WindowsGame6), w explolerze projektu będą widoczne dwa pliki .cs:
Program.cs - tym plikiem się na razie nie przejmujemy, uruchamia on nasz freamework
Game1.cs - jest to plik gdzie piszemy nasz główny kod

W miarę rozwoju naszego projektu będziemy mogli dodawać kod do innych plików *.cs i później z nich korzystać w naszym kodzie głównym.
Podczas tego tutorialu postaram się wam wytłumaczyć zasadę działania i programowania na podstawie tworzenia kopi gry Terraria(która zresztą też została wykonana w tym środowisku i jest świetnym podglądem możliwości tego środowiska). google i Terraria

Jeśli mamy już utworzony nasz nowy projekt, czas rozplanować schemat naszej gry. Najlepiej to zrobić na kartce i rozplanować hierarchie obiektów i klas oraz zależności między nimi. Oczywiście niektóre elementy mogą się zmienić podczas pisania kodu(ale to wynika raczej z tego że schemat był robiony dosyć szybko, bo jeśli ktoś ma dobry plan i ma wizje całej gry to po prostu tylko tworzy odpowiednie funkcje i nie musi się przejmować na bieżąco ich powiązaniami) my jednak będziemy pisać kod  zaczynając od podstaw więc i nie potrzebujemy takiego dokładnego schematu:) acz kol wiek proponuje zapoznać się chociaż z ogólna ideą takich planów gry i poćwiczyć wymyślając projekt swojej gry i przelaniu go na kartkę. Uważam też że nie ma co trzymać się sztywno jakiegoś schematu tylko tak układać swój plan żeby jak najlepiej z nim nam się współpracowało. Na przykład teraz nie znając dokładnej budowy frameworka i jego elementów trudno będzie nam stworzyć szczegółowy schemat działania naszej gry. Choć jeśli znamy typową budowę gier i zasady programowania będziemy mogli stworzyć dobry projekt ogólnej koncepcji naszej gry i w zależności od platformy na jakiej będziemy chcieli go programować dopisać szczegółową dokumentację. Właściwie to dlaczego tyle miejsca poświęciłem mowie o planowaniu gry? Ano dlatego że dobra dokumentacja to podstawa dobrego kodu. Jeśli zaczniesz pisać kod gry teraz, bez żadnego przygotowania to już po kilkusetnej linijce kodu lub n-dziesiątej funkcji możesz się zacząć gubić. Dołóż do tego jakąś przerwę w pisaniu aplikacji np. po to by ulepszyć inną albo poprawić i po tygodniu albo dwóch wracasz do dalszego kodzenia... i teraz zanim z marszu pisać dalej Ty musisz przypominać sobie to co wcześniej napisałem i po co to napisałeś:)

Dobra wracając do schematu naszej nowo tworzonej gry, przyjmijmy że całość naszej gry czyli mechanika, menu główne, dźwięk, animacja itp. itd. po prostu cały napisany przez nas kod nazywa się Aplikacja, jest ona nad hierarchią i wszystko inne jest pod nią. Niżej znajduję się Opcje oraz Silnik gry, gdzie Opcje to po prostu menu startowe naszej gry i wszystkie możliwe w nim opcje czyli odpowiada ona za:
- Inicjalizacje nowej gry
- Wczytanie istniejącej już gry
- Opcje gry,grafiki,sterowanie
- Wyjście z gry
Silnik gry to natomiast serce naszej gry, to tutaj odbywać się będzie nasz przygoda i to tutaj skupimy się głównie na kodzeniu. Oczywiście sam Silnik gry to pojęcie za ogólne żeby je tak zostawić dzieli się ono[w sensie ja je podzieliłem] jeszcze na:
-Świat - w naszej grze po rozpoczęciu procedury inicjalizacji silnika następuje zainicjializowanie Świata który będzie zawierał w sobie dane ułożenia planszy i obiektów na niej w tym: graczy, NPC, potworów, itemów. zawierać się w nim również będzie cała Fizyka(czytaj: mechanika) gry. Tutaj również jeszcze przed ukazaniem graczowi planszy zostaną wczytane i przetworzone dane wysłane z Opcje. Czyli jeśli tworzysz nową mapę to Opcje generują ją i wysyłają do Mapa, jeśli Wczytujesz grę to Opcje ją najpierw odczytują a potem przesyłają informacje do Silnika gry a ten formuje odpowiednio Świat i kolejny element Silnika gry:
- Rysowanie: tutaj znajdują się wszystkie funkcje odpowiedzialne za tworzenie tego co się będzie wyświetlać i jak się będzie wyświetlać, w skład tego zestawu wchodzi między innymi: Kamera, wszelkie Sprity(Textury 2D), animowanie i inne efekty graficzne(dzień/noc, światło od pochodni).
Ogólnie obrazując sytuacje: możemy Świat przyrównać do płaskiego akwarium w którym hodujemy mrówki, wszelkie zjawiska tam zachodzące odbywają się tam niezależnie od tego czy poświęcamy temu uwagę czy też zajmujemy się czym innym(np. robimy otwory na powietrze w górze naszego płaskiego akwarium). Natomiast Rysowanie możemy porównać to podglądania świata przez lupę, widzimy tylko to co pokazuje nam lupa i tylko tam gdzie jest lupa.

Myślę że na tą cześć tutoriala starczy, zwłaszcza że nie każdy zna podstawy C# i musi się wdrożyć, po za tym należałoby się jeszcze zaznajomić z tworzeniem takich schematów jak wyżej. Później może załączę do tego jakiś wizualny wygląd przedstawianego schematu.

No i zapraszam na kolejną część tutoriala w której zaznajomimy się z budową naszego głównego kodu.