Przejdź do zawartości

Blitz3D/ONT/Lekcja1

Z Wikibooks, biblioteki wolnych podręczników.

Wstęp

[edytuj]

W pierwszej lekcji nauki Blitza nauczysz się pożytecznej sztuki operacji na tekście. Poznamy:

  • wypisywanie tekstu dwoma sposobami,
  • wprowadzanie danych i ich wyświetlanie,
  • zmienianie koloru i lokacji tekstu,
  • zmiana czcionki i jej wielkości,
  • funkcję AppTitle,
  • zmiana rozdzielczości, głębi kolorów,
  • tworzenie własnych funkcji

Tak więc, przystąpmy do pisania!

Wypisz tekst

[edytuj]

Na pierwszy ogień poszło wypisywanie tekstu. Jest to bardzo proste, odbywa się to za pomocą jednej funkcji.

;wypisywanie tekstu
Print "Hello World"

Wpisz to do kompilatora i kliknij na "Run" lub wciśnij przycisk F5 (zauważ, że Blitz choćby pod tym względem jest szybszy, w Microsoft Visual Studio musieliśmy wcisnąć F7, poczekać kilka sekund, potem F5... kompilacja dużych programów zajmowała niemiłosiernie dużo czasu, natomiast przy Blitzu jest o połowę krócej). Więc podziwiaj tekst "Hello World" :) Zaraz po kompilacji pojawi się komunikat "Program has ended." Jest spowodowany brakiem main loop. Main loop to serce programu, najważniejsza cząstka, a to poznasz teraz. By program nie wyświetlał tego komunikatu, należy wprowadzić main loop. Ja znam dwie formy zapisu main loop. Pierwsza, bardziej stosowana wśród programistów Blitza:

;początek main loop
While Not KeyHit(1)
;wypisywanie tekstu
Print "Hello World"
;koniec main loop
Wend
;koniec programu
End

Pierwsza linijka to komentarz. Komentarze są przydatne i dla programisty i dla osoby czytającej kod. Pomagają one zrozumieć sam kod, działanie programu itd. Dzięki nim programista nie pogubi się w kodzie. Na razie ten program jest naprawdę mały, ale weźmy pod uwagę FPS-a - co najmniej 100 000 linijek będzie miał skończony FPS.
While Not KeyHit(1) Ta linijka to początek main loop. Jej działanie jest bardzo proste. Dopóki (While) Nie (Not) Zostanie Wciśnięty Klawisz 1 (KeyHit(1) - 1 to kod klawisza ESC). Czyli dopóki gracz nie wciśnie ESC, program będzie robił to co ma podane. While to pewna pętla, dzięki której instrukcje będą wykonywane dopóki jest spełniony warunek. Mała rozpiska pętli:

While warunek
...
instrukcje
...
Wend

Wend to koniec pętli, jeśli tego nie wpiszemy kompilator wyrzuci błąd w stylu "While bez Wend".
Dalej w kodzie mamy wypisywanie tekstu, i End. End to koniec programu, zazwyczaj stawia się to po main loop. Co nie znaczy, że po End nie możemy pisać kodu. Możemy, najczęściej spotykam taką wersję kodu:

''Ustawianie rozdzielczości''
''instrukcje''
''Main loop''
''End''
''Funkcje (Functions)''

Najczęściej po End są pisane funkcje, które będą używane w programie. O funkcjach będzie później, także przy przekształcaniu tego programu. A to przekształcanie, niestety, ale właśnie nadeszło...

Te proste zmiany będą polegały na dodaniu funkcji odpowiedzialnej za wypisanie tekstu

Pisz()

Repeat
Until KeyHit(1)

Function Pisz()
Text 100,100,"To tylko przykład własnej funkcji... Hello World! :)"
End Function

Pojawi się nam tekst, bla bla. Jest to bardzo ważny przykład, ponieważ poznaliśmy wraz z nim 3 inne rzeczy, mianowicie:

  • wypisywanie tekstu drugim sposobem (przy okazji lokacja tekstu),
  • drugi sposób pisania main loop,
  • pisanie funkcji

Na samym początku programu mamy funkcję Pisz(). Tworzymy ją trochę później... By móc używać funkcji, wpierw trzeba ja napisać :) Potem wklepić jej nazwę (przykładowo Pisz()). Dalej mamy main loop. Ten sposób rzadziej widzę, a wg mnie ten oraz ten sposób main loop z While są na równi. Ten sposób oznacza:

Powtarzaj (repeat)
Zanim zostanie wciśnięty klawisz ESC (Until KeyHit(1))

Mam nadzieję, że z nim nie będzie kłopotów, jednak mały wykres:

Repeat
instrukcje
Until warunek

OK, następnie tworzymy funkcję. Robi się to za pomocą funkcji Function, po której wpisujemy nazwę zakończoną nawiasami (). Potem piszemy instrukcje i obowiązkowo na zakończenie End Function, bo inaczej kompilator wyrzuci błąd.

Function nazwa()
instrukcje
End Function

Hmm, nasze programy nie mają nic do zrobienia, prócz pokazania tekstu... Mało tej interaktywności... Trzeba to zmienić! Na początek nauczymy się wprowadzania danych i ich wyświetlania.

n$=Input$("Jak masz na imie? ")
cls
Print n$

Funkcja Print jest Ci znana. Na razie skompiluj program. Nareszcie coś się dzieje! Program pyta Cię o imię, a potem czyści ekran i je wyświetla. Za czyszczenie ekranu jest odpowiedzialna funkcja Cls. Jej nazwa to skrót od Clear Screen. Ale jak to się dzieje, że program może pytać o imię? Wszystko jest zawarte w funkcji Input. Przed nią wpisujemy nazwę zmiennej (jeśli ma to być tekst musimy dopisać znaczek $), następnie = i funkcję Input. A następnie mamy dwie opcje:

  • zostawić pusty nawias,
  • albo wpisać coś

Gdy zostawimy pusty nawias, program nic nie wyświetli, a gdy wpiszemy jakiś tekst (koniecznie ujęty w cudzysłów) program wyświetli także tekst. Preferuję drugą opcję, gdyż gracz ma większą orientację w programie. To tyle, jeśli chodzi o wprowadzanie danych. Dla liczb nie wstawiaj znaczka $, ani w zmiennej, ani po Input.
No dobrze, teraz krótko powiemy, jak zmienić kolor tekstu.

Graphics 640,480
SetBuffer BackBuffer()

Color 0,250,0
Print "Zielony kolor"
Color 250,0,0
Print "Czerwony"
Color 0,0,250
Print "Niebieski"
Color 134,150,78
Print "Jakiś tam kolor"

Przy okazji poznaliśmy jak zmienić rozdzielczość. Ale najpierw o zmianie koloru. Robi się to za pomocą funkcji Color. Nie wpisujemy nazw, jak "red". Tu program wykorzystuje domieszkę tych kolorów: r (czerwony) g (zielony) b (niebieski). Jak doskonale wiesz, z lekcji plastyki, są to kolory podstawowe. Max. można wpisać 255, a min. 0. Teraz rozdzielczość. Graphics - to musimy wpisać na samym początku programu. Dalej wybieramy szerokość i wysokość okna. Można wpisać cokolwiek, ale najlepsze są te dwa wymiary:

  • 640,480
  • 800,600

W przykładzie tego nie pokazałem, ale można jeszcze zmienić głębię kolorów i wybrać pełny ekran. Głębię kolorów można zmienić dopisując po wysokości liczbę 16 (16-bitowa) lub 32 (32-bitowa). By wybrać pełny ekran wystarczy następnie wpisać 1. Druga linijka odpowiada za wybranie buforu, w którym będziemy rysować. Standardowym jest BackBuffer() i jego w przykładach będę się trzymać.
Przyszedł czas na poznanie funkcji AppTitle. Pozwól, że obejdę się bez przykładu. Wpisujemy ją zaraz po zmianie rodzielczości, a robi się to tak:

AppTitle "Tu wpisz nazwę"

Jej składnia jest taka sama jak funkcja Print, a działanie proste. Zmienia nazwę programu. Popatrz na samiutką górę ekranu. Co widzisz? "Blitz3D - Wikibooks, biblioteka wolnych podręczników" itd. To właśnie tę nazwę zmienia funkcja AppTitle. Ostatnia rzecz to zmiana czcionki i jej wielkości. I tu obejdę się bez przykładu.

fnt=LoadFont("Arial",30)
SetFont fnt

Dodaje się ją przed main loop. W miejscu fnt wpisujemy dowolną nazwę. Dalej mamy funkcję LoadFont.

nazwa=LoadFont("nazwa czcionki, np. Arial, ujęte w cudzysłów", rozmiar czcionki)

I myślę, że nie będzie z tym kłopotów. Jednak jeśli tylko wpiszemy LoadFont czcionka nie zostanie zmieniona. Czemu? Bo trzeba jeszcze poinformować program, że będziemy używać tej czcionki. Robimy to dzięki funkcji SetFont.
Dotarliśmy do końca tej lekcji, ja mogę odetchnąć z ulgą, ty też. Mam nadzieję, że czegoś tam się nauczyłeś. Zapraszam do następnej lekcji!