Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00633 007690 11066049 na godz. na dobę w sumie
Tworzenie gier 2D i 3D w języku Turbo Pascal - książka
Tworzenie gier 2D i 3D w języku Turbo Pascal - książka
Autor: Liczba stron: 416
Wydawca: Helion Język publikacji: polski
ISBN: 83-7197-680-1 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> gry >> programowanie gier
Porównaj ceny (książka, ebook, audiobook).
Książka 'Tworzenie gier 2D i 3D w języku Turbo Pascal' Piotra Besty skierowana jest do szerokiego grona początkujących programistów, dopiero rozpoczynających swoją wielką przygodę z komputerem. Nie oznacza to, że z książki nie mogą skorzystać doskonale znające Turbo Pascala.

Każdy, kto kiedykolwiek grał w gry komputerowe, zapragnął z pewnością stworzyć własną, idealną grę. Dzięki tej książce osoby te będą mogły spełnić swoje marzenia w profesjonalny sposób.

Rozpoczynając czytanie książki nie musisz podsiać doświadczenia w pisaniu programów, wszystkiego dowiesz się, czytając kolejne rozdziały, a zgromadzona wiedza oraz doświadczenie pozwoli na szybkie rozpoczęcie samodzielnych prac nad dowolną grą. Książka w szczegółowy sposób wyjaśnia proces i sposoby wyświetlania grafiki w grach, tajemnice oraz sztuczki w nich zastosowane.

A po ukończeniu książki śmiało będziesz mógł przystąpić do tworzenia takich gier jak Settlers, Quake, Dune, StarCraft, Descent i im podobnych. Musisz jednak wykazać się niebywałą determinacją i poświęceniem -- i tego między innymi nauczy cię ta książka.
Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tworzenie gier 2D i 3D w jŒzyku Turbo Pascal Autor: Piotr Besta ISBN: 83-7197-680-1 Format: B5, stron: 414 Ksi„¿ka (cid:132)Tworzenie gier 2D i 3D w jŒzyku Turbo Pascal(cid:148) Piotra Besty skierowana jest do szerokiego grona pocz„tkuj„cych programist(cid:243)w, dopiero rozpoczynaj„cych swoj„ wielk„ przygodŒ z komputerem. Nie oznacza to, ¿e z ksi„¿ki nie mog„ skorzysta(cid:230) doskonale znaj„ce Turbo Pascala. Ka¿dy, kto kiedykolwiek gra‡ w gry komputerowe, zapragn„‡ z pewno(cid:156)ci„ stworzy(cid:230) w‡asn„, idealn„ grŒ. DziŒki tej ksi„¿ce osoby te bŒd„ mog‡y spe‡ni(cid:230) swoje marzenia w(cid:160) profesjonalny spos(cid:243)b. Rozpoczynaj„c czytanie ksi„¿ki nie musisz podsia(cid:230) do(cid:156)wiadczenia w pisaniu program(cid:243)w, wszystkiego dowiesz siŒ, czytaj„c kolejne rozdzia‡y, a zgromadzona wiedza oraz do(cid:156)wiadczenie pozwoli na szybkie rozpoczŒcie samodzielnych prac nad dowoln„ gr„. Ksi„¿ka w szczeg(cid:243)‡owy spos(cid:243)b wyja(cid:156)nia proces i sposoby wy(cid:156)wietlania grafiki w(cid:160) grach, tajemnice oraz sztuczki w nich zastosowane. Poznasz techniki wprawiania w ruch grafiki dwu- i tr(cid:243)jwymiarowej. Nauczysz siŒ tworzy(cid:230) grafikŒ spotykan„ w grach typu RTS i FPP. Poznasz podstawy szybkiego jŒzyka programowania, jakim jest Assembler. A po ukoæczeniu ksi„¿ki (cid:156)mia‡o bŒdziesz m(cid:243)g‡ przyst„pi(cid:230) do tworzenia takich gier jak Settlers, Quake, Dune, StarCraft, Descent i im podobnych. Musisz jednak wykaza(cid:230) siŒ niebywa‡„ determinacj„ i po(cid:156)wiŒceniem -- i tego miŒdzy innymi nauczy ciŒ ta ksi„¿ka. IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TRE(cid:140)CI SPIS TRE(cid:140)CI KATALOG KSI¥flEK KATALOG KSI¥flEK KATALOG ONLINE KATALOG ONLINE ZAM(cid:211)W DRUKOWANY KATALOG ZAM(cid:211)W DRUKOWANY KATALOG TW(cid:211)J KOSZYK TW(cid:211)J KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAM(cid:211)W INFORMACJE ZAM(cid:211)W INFORMACJE O NOWO(cid:140)CIACH O NOWO(cid:140)CIACH ZAM(cid:211)W CENNIK ZAM(cid:211)W CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥flEK ONLINE FRAGMENTY KSI¥flEK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Wstęp ...................................................z............................................7 Coś dla całkowicie niedoświadczonych ...................................................k...........................7 Rozdział 1. Grafika BGI a gry ...................................................z............................9 Organizacja ekranu...................................................k...................................................k........9 Inicjowanie modułu Graph i trybu graficznego ...................................................k.............10 Zakończenie pracy w trybie graficznym ...................................................k........................12 Powrót do trybu tekstowego bez deinstalacji sterownika .................................................13 Obsługa błędów...................................................k...................................................k...........14 Piksele ...................................................k...................................................k.................. .......18 Linie ...................................................k...................................................k.................... ........20 Procedury ...................................................k...................................................k....................22 Procedury z parametrem...................................................k.................................................24 Funkcje ...................................................k...................................................k........................26 Klawiatura ...................................................k...................................................k...................27 Prosta animacja ...................................................k...................................................k...........32 Wyświetlanie napisów w trybie graficznym ...................................................k..................39 Rekordy i tablice ...................................................k...................................................k.........44 Skalowanie ...................................................k...................................................k..................48 Ostatnie słowo o procedurach i funkcjach ...................................................k.....................53 Podsumowanie ...................................................k...................................................k............54 Rozdział 2. Systemy liczbowe...................................................z..........................55 System dziesiętny...................................................k...................................................k........55 System dwójkowy ...................................................k...................................................k.......56 System szesnastkowy ...................................................k...................................................k..57 System dwójkowy i szesnastkowy ...................................................k.................................58 Praca z zapisem dwójkowym i szesnastkowym ...................................................k.............59 Podsumowanie ...................................................k...................................................k............59 Rozdział 3. Asembler — najtrudniejszy język świata............................................61 Procesor...................................................k...................................................k.......................62 Pamięć ...................................................k...................................................k.........................66 Adres komórki pamięci ...................................................k..................................................68 Jak używać asemblera? ...................................................k..................................................71 Proste rozkazy ...................................................k...................................................k.............71 Adresowanie pamięci ...................................................k...................................................k..80 Stos ...................................................k...................................................k..................... .........85 Etykiety i skoki...................................................k...................................................k............89 Pętle...................................................k...................................................k.................... .........91 Porównywanie wartości ...................................................k.................................................93 4 Tworzenie gier 2D i 3D w języku Turbo Pascal Liczby ze znakiem...................................................k...................................................k.......94 Kopiowanie fragmentów pamięci ...................................................k..................................95 Wypełnianie fragmentów pamięci ...................................................k.................................99 Przerwania sprzętowe i programowe ...................................................k...........................100 Porty ...................................................k...................................................k.................... Podsumowanie ...................................................k...................................................k..........106 ......105 Rozdział 4. Nowe Światy...................................................z...............................107 Jak działają gry? ...................................................k...................................................k........107 Jak powstaje obraz?...................................................k...................................................k...111 Tryb 13h ...................................................k...................................................k....................114 Kolory.............................................k...................................................k..............................115 Ustawianie trybu graficznego 13h...................................................k................................119 Piksele ...................................................k...................................................k.................. .....121 Linie poziome...................................................k...................................................k............128 Linie pionowe...................................................k...................................................k............132 Wypełnianie ekranu jednym kolorem ...................................................k..........................136 Programowanie palety kolorów ...................................................k...................................138 Rotacja kolorów ...................................................k...................................................k........144 Obcinanie palety kolorów ...................................................k............................................147 Krawędź ekranu...................................................k...................................................k.........148 Magazynowanie procedur i funkcji...................................................k..............................150 Podsumowanie ...................................................k...................................................k..........159 Rozdział 5. Obrazy ...................................................z........................................161 Przetwarzanie plików ...................................................k...................................................k161 Format BMP...................................................k...................................................k..............165 Odczytywanie obrazu z pliku BMP ...................................................k.............................168 Dynamiczne przydzielanie pamięci ...................................................k.............................173 Zorganizowane odczytywanie obrazów ...................................................k.......................177 Uaktualnienie modułu GRAF_FX ...................................................k...............................181 Szybkie ładowanie palety kolorów ...................................................k..............................186 Zorganizowane wyświetlanie obrazów ...................................................k........................187 Przezroczyste kolory ...................................................k...................................................k.193 Bitmapy o jednakowej palecie kolorów ...................................................k.......................198 Skalowanie bitmap ...................................................k...................................................k....200 Ostatnia tajemnica stosu...................................................k...............................................204 Podsumowanie ...................................................k...................................................k..........205 Rozdział 6. Komunikacja z graczem i wyświetlanie tekstu.................................207 Klawiatura ...................................................k...................................................k.................207 Mysz ...................................................k...................................................k..........................214 Wyświetlanie tekstu ...................................................k...................................................k..217 Podsumowanie ...................................................k...................................................k..........223 Rozdział 7. Animacja ...................................................z....................................225 Prosta animacja ...................................................k...................................................k.........225 Drugi bufor wideo i likwidacja mrugania ekranu ...................................................k........229 Animacja wielu obiektów...................................................k.............................................237 Animacja mapy ...................................................k...................................................k.........243 Podsumowanie ...................................................k...................................................k..........250 Spis treści 5 Rozdział 8. Efekty specjalne i dźwięk ...................................................z............251 Wygaszanie ekranu ...................................................k...................................................k...251 Rozjaśnianie ekranu ...................................................k...................................................k..254 Topnienie ekranu...................................................k...................................................k.......256 Zalewanie ekranu cieczą ...................................................k..............................................257 Dźwięk ...................................................k...................................................k......................259 DMA — cichy transfer danych ...................................................k....................................262 Port 008h — port stanu ...................................................k..........................................264 Port 00Ah — port maski kanału ...................................................k............................265 Port 00Bh — port trybu ...................................................k.........................................265 Port 00Ch — port przerzutnika...................................................k..............................266 Format WAV...................................................k...................................................k.............267 Karta Sound Blaster ...................................................k...................................................k..269 Podsumowanie ...................................................k...................................................k..........279 Rozdział 9. Grafika 3D ...................................................z..................................281 Trójwymiarowy układ współrzędnych...................................................k.........................281 Wektory...................................................k...................................................k.....................282 Punkt ...................................................k...................................................k...................282 Oznaczanie i rozmiar wektorów ...................................................k............................283 Wzajemne położenie dwóch wektorów ...................................................k.................284 Długość wektora ...................................................k...................................................k.284 Dodawanie wektorów ...................................................k............................................285 Odejmowanie wektorów ...................................................k........................................285 Mnożenie wektora przez liczbę rzeczywistą...................................................k..........286 Iloczyn skalarny wektorów ...................................................k....................................287 Wektorowe mnożenie wektorów ...................................................k...........................288 Funkcje trygonometryczne sinus i cosinus...................................................k...................289 Nowe typy danych...................................................k...................................................k.....291 Transformacje 3D...................................................k...................................................k......294 Obrót wokół osi Y...................................................k..................................................294 Obrót wokół osi Z ...................................................k..................................................296 Obrót wokół osi X...................................................k..................................................298 Przesunięcie ...................................................k...................................................k........299 Skalowanie ...................................................k...................................................k..........301 Problemy z transformacjami ...................................................k..................................302 Tworzenie obrazu ...................................................k...................................................k......302 Kamera ...................................................k...................................................k................304 Płaszczyzna obcinania ...................................................k...........................................304 Skrót perspektywiczny...................................................k...........................................306 Rzutowanie punktu na płaszczyznę rzutowania ...................................................k....307 Usuwanie niewidocznych powierzchni...................................................k..................311 Metody wyświetlania obiektów 3D...................................................k..............................315 Metoda punktowa...................................................k...................................................k......315 Metoda siatkowa (druciana) ...................................................k.........................................326 Metoda jednokolorowych wypełnionych trójkątów i trójkątów cieniowanych płasko......345 Trójkąty z teksturą...................................................k...................................................k.....368 Korekcja perspektywy...................................................k..................................................390 Podsumowanie ...................................................k...................................................k..........409 Dodatek A ...................................................z...................................................z..411 Rozdział 6. W tym rozdziale omówimy dwa sposoby komunikowania się gier z graczem. Pierwszy sposób dotyczyć będzie klawiatury; poznamy jej działanie, nauczymy się odczytywać informację mówiącą o tym, który klawisz jest wciskany, a który zwalniany, w końcu napiszemy przykładowy program obsługujący klawiaturię. Drugi rodzaj komunikacji związany będzie z myszą; nauczymy się wyświetlać kursor myszy, odczytywać jego położenie i pobierać informacje o stanie przycisków myszy. Paragraf poświęcony myszy również zakończymy demonstracyjnym programem, w któ- rym wykorzystamy zdobytą wiedzę w praktyczny sposóbi. Osobną część rozdziału stanowi podrozdział poświęcony technikom wyświetlania tekstu w trybie 13h. Stworzymy własną czcionkę i nauczymy się ją stosować. Na koniec napiszemy wygodną procedurę wypisującą tekst, podobną itrochę do procedury 68/2. Bierzmy się do pracy! Klawiatura Klawiatura jest zaraz obok myszy jednym z najintensywniej wykorzystywanych urzą- dzeń dołączonych do komputera. Korzystamy z niej podczas tworzenia programów, prac domowych, ściąg i wielu innych tekstów. Nas jednak interesuje wyłącznie jej zasto- sowanie w grach komputerowych. Rysunek. 6.1 przedstawiia standardową klawiaturę. Rysunek 6.1. Standardowa klawiatura 208 Tworzenie gier 2D i 3D w języku Turbo Pascal Jako programiści gier chcemy mieć możliwość sprawdzenia, czy dany klawisz jest naciśnięty, nie naciśnięty czy może przytrzymany. Zacznijmy od zrozumienia sposobu działania klawiatury. Z klawiaturą połączony jest tzw. kontroler klawiatury (dokładniej jeden z układów scalonych: 8042, 8741 lub 8742). Możemy odnosić się do niego za pomocą dwóch portów: portu wyjściowego — 60h i portu sterującego — 64h. Są to porty dwukierunkowe, co oznacza, że możemy zarówno odczytywać z nich dane, jak i je do nich zapisywać. Odczytując wartość z portu 64h, otrzymujemy trochę informacji o stanie klawiatury. Oto opis bajtu pobranego z portu 64h. bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 bit 7 — błąd parzystości (wyłącznie w modelach PS/2): 1 = ostatni kod przesłano z błędem, 0 = ostatni kod przesłano bez błędu; bit 6 — czas oczekiwania na nadesłanie danych: 1 = przekroczony, 0 = w normie; bit 5 — stan portu wyjściowego klawiatury: 1 = port zawiera dane od jednostki dodatkowej (wyłączinie w PS/2), 0 = port zawiera dane od klawiatury; bit 4 — stan blokady klawiatury: 1 = klawiatura odblokowana, 0 = klawiatura zablokowana; bit 3 — zawartość przesyłanego bajtu: 1 = bajt rozkazowy wysłany przez port 64h, 0 = bajt danych wysłany przez port 60h; bit 2 — wynik przeprowadzenia autotestu klawiatury: 1 = test przebiegł bezbłędnie, 0 = błąd; bit 1 — stan portu 60h (zapis): 1 = dane przesyłane przez procesor znajdują się jeszcize w porcie, 0 = port 60h jest pusty; Rozdział 6.  Komunikacja z graczem i wylwietlanie tekstu 209 bit 0 — stan portu 60h (odczyt): 1 = dane przesyłane przez kontroler klawiatury znajdiują się jeszcze w porcie 60h, 0 = port 60h jest pusty. Wymieniona przedtem dodatkowa jednostka oznacza mysz, która w systemach PS/2 jest obsługiwana przez kontroler klawiatury. Przeanalizujmy krok po kroku zdarzenie związane z naciśnięciem i zwalnianiem kla- wisza. Klawiatura posługuje się tzw. kodami skaningowymi klawiszy. Różnią się one od kodów ASCII numeracją, na przykład w kodzie ASCII klawiszowi a odpowiada liczba 97, natomiast w kodzie skaningowym odpowiada mu liczba 30. Kod skaningowy w odróżnieniu od ASCII nie wyróżnia wielkich i małych liter, wielkość liter jest roz- strzygana w oparciu o stan klawiszy Caps Lock i Shift. W momencie naciśnięcia klawisza do kontrolera klawiatury trafia jego kod skanin- gowy, po czym zostaje wywołane przerwanie sprzętowe o numerze 09h (tzw. przerwanie klawiatury). W tym momencie procesor przerywa pracę i wykonuje procedurę obsłu- gującą przerwanie klawiatury; odczytuje ona kod skaningowy naciśniętego klawisza, przekształca go na kod ASCII i umieszcza w specjalnym buforze BIOS-u. Z tego bu- foru korzysta m.in. standardowa funkcja Turbo Pascala /+./. My jednak nie bę- dziemy tego robić, ponieważ potrzebujemy jak najszybszego dostępu do klawiatury. W informacje o stanie poszczególnych klawiszy będziemy zaopatrywać się bezpośrednio u kontrolera klawiatury, odczytując zawartość portu i60h. Naciśnięcie dowolnego klawisza powoduje umieszczenie w porcie 60h jego kodu skaningowego, zwolnienie klawisza również powoduje umieszczenie w porcie 60h jego kodu skaningowego, z tą różnicą, że jest on zwiększony o liczbę 128 (kody skanin- gowe klawiszy zamieszczono w dodatku na końcu książki). Załóżmy, że wciskamy klawisz C, do portu 60h trafia liczba 46 (kod skaningowy klawisza C); gdy zwolnimy klawisz C, do portu 60h trafi liczba 174 (46+128). Występowanie różnych kodów dla wciskanych i zwalnianych klawiszy wykorzystać możemy do wykrycia zdarzenia przytrzymania przez gracza danego klawisza. Jest to całkiem proste. Gdy odbierzemy kod skaningowy oznaczający naciśnięcie na przy- kład klawisza C, traktować będziemy go jak klawisz wciśnięty, dopóki nie odbierzemy z portu 60h liczby 174, oznaczającej jego zwolnienie. Jak odczytać wartość z portu 60h? Można to zrobić choćby itak: :+6 ;+6837-,8/ ;+6837-4368  Musimy jednak pamiętać o tym, że podczas naciskania i zwalniania klawiszy gene- rowane jest przerwanie klawiatury; powoduje to, że procesor przerywa pracę i wyko- nuje procedurę obsługującą przerwanie klawiatury, a ona odczytuje kod skaningowy 210 Tworzenie gier 2D i 3D w języku Turbo Pascal klawisza z portu 60h. Tłumacząc to w prostszy sposób, możemy powiedzieć, że zo- stajemy odcięci od portu 60h przez przerwanie klawiatury, ponieważ jest ono wyko- nywane niezależnie od nas. Jedyne, co możemy zrobić, to zakazać systemowi obsługi przerwania sprzętowego 09h (numer przerwania klawiatury) i samemu przejąć kon- trolę nad klawiaturą. O wykonywaniu przez system poszczególnych przerwań decyduje zawartość portu 21h; jest to tzw. port maski przerwań. Każdy bit znajdującego się w nim bajtu decy- duje o wykonywaniu jednego przerwania. Jeżeli bit jest wyzerowany, to dane prze- rwanie jest obsługiwane przez system, natomiast jeżeli bit jest ustawiony, to dane przerwanie nie jest wykonywane. Oto wyjaśnienie znaczenia poszczególnych bitów portu 21h. bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 bit 7 — przerwanie portu równoległego: 1 = nie jest obsługiwane, 0 = jest obsługiwane; bit 6 — przerwanie sterownika stacji dyskietek: 1 = nie jest obsługiwane, 0 = jest obsługiwane; bit 5 — przerwanie sterownika dysku twardego: 1 = nie jest obsługiwane, 0 = jest obsługiwane; bit 4 — przerwanie portu szeregowego nr 1: 1 = nie jest obsługiwane, 0 = jest obsługiwane; bit 3 — przerwanie portu szeregowego nr 2: 1 = nie jest obsługiwane, 0 = jest obsługiwane; bit 2 — przerwanie drugiego układu 8259: 1 = nie jest obsługiwane, 0 = jest obsługiwane; bit 1 — przerwanie klawiatury: 1 = nie jest obsługiwane, 0 = jest obsługiwane; Rozdział 6.  Komunikacja z graczem i wylwietlanie tekstu 211 bit 0 — przerwanie układu czasowego: 1 = nie jest obsługiwane, 0 = jest obsługiwane. Tak więc aby uniemożliwić przekazanie sterowania do procedury obsługującej prze- rwanie klawiatury, należy ustawić pierwszy bit portu 21h. Można to zrobić w nastę- pujący sposób: 4368    , Po tej operacji klawiatura przestanie reagować. Gdy odłączymy przerwanie klawiatury, musimy pamiętać o tym, aby przed wyłączeniem przez gracza programu (gry) przyłączyć je z powrotem, w przeciwnym razie użytkownik nie będzie mógł normalnie kontynu- ować pracy w systemie. Dokonujemy tego, zerując pieriwszy bit portu 21h. Pora na naukę odczytywania stanu klawiszy. Jest to całkiem proste, wystarczy, że bę- dziemy bezustannie pobierać i sprawdzać wartość z piortu 60h. Napiszmy procedurę, która będzie otrzymywać poprzez parametr zmienną typu ,8/; jeżeli w porcie 60h znajdzie informację od klawiatury dotyczącą naciśnięcia lub zwolnie- nia klawisza, to zapisze ją do tej zmiennej. W sytuacji gdy port 60h będzie pusty, umieści w zmiennej wartość 0. Procedurę nazwiemy 1)43,/6)7+2)3., a oto jej kod: 463-/.96/1)43,/6)7+2)3.$:+63.)7-+2,8/  :+6 8/4,8/ ,/12  3,6+2/2036+-3+;+896/  8/44368 #46+;./2/--,90362//784978-,+82+.9-7/ ;436-/ 43-3.3.+;+896 / /8268-.;2- ;+6922;2//7874/o232-3.-89/43689 ;+683-+,13 3462 2--343;3+;+896/2++47+2/.32/133/2- 2036+-+479//63.3386+2/4346/4+6+/86 /22/;-3.463-/.96  0$$8/4+2.  8/2 ,/12 3.)7-+2  /8 /2. 0$$8/4+2.  8/2 ,/12 8/44368  3.)7-+2  /8 /2.  3,/63.7-+22+-2/8/139,;3232/13+;7+  3.)7-+24368  /2.32/-463-/.961)43,/6)7+2)3. 212 Tworzenie gier 2D i 3D w języku Turbo Pascal Z pewnością zastanawiasz się, dlaczego wartość z portu 60h jest odczytywana w sy- tuacji, gdy pochodzi od jednostki dodatkowej; jest tak, gdyż klawiatura nie może za- pisać do portu 60h nowej wartości, dopóki procesor goi nie opróżni. Kolejny problem, jaki musimy rozwiązać, dotyczy automatycznego powtarzania kodu klawiszy. Gdy przytrzymamy na moment jakikolwiek klawisz, klawiatura zaczyna zapisywać do portu 60h od 2 do 30 razy w ciągu sekundy kod tego klawisza, co jak nietrudno wywnioskować, powoduje zapchanie portu 60h. Z tym problemem uporać możemy się tylko w jeden sposób, a mianowicie zmniejszając liczbę powtórzeń zapisu do portu 60h kodu przytrzymanego klawisza. Do zmiany tej właściwości klawiatury służy funkcja 03h przerwania 16h. Funkcja 03h przerwania 16h powoduje ustalenie nowej częstotliwości powtarzania znaków oraz opóźnienia czasowego, po upływie którego ma się ono zacząć. Parametry wejściowe są następujące:    — numer funkcji przerwania 16h, z której chcemy skorziystać, oczywiście będzie to 03h;  — prędkość powtarzania znaków przez klawiaturę, wyriażona w znakach na sekundę; możliwości ustawień jest bardzo wiele:  -  -  -  - - -  -  -  - -   -  -   -  -  - -  -  -   -  -  - -  -  -  -  -  --  -  -  - -   — opóźnienie zadziałania powtarzania klawiszy:  7/  7/  7/  7/ Napiszmy krótką procedurę, która pozwoli nam ustalać dowolną częstotliwość powta- rzania kodu klawiszy i czas opóźniający jego zadziałanie. Procedurę nazwijmy 1)43;8+6+2/)+;7, a oto jak powinien wyglądać jej kod: 463-/.96/1)43;8+6+2/)+;7$-,+-3432/2/,8/  ,/12 +7 3:+- n+.9 .3-29/6092-46/6;+2+   3:,--,+n+.9-,+.3--,+43;826/q3.9+;7  Rozdział 6.  Komunikacja z graczem i wylwietlanie tekstu 213 3:,-3432/2/n+.9342 2/2/.3  28  ;3o+46/6;+2/   /2. /2.32/-463-/.961)43;8+6+2/)+;7 Procedura otrzymuje dwa parametry, w pierwszym określamy liczbę powtórzeń kodu klawisza w ciągu sekundy, a w drugim czas opóźniającyi rozpoczęcie jego działania. Procedury 1)43,/6)7+2)3. oraz 1)43;8+6+2/)+;7 dołączamy do modułu 16+0)0. Zanim przejdziemy do napisania przykładowego programu, stwórzmy pro- cedurę, która będzie odłączała i przyłączała klawiaturę. Przekazujemy do niej wartość typu 33/+2; jeżeli będzie to $ , procedura zezwoli systemowi na obsługę prze- rwania klawiatury; w wypadku przekazania wartości # procedura odcina system od przerwania klawiatury. Procedurę nazwiemy 1)77)+;+896+. Oto jej kod: 463-/.96/1)77)+;+896+$78+2,33/+2  ,/12 0$78+2$  8/2 4368   o-/2/3,7o9146/6;+2++;+896  /7/ 4368   o-/2/3,7o9146/6;+2++;+896  /2.32/-463-/.961)77)+;+896+ Procedurę 1)77)+;+896+ dołączamy do modułu 16+0)0. Program z listingu 6.1 przejmuje kontrolę nad klawiaturą, ustala częstotliwość powtarzania kodu klawiszy na 2 w ciągu sekundy, odczytuje zawartość z portu 60h ii wyświetla ją na ekranie. Listing 6.1. Klawiatura (p_6_1.pas) 46316+4))   n n   97/7-68-16+0)0     :+6 3.)7+2,8/  n       ,/12  -7-/2//6+29  -67-6  78+;+-/7838;343;8+6+2++;72+;-197/92.- 978++342 2/2/6343-/-+43;8+6+2+2+ 736+ ++9/778/3;3,7o9146/6;+2++;+896  1)43;8+6+2/)+;7$ 0-  214 Tworzenie gier 2D i 3D w języku Turbo Pascal 1)77)+;+896+$#   329-+7/;2/73q-3234/8+;/.3  ;/$  .3 ,/12  3,/6+;+68343689   1)43,/6)7+2)3.$3.)7+2  / /43,6+23.3.43;+.++;73;#-46/6;+4/8/  0$3.)7+2 8/2,6/+ / /3.2+/ .3.3;32/1322/13+;7+-8313;479/  0$3.)7+2 8/2;68/2$3.)7+2  /2.32/-4/8;/.3 /;++778/3;2+3,7o91/46/6;+2++;+896  1)77)+;+896+$$   /2. 32/-46316+9 Mysz W dzisiejszych systemach operacyjnych mających rozbudowany interfejs graficzny mysz jest niezastąpionym narzędziem pracy. To prawda, że po ikonach i folderach poruszać możemy się również wyłącznie za pomocą klawiatury, jednak dzięki myszy jest to dużo prostsze. Odnosząc się do gier komputerowych, musimy stwierdzić, że nie jest możliwe wybranie jednego urządzenia kontrolującego; po prostu jedne gry napi- sane są w taki sposób, że korzystają wyłącznie z klawiatury, inne wyłącznie z myszy, a jeszcze inne z obydwu tych urządzeń naraz. Na rysunku 6.2 przedstawiono standar- dową mysz. Rysunek 6.2. Standardowa mysz Obsługa myszy od strony programowej jest dużo łatwiejsza niż obsługa klawiatury. Odbywa się ona poprzez przerwanie 33h. Oto opis funkcji przerwania 33h; z reguły jest ich ponad 30, my wykorzystywać będziemy tylko kiilka z nich. 2-++-+7 ;;3o+2/    3;628   Y7+278+3;+2+ ,6+7 -,+46-72;  ;/8/2/96736+7 Rozdział 6.  Komunikacja z graczem i wylwietlanie tekstu 215 ;;3o+2/    6-/96736+7 ;;3o+2/   #8+89743o3 /2/7 ;;3o+2/    3;628  / /,8 978+;3283/;46-7;-2/8 / /,8 978+;328346+;46-7;-2/8 / /,8978+;328363.3;46-7;-2/8 43o3 /2/433/$;86,/ 3. .3-8+;o+2//78  43o3 /2/4323;/$;86,/ 3. .3  Napiszmy teraz dwie procedury, które wykorzystamy do obsługi myszy. Pierwsza będzie wyświetlać i chować kursor. Nazwijmy ją 1)43+)96736; oto jej kod: 463-/.96/1)43+)96736$78+897,33/+2  ,/12 0$78+897$  8/2 +7 3:+- n+.9 .3  28 ;3o+46/6;+2/  /2./7/ +7 3:+- n+.9 .3  28 ;3o+46/6;+2/  /2. /2.32/-463-/.961)43+)96736 Druga procedura pobierać będzie informacje o stanie przycisków myszy i położeniu kursora. Pobrane dane zostaną zapisane w pięciu zmiennych, przekazywanych do pro- cedury poprzez parametry. Pierwsze trzy dotyczą stanu lewego, środkowego i prawego przycisku myszy, pozostałe dwa to zmienne, w których zostanie umieszczona pozycja kursora myszy. Procedurę nazywamy 1)43,/6)78+897)7, a oto jej kod: 463-/.96/1)43,/6)78+897)7$:+6/;-763.3;-46+;,33/+2 :+643)-43);36.  :+6 8/4;36. 8/4)43)-8/4)43);36. ,/12 +7 3:+- n+.9 .3  28 ;3o+46/6;+2/  3:;36.4868/4-,n+.9.38/4  3:;36.4868/4)43)--n+.9.38/4)43)  3:;36.4868/4)43)-.n+.9.38/4)43)  /2. 43)8/4)43) 43)8/4)43) 216 Tworzenie gier 2D i 3D w języku Turbo Pascal 0$$8/4+2.  8/2/;$ /7//;# 0$$8/4+2.   8/246+;$ /7/46+;# 0$$8/4+2.   8/2763.3;$ /7/763.3;# /2.32/-463-/.961)43,/6)78+897)7 Wyjaśnijmy, w jaki sposób można zmienić kształt kursora. Po pierwsze, nie wyświe- tlamy standardowego kursora myszy, czyli nie używamy procedury 1)43+)96736 z parametrem $ . Tworzymy bitmapę przedstawiającą nasz wymarzony wskaźnik, podczas pracy programu odczytujemy pozycję kursora myszy i we wskazanym miej- scu wyświetlamy obraz kursora pochodzący z bitmapy na przykład za pomocą proce- dury 1);7;/8)3,6+) ). Gdy używamy własnego kursora, musimy narysować go za każdym razem, gdy two- rzymy nową klatkę obrazu. Z reguły jego rysowanie odbywa się na samym końcu, już po wyświetleniu wszystkich obiektów. Gdy natomiast używamy standardowego kur- sora wyświetlanego przez kartę graficzną, niczym nie musimy się przejmować; karta graficzna odpowiada za to, by kursor został narysowany w odpowiedniej kolejności i w odpowiednim miejscu. Program z listingu 6.2 demonstruje działanie naszych procedur obsługujących mysz. W programie poruszamy standardowym kursorem; w momencie naciśnięcia lewego przycisku myszy na ekranie zostaje narysowany piksel o losowo wybranym kolorze. Naciśnięcie prawego przycisku myszy kończy działanie iprogramu. Listing 6.2. Mysz (p_6_2.pas) 46316+4))  n n   97/716+0)0     :+6 /;-763.3;-46+;,33/+2 )43)-)43);36.  n       ,/12  o-+86,16+0-2    1)978+;)86,):1+$    ;/8+96736  1)43+)96736$$   ;/$  .3 ,/12 Rozdział 6.  Komunikacja z graczem i wylwietlanie tekstu 217 .-8+2/.+2-378+2/7  1)43,/6)78+897)7$/;-763.3;-46+;-)43)-)43)  / //;46-7/78;-2/8-679/47/;43- 96736+;+68336/+-433/43o3 /2/7./46/ -432/;+ 2+/ 32+.346/.+o93. .3-/6+2+2+83+78 7/633 47/  0$/;$  8/21)679)47/) $)43).:-)43)- 6+2.3$  / /46+;46-7/78;-2/8--3;+9673646/6;+4/8/  0$46+;$  8/2 ,/12 1)43+)96736$#  ,6/+ /2. /2.32/-4/8;/.3 /2. 32/-46316+9 Wyświetlanie tekstu Omawianie sposobów wyświetlania tekstu rozpoczęliśmy już w pierwszym rozdziale; w trybie tekstowym korzystaliśmy z procedur 68/2 i 68/, pierwsza wyświetla podany tekst i przenosi kursor do następnej linii, druga wyświetla tekst bez przeno- szenia kursora. W trybie graficznym obsługiwanym przez sterowniki BGI stosowaliśmy procedurę 988/, która wyświetla podany tekst w określonym miejscu.i Pracując w trybie graficznym 13h, nie mamy do dyspozycji procedur wypisujących tekst, musimy polegać wyłącznie na sobie i samodzielnie je stworzyć. W pierwszej kolejności musimy zająć się utworzeniem czcionki. Każdy jej znak będzie miał roz- miar 8×8 pikseli. Spójrz na rysunek 6.3 przedstawiający ilitery A i y. Rysunek 6.3. Sposób budowy znaków za pomocą pikseli W skład czcionki wchodzić będą 72 znaki:  spacja,  kropka,  wielkie litery: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,  małe litery: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, 218 Tworzenie gier 2D i 3D w języku Turbo Pascal  cyfry: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,  znaki specjalne: -, +, ‘, ’, /, *, :, =, _. Do reprezentacji każdego znaku użyjemy 8 bajtów. Jak to możliwe? Przecież każda litera składa się z 64 pikseli! Masz rację. Jednak zauważ, że 8 bajtów to zespół 64 bitów. Do opisu każdego piksela użyjemy 1 bitu. Jeżeli będzie on ustawiony, oznaczać to będzie, że należy go wyświetlić; jeżeli będzie wyzerowany —narysowanie piksela nie nastąpi. Na rysunku 6.4 znajdują się litery A i y, przedstawione za pomocą bitów. Rysunek 6.4. Reprezentacja znaków za pomocą bitów Zanim przystąpimy do budowy procedury wypisującej tekst, musimy utworzyć zmienną, która będzie przechowywała wszystkie wzorce znaków. Posłużymy się w tym celu tablicą złożoną z 71 elementów typu ;36/-)2+9 (tablica złożona jest z 71, a nie 72 elementów, ponieważ nie bierzemy pod uwagę znaku spacji; po jego napotkaniu przejdziemy do rozpatrywania kolejnego znaku). Definicję typu ;36/-)2+9 tworzymy w następujący sposób: 84/;36/-)2+9+66+ 30,8/ Elementom tablicy nadamy wartość już w momencie ich definiowania. W tym celu należy dodać przed nazwą tablicy dyrektywę -3278 (tzn. stała). Zmienne poprzedzone dyrektywą -3278 mają wszystkie właściwości zwykłych zmiennych (zdefiniowanych bez słowa -3278), różni je jedynie możliwość nadania im początkowej wartości. Zmienne określone jako -3278 najlepiej definiować po definicji nowych typów danych. Definicja tablicy zawierającej wzorce znaków naszej cizcionki wygląda następująco: -32781)8+,)2+3;+66+  30;36/-)2+9 $ $ - - - - - - - -   $ ----- - - -   $ -- - - -- - -  $-- - - -- - -   $-- - --- - -   $ - --- - - - -   $- -- - -- - -   $ - ---- - - -   $-- - - - - - -   $ -- --- - - -   $ -- - - - - - -    $ ------ - -    $------ - -    $-- - --- - -    $------ - -    $--- --- - -    $--- - - - - -    Rozdział 6.  Komunikacja z graczem i wylwietlanie tekstu 219 $ -- --- - - -    $------ - -    $- - - - -- - -    $ - - - - - - - -    $-- ---- - -    $- - - - - - - -   $------ - -   $------ - -   $------ - -   $--- - - - - -  $------ -  - !  $------ - -  $ -- - -- - - - #  $-- - - - - - -  $  $----- - - -   $---- - - - -  $------ - -  $- - - --- - -   $-- - - - - - -   $-- - - -- - -   $ - ----- - - +  $ - ----- - - ,  $ - - - - - - - - -  $ - - --- - - -  .  $ - --- - - - -  /  $ -- - - - - - - 0  $ - - --- - -  - 1  $ - ----- - -   $ - - - - - - - -   $ - - - - - - - -   $ - ----- - -   $ - - - - -- - -   $ - ---- - - -   $ - -- - - - - -  2  $ - - --- - - -  3  $ - ----- - - 4  $ - - --- - -  - 5  $ - -- - - - - - 6  $ --- --- - - 7  $ - -- - - - - - 8  $ - ---- - - - 9  $ - - - - - - - - :  $ - - ---- - - ;  $ - -- - -- - -    $ - ----- - -    $ - -- - -- - -   $ - - -- - - - - Y  $ - - -- - - - - ‘  $ - - - - - - - - -  $ - - - - - - - -  $ - - - - - - - - a  $ - - - - - - - -   $ - -- -- - -    $ - - - - -- -   )    220 Tworzenie gier 2D i 3D w języku Turbo Pascal Definicje tablicy 1)8+,)2+3; oraz typu danych ;36/-)2+9 dodajemy do modułu 16+0)0. Możemy teraz przystąpić do napisania i omówienia procedury rysującej tekst; nazwiemy ją po prostu 1);7;/8)8/78) . Oto jej kod: 463-/.96/1);7;/8)8/78) $;7),903694328/6-;36.8/7878621 336,8/  :+6 -,+)2+3;);)8/7-/,8/ -2)2+3;--2),83;,8/ -2),+83;,8/ 2./7,8/ 46/792/-/;36. +7+),83;+,8/ ,/12 / /8/78/ +273-46/6;+46+-/463-/.96  0$$‘   8/2/8 ,-46/792/-/;,9036/.34/6;7/1347/+8/789  46/792/-/$a ‘  3,/6+-,/2+2;;8/-/  -,+)2+3;);)8/7-/36.$8/78    79/;778/2+  036-2)2+3; 83-,+)2+3;);)8/7-/.3 ,/12 / /2+438+74+-/-46/-3..33/2/132+9  0$8/78-2)2+3;  8/2 ,/12 ‘ 0$  8/2,6/+ 46/792/-/$a ‘ -32829/ /2./7/ 46/-;2464+.9746+;.+--2+/78634 9,222+/74/-+2  0$8/78-2)2+3; 8/22./7 /7/ 0$8/78-2)2+3; Y 8/22./7/7/ 0$8/78-2)2+3; ‘ 8/22./7/7/ 0$8/78-2)2+3; - 8/22./7/7/ 0$8/78-2)2+3; 8/22./7/7/ 0$8/78-2)2+3; a 8/22./7/7/ 0$8/78-2)2+3;  8/22./7/7/ 0$8/78-2)2+3;  8/22./7/7/ 0$8/78-2)2+3; ) 8/22./7 /7/ /22//78-746+;.+--/78-06  0$$8/78-2)2+3; +2. $8/78-2)2+3;  8/2 2./736.$8/78-2)2+3; Y/7/ /2//78-06-746+;.+--/133.4+79/.3826/13 /2+2;;/-8/6  0$$8/78-2)2+3;  +2. $8/78-2)2+3;  8/2 2./736.$8/78-2)2+3; Y/7/ Rozdział 6.  Komunikacja z graczem i wylwietlanie tekstu 221 /2//78;/8/6-746+;.+--/78+o8/6  0$$8/78-2)2+3; + +2. $8/78-2)2+3;  8/2 2./736.$8/78-2)2+3; Y /7/ ,/12 /463-/.96+;/./.38/13,393.9-32+-+83,/./- / +89+2/634+86;+22+2//783,7o91;+246/463-/.96/ 1);7;/8)8/78;8+464+.946/-3..3634+86/2+ 3/2/132+9  ‘ 0$  8/2,6/+ 46/792/-/$a ‘ -32829/ /2. +7+,83;+7o9 -+.3/./2+978+;32-,82;;,+8+-;36-+2+9  +7+),83;+   , +3;+2/2+9  036-2),+83; 83.3 ,/12 036-2),83; 83.3 ,/12 0$$1)8+,)2+3;2./7-2),+83;+2.+7+),83;+  +7+),83;+ 8/2 +7 /7.-;7),90369n+.9+.6/7,90369;./3-7/1/28.3#- 3007/8.3  +...-46/792/-/3.+46/792/-/.3  3:+-336n+.9336.3  3:,8/486/7.-+n+.9.33264+/-743.+.6/79 #  /2.  6/79;+978+;32,8+73/.243-/;46+;3  +7+),83;++7+),83;+76   6/-3..33/2/1347/++3;+2/2  46/792/-/46/792/-/‘  /2.32/-4/8036-2),83; 30+7/2+43-8/246/7+9/3/.22 /  46/792/-/46/792/-/‘ Y .;/ /2/+7,83;/  +7+),83;+   , /2.32/-4/8036-2),+83;  78+;/2/46/792/-+2+4/6;747/3/2/13673;+2/13 2+9463+746+;.+--2+78/422+;./43+46+; 6+;/. /6+29/8+-8346/6;+4/8/679-2+  ‘ 0$  8/2,6/+ 6/6;+2/4/8036-2)2+3;  46/792/-/$a ‘ /2.32/-4/8036-22+3; /2.32/-463-/.961);7;/8)8/78)  222 Tworzenie gier 2D i 3D w języku Turbo Pascal Do procedury 1);7;/8)8/78)  przekazujemy 5 parametrów. Pierwszy zawiera adres buforu wideo, w którym ma zostać narysowany tekst; parametr drugi i trzeci to współrzędne punktu na ekranie, w którym ma zostać wyświetlony pierwszy znak tekstu; parametr czwarty to zmienna typu 78621 zawierająca wypisywany tekst; ostatni para- metr określa numer koloru znaków tekstu. Procedura zawiera nową instrukcję, jest nią -32829/; jej zadanie polega na natych- miastowym rozpoczęciu wykonywania nowego cyklu pętlii, w której się znajduje. Procedura wykorzystuje również jedną bardzo użyteczną właściwość zmiennych typu 78621; mimo że rozmiar zmiennych typu 78621 to 256 bajtów, możemy do nich za- pisać jedynie 255 znaków, ponieważ pierwszy bajt przeznaczono do określenia ich liczby. Procedura wykorzystuje ten fakt do sprawdzenia, ile znaków zawiera otrzymany przez nią tekst. Za najważniejszy element procedury uznać możemy pętlę rysującą pojedynczy znak. Sprawdza ona każdy z 64 bitów danego wzorca znaku; jeżeli wykryje ustawiony bit, rysuje w odpowiednim miejscu piksel. Napiszmy jeszcze jedną procedurę, tym razem bardzo małą; przyda nam się ona w przykładowym programie i w następnych rozdziałach. Jej zadaniem będzie usta- wienie pól intensywności jednego wybranego wzorca kolorów. Procedurę nazwiemy 1)978+;);36/-)3369, a oto jej kod: 463-/.96/1)978+;);36/-)3369$26);36-+,8/---2,8/  ,/12 6/+29/6;36-+3369-826--/3.03;+  4368-26);36-+  7o+.343689-28/27;2343.78+;3;-3362;  4368-- 4368- 4368-2 /2.32/-463-/.961)978+;);36/-)3369 Procedury 1);7;/8)8/78)  oraz 1)978+;);36/-)3369 dodajemy do modułu 16+0)0. Przykładowy program znajdujący się na listingu 6.3 po uruchomieniu wyświetla na środku ekranu czerwony tekst za pomocą procedury 1);7;/8)8/78) , jednak zanim to zrobi, ustala kolor drugiego wzorca kolorui na czerwony. Listing 6.3. Wyświetlanie tekstu (p_6_3.pas) 46316+4))  n n   97/7-68-16+0)0  n       Rozdział 6.  Komunikacja z graczem i wylwietlanie tekstu 223 ,/12  o-+86,16+0-2    1)978+;)86,):1+$    78++336.691/13;36-+33694+/82+-/6;32  1)978+;);36/-)3369$-- -   ;/8/2/8/789  1);7;/8)8/78) $486$+ - - - - 3.+ -   ;/8/2/8/789  1);7;/8)8/78) $486$+ - -  - - //// -  /+2/2+2+-2/-/.3;32/13+;7+  6/+./ /2. 32/-46316+9 Podsumowanie Przypomnijmy sobie, jakie nowe umiejętności zdołałeś zdobyć w tym rozdziale. Po pierwsze, potrafisz już odciąć komputer od dostępu do klawiatury i samodzielnie przejąć nad nią kontrolę, sprawdzać, które klawisze są naciskane, a które zwalniane. Po drugie, masz władzę nad myszą (król Popiel ma czego pozazdrościć), możesz śle- dzić jej ruch i stan przycisków. Po trzecie, stworzyliśmy procedurę wypisującą łańcu- chy znaków, co ułatwi nam dalszą pracę. Jakość tekstu malowanego przez procedurę 1);7;/8)8/78 jest dobra, jednak jeżeli zdecydujesz się na stworzenie własnej wymarzonej gry (z pewnością już nad nią pracujesz), zalecam wykorzystanie go tylko do celów roboczych; najlepiej będzie, jeśli stworzysz nową procedurę rysującą litery na podstawie wcześniej specjalnie przygotowanych bitmap; będą dużo ładniej się pre- zentować.
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Tworzenie gier 2D i 3D w języku Turbo Pascal
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: