Kurs QBasic - część 6

Grafika - SCREEN, LINE, CIRCLE, PAINT, PSET

Ponieważ podstawowe polecenia mamy już za sobą, możemy się troszkę rozerwać i popracować nad grafiką. Poleceniem od którego musimy zacząć jest SCREEN x, który służy do ustawienia odpowiedniego trybu graficznego w którym program będzie pracował. Pod "x" można wpisać jedną z następujących wartości:

  • 0 - tryb tekstowy (16 kolorów znaków)
  • 1 - rozdzielczość 320*200, 16 kolorów tła, 4 kolory obiektów
  • 2 - rozdzielczość 640*200, 2 kolory obiektów
  • 7 - rozdzielczość 320*200, 16 kolorów obiektów
  • 8 - rozdzielczość 640*200, 16 kolorów obiektów
  • 9 - rozdzielczość 640*350, 16 kolorów obiektów
  • 10 - rozdzielczość 640*350, 2 kolory obiektów
  • 11 - rozdzielczość 640*480, 2 kolory obiektów
  • 12 - rozdzielczość 640*480, 16 kolorów obiektów
  • 13 - rozdzielczość 320*200, 256 kolorów obiektów

Z góry uprzedzam, że nie jestem pewny części z powyższych informacji, bowiem osobiście korzystam jedynie z kilku trybów. Standardowo kompilator ustawia tryb SCREEN 0, dzięki czemu możemy wyświetlać litery, cyfry i znaki w 16 możliwych kolorach (do zmiany koloru służy polecenie, o którym wspominałem na początku kursu - COLOR). Aby rozpocząć pracę w trybie graficznym, musisz umieścić polecenie SCREEN wraz z interesującym się trybem wyświetlania grafiki. Osobiście w poniższych przykładach będę się opierał na trybie 9. Skoro wybór trybu mamy już za sobą, czas przejść do kolejnego polecenia, którym jest LINE(x1,y1)-(x2,y2),kolor. Dzięki niemu na ekranie monitora pojawi się linia o początku w punkcie (x1,y1) i końcu (x2,y2), oraz kolorze "kolor". Zastosowanie dwóch poznanych wyżej poleceń przedstawię na krótkim przykładzie poniżej:

10 REM Prg6.1 - Zastosowanie polecen: SCREEN i LINE
20 CLS
30 SCREEN 9
40 LINE(100,100)-(540,250),14
50 SLEEP 5

Polecenie LINE można również wykorzystać do rysowania prostokątów, co przedstawia kolejny przykład:

10 REM Prg6.2 - Rysuje prostokąt
20 CLS
30 SCREEN 9
40 LINE(100,100)-(540,250),14, B
50 SLEEP 5

Jak widać, na koniec polecenia LINE wystarczyło dodać jedynie człon ,B. Powyższy prostokąt można w prosty sposób wypełnić kolorem:

10 REM Prg6.3 - Wypelniony prostokat
20 CLS
30 SCREEN 9
40 LINE(100,100)-(540,250),14, BF
50 SLEEP 5

Tym razem na koniec polecenia LINE dodałem człon ,BF. Ponieważ umiesz już rysować linie i prostokąty, możemy zająć się okręgami. Aby narysować okrąg należy posłużyć się poleceniem CIRCLE (x,y), promień, kolor, start, koniec. Polecenie rysuje okrąg o środku w punkcie "x i y", o promieniu "promień", kolorze "kolor" oraz na podstawie wartości start i koniec określa wycinki okręgu.

10 REM Prg6.4 - Okrag
20 CLS
30 SCREEN 9
40 CIRCLE (320, 150), 100, 10
50 SLEEP 5

Jak widać komputer narysował okrąg w punkcie (320,150) o promieniu 100 i kolorze 10. Często jednak to co powinno być okręgiem, tak naprawdę jest elipsą. Jest to spowodowane złym doborem rozdzielczości. Gdybym w przykładzie powyżej użyłbym SCREEN 12 okrąg byłby proporcjonalny zarówno w pionie, jak i w poziomie. W powyższym przykładzie nie skorzystaliśmy z rysowania wycinków okręgu. Spróbujmy to zrobić w poniższym przykładzie:

10 REM Prg6.5 - Wycinki okregu
20 CLS
30 SCREEN 9
40 CIRCLE (280, 180), 100, 10, -0.0001, -1.57
50 SLEEP 5

Jak widać, program narysował wycinek okręgu (a konkretniej pierwszą jego ćwiartkę). Wartości "start" i "koniec" mogą przyjmować wartości od 0 do 6.28. Wartości te wynikają ze wzoru na obwód okręgu: 2*pi=2*3.14=6.28. Dlaczego ja zastosowałem wartości ujemne ? Ponieważ wartości ujemne oznaczają, że dodatkowo chcemy narysować promienie wychodzące od środka okręgu do punktów "start" i "koniec". Jeżeli chodzi o zasadę rysowania wycinków, to polega ona na tym że program rozpoczyna wycinek w punkcie "start" (punkt 0 jest ułożony poziomo po prawej stronie okręgu), po czym porusza się przeciwnie do ruchu wskazówek zegara i kończy na punkcie "koniec". Nasuwa się pytanie, jak wypełnić okrąg i tym samym narysować koło. Sprawa jest troszkę trudniejsza, niż w przypadku prostokątu. Aby wypełnić okrąg musimy posłużyć się poleceniem PAINT (x,y), kolor_wypełnienia, kolor_krawędzi.

10 REM Prg6.6 - Wypelnianie obiektow
20 CLS
30 SCREEN 9
40 CIRCLE (320, 150), 100, 10
50 PAINT (320,150), 12, 10
60 SLEEP 5

Ponownie jak w przykładzie Prg6.4 zostaje narysowany okrąg o środku w punkcie (320,150), promieniu 100 i kolorze 10, po czym w linii 50 następuję wypełnienie obiektu w punkcie (320,150) o kolorze wypełnienia 12 i kolorze krawędzi 10. Wszystko w porządku, tylko co oznacza kolor krawędzi ? Otóż jest to numer koloru, który ogranicza obszar malowania. Jeżeli zamienisz wartość koloru_krawędzi (10) na dowolny inny kolor, cały ekran zostanie zamalowany. Polecenia PAINT można użyć do wypełniania dowolnych obiektów. Można go również użyć do pewnej sztuczki, co pokażę na poniższym przykładzie:

10 REM Prg6.7 - Nowe zastosowanie polecenia PAINT
20 CLS
30 SCREEN 9
40 PAINT (0,0), CHR$(85)
50 SLEEP 5

Współczynniki x i y nie są w tym przypadku istotne bowiem polecenie PAINT dotyczy całej możliwej powierzchni ekranu i właśnie dlatego wpisałem (0,0). Bardziej istotny jest fragment CHR$(85), który określa wzór wypełnienia. Numer w nawiasie informuje o wyglądzie wzoru wypełnienia i może przyjmować wartości od 0 do 255 (czyli tyle co 2 do potęgi 8). Aby wiedzieć jak wygląda wzór malowania, należy znać system dwójkowy. Liczba 85 (zapisana w systemie dziesiętnym) odpowiada liczbie 01010101 (zapisanej w systemie dwójkowym). Jedynka oznacza, że dana linia ma zostać wypełniona wybranym kolorem. Nasuwa się jednak pytanie - jakim kolorem, skoro żadnego nie wybierałem ? Na to pytanie odpowiem po zapoznaniu się z poniższym przykładem:

10 REM Prg6.8 - Nowe zastosowanie polecenia PAINT - zmiana koloru
20 CLS
30 SCREEN 9
40 PAINT (0,0), CHR$(0) + CHR$(85)
50 SLEEP 5

Jak widać, kolor zmienił się na zielony. Zostało to spowodowane dopisaniem fragmentu CHR$(0), który dodaje +1 do wartości koloru (tym samym wartość koloru = 2 co odpowiada kolorowi zielonemu ; jedynka odpowiadała kolorowi granatowemu). Wystarczy zatem dopisać CHR$(0) przed CHR$(x) w takiej ilości jaka jest nam potrzebna, aby otrzymać zamierzony kolor. Można również wykorzystać kilka kolorów i kilka wzorów wypełnienia, dzięki czemu uzyska się ciekawy efekt:

10 REM Prg6.9 - Nowe zastosowanie polecenia PAINT - zmiana koloru cz.2
20 CLS
30 SCREEN 9
40 PAINT (0, 0), CHR$(0) + CHR$(85) + CHR$(0) + CHR$(100)
50 SLEEP 5

W tym przypadku ciemny i jasny kolor zielony są malowane na przemian. Ostatnim poleceniem, o którym jedynie wspomnę będzie PSET (x,y),kolor, które zapala piksel w punkcie "x i y" o kolorze "kolor". Uważam że jest to proste polecenie i przykłady obrazujące jego użycie będą raczej zbędne.

 

Język

Polska wersja językowa    English language version

Poleć stronę

Aby polecić aktualnie oglądaną stronę kliknij:

Licznik wizyt

Liczniki

Kontakt

Wiadomości

03.12.2013

Dodano opis gry Stellar System.

16.06.2013

Dodano opis programu "System Sprzedaży", oraz poprawiono treści na stronie.

10.05.2012

Strona została całkowicie przebudowana. Zmieniono layout, poprawiono teksty, oraz dodano angielską wersję strony.