37311 str 5

37311 str 5



gra w statki

ta nie jest przypadkowa, gdyż dokładnie w takiej kolejności komputer wykonuje poszczególne czynności.

Rola wszystkich funkcji, które występują w naszym programie, została przedstawiona w Tabeli 1. Znajdują się tam nazwy funkcji i krótki opis ich zastosowania.

Wczytywanie plików graficznych

Jedną z pierwszych ważnych czynności, oprócz inicjaliza-cji poszczególnych podsystemów, jest wczytanie zasobów, z których korzysta nasza gra. Należą do nich pliki z grafiką oraz czcionka TrueType. Poszczególne pliki graficzne wczytuje się bardzo łatwo dzięki bibliotece SDL_Image, a wygląda to następująco:

SDL_Surface *sl=NULL; sl=IMG_Load("./data/l.png");

Funkcja IMG_Load rozpoznaje kilka formatów graficznych (m.in. jpeg, png, lbm, tif) i robi to samoczynnie bez naszego udziału - my podajemy tylko nazwę pliku.

Wszystkie czynności ładowania danych realizuje funkcja DataLoad. Wczytuje ona także czcionkę TTF, w identyczny sposób, jaki podałem na samym początku artykułu.

Wyświetlanie komunikatów

Wszystkie komunikaty, które są wyświetlane, np. o braku połączenia, korzystają z czcionki TTF. Kod źródłowy funkcji DisplayMesg zawiera Listing 2. Technika wyświetlania komunikatów jest identyczna z tą, którą zastosowaliśmy w naszym pierwszym programie „Hello World!”.

Rysowanie planszy

Funkcja DrawFieldlnGame potrafi wyświetlić planszę pod dowolnymi współrzędnymi, z czego korzysta kolejna funkcja DeployFleet, omówiona krótko w następnym akapicie. Bardzo ważne są wartości, które zawierają poszczególne pola planszy. Zawartość tablicy o typie TArea decyduje o tym, co zostanie wyświetlone na ekranie. Wartość zero oznacza puste pole, a wartość „-1” kod dla oznaczenia pudła. Wartości od jedności do czwórki to kody statków. Wartości od jedenastu do czternastu oznaczają, że statek bądź jego fragment został trafiony. Sama procedura rysowania jest raczej trywialna. Przy pomocy dwóch pętli przeglądamy zmienne area albo opp_area, reprezentujące plansze do gry naszą bądź przeciwnika. Odpowiednie fragmenty grafiki o wymiarach 30x30 są kopiowane za pomocą SDL_B1itSurface. Oczywiście wymiary poszczególnych kafli nie zmieniają się, lecz ich współrzędne, które wyznaczamy w następujący sposób:

dst_rect.x=_off_x+x*30; dst_rect.y=_off_y+y*30;

Rysunek 3. Diagram przepływu sterowania w grze

Zmienne x i y przyjmują kolejne wartości współrzędnych. Mnożenie tych wartości przez wielkość kafla powoduje, że przesuwamy się w prawo wzdłuż osi X oraz w dół wzdłuż osi Y. Podobne obliczenia będziemy przeprowadzać, gdy na podstawie współrzędnych kursora myszy będziemy chcieli odszukać wskazaną komórkę na planszy.

Rozmieszczanie statków

W naszej grze najważniejsza jest plansza, na której toczy się gra. Z jej obsługą związane są dwie funkcje: DeployFleet oraz GameLoop. Na samym początku gracz rozmieszcza poszczególne statki na planszy. Obsługa tego procesu znajduje się w funkcji DeployFleet. Statki są rozmieszczane za pomocą myszki. Dodatkowo spacją określamy, czy statek ma być umieszczony pionowo, czy poziomo. Proces może wydawać się dość skomplikowany, choć podstawą jest dość prosty wzór konwersji współrzędnych kursora myszy na współrzędne planszy:

www.linux.com.pl

61



Wyszukiwarka

Podobne podstrony:
Zdj?cie0613 spożycie pochodnych ropy naftowej spożycie detergentów Płukanie żołądka. Procedura ta ni
str 7 gra w statki komputera. Podanie wartości NULL oznacza, iż otwierane gniazdo będzie nasłuchiwać
scandjvutmp15701 303 dziennego światła, i daleko lepiej widzą podczas zmierzchu a nawet w nocy, gdy
48168 ScannedImage 23 A Myśl ta nie jest oczywiście w żadnym razie nowa i z pewnością nie była taką
IMGs11 ffijomocąjyogjjjfay światłmitwarHzalnyrh. Technologia ta nie jest zbyt popularna. gdvz wymaga
skanuj0069 4 Arteterapia Pracownia plastyczna • Scenariusz 15Odstępstwa Technika ta nie jest wskazan
DEMOTYWATORY RÓŻNE PACZKAP0 SZT FOTO (362) Ta nie jest o: www.demotowerowa znakowana ywatory.pl
Opłata ta nie jest związana z tym ile kosztowało wybudowanie danego urządzenia ale z tym czy wzrosła
ScannedImage 23 A Myśl ta nie jest oczywiście w żadnym razie nowa i z pewnością nie była taką w czas
005 o Pochodne jodooctanowe reagują przede wszystkim z grupami SH w białkach, ale reakcja ta nie je
sama jest rozkoszą", pisze Kant i podkreśla, że „rozkosz ta nie jest też pod żadnym względem
Klasa ta nie jest wewnętrznie spójna i jest mało prawdopodobne by kiedykolwiek się taka stała Pozycj
CCF20091007002 zamocowania oraz wymiary próbki typu Izoda. Próbka ta nie jest jednak objęta Polską
felietone-mentorCzy świat się wiele zmieni? Mam nadzieję, że pytanie „co z tą...” nie jest opatentow

więcej podobnych podstron