Działa w systemie MS-DOS Działa w systemie Windows     Blast 1.0           Kompilacja


Opis
Poziomy
Klawiszologia
Argumenty
Błędy



OPIS
Na pomysł napisania gry Blast w języku QBasic, wpadłem po zagraniu w demo gry Blastorama 1.00sm.
Jest to gra logiczna (bardzo złożona i trudna na dalszych poziomach), w której celem jest wysadzenie
wszystkich klocków znajdujących się na mapie. Dokonuje się tego za pomocą, z góry określonej liczby
bomb na danym poziomie. Ponadto na mapach występuje wiele obiektów o różnych właściwościach
(np. wiatraczek wydmuchujący powietrze, odpycha pojedyncze klocki). Klocki mają różne kolory.
Jeśli klocki tego samego koloru, są ze sobą połączone (stykają się) pod kątem prostym (nie po ukosie),
to wystarczy zdetonować dowolny z nich, aby wszystkie wybuchły. Po wysadzeniu klocków wszystko,
co znajdowało się nad nimi, opada w dół. Na planszy mogą być umieszczone bomby, które pobiera się
klikając je lewym przyciskiem myszy (w mojej grze naciskając ENTER). Po pobraniu bomby wszystko,
co było nad nią również spadnie. Często trzeba dobrze pomyśleć, czy najpierw wysadzać, czy może
pobierać bomby, aby klocki spadły i lepiej się ułożyły. Zarówno w mojej grze, jak i w Blastoramie
nie opadają mosty, na których są poukładane klocki, bomby i inne elementy.
        Moja wersja gry jest dużo bardziej uproszczona. Muszę się usprawiedliwić tym, że jest to pierwsza
stworzona całkowicie przezemnie gra. Dlatego nie posiada oszałamiającej grafiki, ani żadnych efektów
dźwiękowych. Potraktowałem ją jako ciekawy projekt programistyczny, który może posłużyć innym do
zrozumienia zasad pisania i działania, różnych prostych algorytmów w języku QBasic.
Na mapach poziomów mogą znaleźć się klocki w pięciu kolorach, bomby oraz mosty. W zamyśle prze-
widziałem też ósmy element - detonator. Po jego wysadzeniu miały eksplodować wszystkie klocki
(o dowolnym kolorze), znajdujące się wokół niego (także i te położone po ukosie), a następnie klocki
o tym samym kolorze, połączone (stykające się) z nimi pod kątem prostym. Zaprojektowałem ikonę
detonatora i może on znajdować się na mapie, ale narazie jest tylko dekoracją. Nie zaimplementowałem
kodu do jego obsługi (nie chce mi się już nad tym myśleć). Pozostawiam to wszystkim chętnym do
spróbowania swoich sił w programowaniu nie-za-łatwego algorytmu w QBasicu.

Minimalne wymagania gry (jaki komputer ich nie spełnia ?!):

       PROCESOR: 286
     PAMIĘĆ RAM: 640 kB
KARTA GRAFICZNA: kolorowa EGA (64 kB)
         SYSTEM: MS-DOS, Windows


POZIOMY
W grze przewidziałem 101 poziomów, z czego zrobiłem tylko pierwszych pięć (już widzę mnóstwo
chętnych do ich tworzenia). Reszta poziomów to mapy o wymiarach 1x1 klocek, stworzone po to, aby
gra nie zgłaszała komunikatów o błędach. Są one odczytywane z pliku, którego ścieżka dostępu jest
podana w zmiennej "SRC$" w kodzie źródłowym. Standardowo jest to plik o nazwie "BLAST.LVL"
i powinien się on znajdować w tym samym katalogu, co gra. Liczbę poziomów, po których przejściu
gra się kończy, określa wartość zmiennej "N". Każdy poziom ma swój niepowtarzalny, 5-cyfrowy kod.
Po jego wpisaniu rozpoczyna się grę na danej mapie. Kody te są zapisane w pliku źródłowym,
jako argumenty polecenia "DATA".
Każdy poziom w pliku "BLAST.LVL" jest zapisany za pomocą 3+(xx*yy) bajtów, gdzie:
xx / yy - szerokość/wysokość poziomu, czyli liczba elementów w poziomie/pionie na mapie. Każdy
element, czyli klocek, bomba, most lub detonator ma wymiary 16x16 pikseli. Między elementami
mapy znajduje się jeden piksel przerwy (na żółtą ramkę). Gra otwiera swój własny ekran (polecenie
"SCREEN 9"), o rozdzielczości 640x350 pikseli i 16 kolorach. Na takim ekranie nie zmieści się (razem
z dolnym marginesem) więcej, niż 37x19 elementów, co stanowi maksymalne rozmiary mapy poziomu.
Niżej jest przedstawiona budowa każdego poziomu, za pomocą bajtów zapisanych symbolicznie
i szesnastkowo (heksadecymalnie):

BB XX YY [blok XX*YY bajtów]

BB - bajt ten może mieć wartość 0-99; określa dostępną na danym poziomie liczbę bomb.
        Wartość zerowa jest dopuszczalna, ponieważ niezbędne do przejścia poziomu bomby,
        mogą być umieszczone na jego mapie.

XX / YY - te bajty mogą mieć wartość 1-37/1-19; określają szerokość/wysokość poziomu.

[blok XX*YY bajtów] - bajty z tego bloku, o wartościach 0-8, stanowią wizualną zawartość
                                   mapy poziomu. Mogą w nim wystąpić następujące elementy:



Inne graficzne elementy na mapie:



W nawiasach kwadratowych są podane etykiety podprogramów
w kodzie źródłowym, które rysują dany element.

PRZYKŁAD: zapis poniższej mapy w pliku z poziomami, wyglądałby następująco:



Do przejścia powyższego poziomu wystarczy 3 bomby, dlatego pierwszy bajt ma taką wartość.
Następne dwa bajty, to odpowiednio: szerokość i wysokość mapy. Kolejne bajty decydują
o zawartości poziomu (ich liczbę otrzymuje się, mnożąc szerokość i wysokość mapy).
Mapa poziomu jest otoczona przedstawioną na rysunku, ramką w odcieniach szarości, która
wyznacza pole gry. Jeśli mapa ma wysokość 19 elementów, to górny bok tej ramki nie jest
widoczny, ponieważ nie mieści się na ekranie.

Znając przedstawione w tym rozdziale informacje można samodzielnie budować dowolne poziomy
i tworzyć pliki z ich zestawami. Potrzebny jest do tego celu edytor plików binarnych, np. świetny
Hex Workshop. Zapaleni programiści mogą napisać (np. w QBasicu) wizualny edytor poziomów,
który będzie zapisywał do pliku, binarną postać zaprojektowanej mapy. Przy projektowaniu
poziomów trzeba pamiętać, aby sprawdzić czy da się je przejść przy dostępnej liczbie bomb.

KLAWISZOLOGIA
Klawisze używane w grze i ich funkcje:

 KLAWIATURA  KEY PAD 
FUNKCJE
 poruszanie czerwonej ramki w menu (góra/dół) lub
 żółtej ramki na mapie poziomu (wszystkie kierunki). 
 zatwierdzanie wybranej pozycji w menu, pobieranie
 bomby lub wysadzanie klocka na mapie poziomu.
-
 wyjście z gry (Quit) lub powrót do menu
 z okna kodów (Code) lub mapy poziomu.
 naciśnięcie dowolnego klawisza, powoduje powrót
 do menu z ekranu informacji (About).

Klawisze bloku numerycznego (Num Pad) na keypadzie działają tylko wtedy,
gdy jest wyłączona ich blokada (dioda Num Lock na klawiaturze, nie świeci się).

ARGUMENTY
Za nazwą gry Blast można podać tylko jeden argument:

/? - powoduje wyświetlenie informacji o grze.

Podanie innego argumentu spowoduje wyświetlenie komunikatu
"Unknown argument (only "/?" is available)."

Brak argumentu spowoduje uruchomienie gry.

Podanie więcej niż jednego argumentu spowoduje wyświetlenie komunikatu "Too many arguments."

BŁĘDY
Poniżej są zawarte objaśnienia komunikatów o błędach, jakie może wyświetlać gra. Pierwsze sześć
komunikatów dotyczy pliku z poziomami, do którego ścieżka dostępu jest podana w zmiennej "SRC$"
w kodzie źródłowym. Kolejne dwa błędy sygnalizują nieprawidłową budowę mapy danego poziomu.
Ostatni, najpoważniejszy komunikat pojawia się, gdy wystąpi błąd Runtime języka QBasic.

 1 
 Plik z poziomami jest pusty lub nie istniał i gra go utworzyła (aktualnie ma rozmiar
 0 bajtów). Podanie nazwy nie istniejącego pliku, powoduje jego utworzenie.
 Tak działa funkcja "OPEN src$ FOR BINARY ACCESS READ AS 1",
 nawet jeśli plik jest otwierany tylko do odczytu.
 2 
 Plik z poziomami jest za krótki. Brakuje conajmniej jednego bajtu
 w opisie danego poziomu, który nie chce się włączyć.

Wystąpienie jednego z czterech poniższych błędów oznacza, że któryś bajt w opisie danego poziomu,
ma nieprawidłową wartość. W komunikatach jest podany numer tego bajtu (Byte number) w pliku
z poziomami (licząc od 1) oraz jego aktualna wartość dziesiętna (value).

 3 
 Pierwszy bajt [BB] w opisie poziomu ma niewłaściwą wartość.
 Określa on liczbę bomb, która może wynosić od 0 do 99.
 4 
 Drugi bajt [XX] w opisie poziomu ma niewłaściwą wartość.
 Określa on szerokość mapy, która może wynosić od 1 do 37.
 5 
 Trzeci bajt [YY] w opisie poziomu ma niewłaściwą wartość.
 Określa on wysokość mapy, która może wynosić od 1 do 19.
 6 
 Czwarty lub kolejny bajt z [bloku XX*YY bajtów] w opisie poziomu ma
 niewłaściwą wartość. Określa on element do wyświetlenia na mapie
 i może mieć wartość od 0 do 8.

 7 
 Na mapie poprawnie odczytanego poziomu o podanym numerze, nie ma
 żadnego klocka. Gra na takim poziomie jest pozbawiona sensu, ponieważ
 nie da się go przejść (nie ma co wysadzać).
 8 
 Na mapie poprawnie odczytanego poziomu o podanym numerze, nie ma
 żadnej bomby, a bajt [BB] ma wartość 0. Gra na takim poziomie jest pozba-
 wiona sensu, ponieważ nie da się go przejść (nie ma czym wysadzać).

 9 
 Błąd Runtime obsługiwany przez język QBasic, o podanym numerze.
 W najprostszym przypadku występuje, gdy ścieżka dostępu do pliku z poziomami,
 zawiera niedozwolone znaki (np. "+", "/"). Przyczyn wystąpienia jednego błędu,
 o danym numerze może być wiele.

Patrz: Błędy Runtime języka QBasic.