szystkie programy, kt≤re dot▒d napisa│e╢, s▒ bardzo podobne z wygl▒du: czarne t│o i szare komunikaty. Na tym poziomie, kiedy znasz ju┐ wszystkie najwa┐niejsze zasady (wszystkie najwa┐niejsze to nie znaczy wszystkie!), mo┐e to wydaµ siΩ nudne. Nadszed│ wiΩc czas aby urozmaiciµ wygl▒d programu kolorami.
Do wyboru mamy 16 kolor≤w o numerach od 0 do 15 (przyjmowaµ bΩdziemy zapis dziesiΩtny).
Standardowymi kolorami s▒ jasnoszary dla tekstu i czarny je╢li chodzi o t│o. Aby zmieniµ kolor tekstu wystarczy zaznaczyµ to funkcja textcolor(nr_koloru);. Od tej pory wszystkie nastΩpne komunikaty bΩd▒ wypisywane w danym kolorze. Przyk│ad:
#include <stdio.h> #include <conio.h> main (void) clrscr(); for(int i=1;i<=15;i++) { textcolor(i); cprintf("Anna Miedzianowska"); printf("\n"); } getch(); return 0; }
Efekt dzia│ania programu to wygl▒d ekranu:
W programie u┐yli╢my pΩtli, aby w prosty spos≤b zilustrowaµ wszystkie dostΩpne kolory napis≤w (oczywi╢cie opr≤cz czarnego, kt≤rego nie by│oby widaµ). Do wy╢wietlenia kolorowego komunikatu s│u┐y funkcja cprintf. Dzia│a ona identycznie jak printf, jednak nie obs│u┐y nam znaku specjalnego "\n", czyli przej╢cia do nowej linii. Aby to zrobiµ nale┐y u┐yµ dodatkowo funkcji printf(), kt≤ra nic nie wypisze, tylko umie╢ci kursor w nowej linii.
Numery u┐ytych kolor≤w przyjmuj▒ kolejne warto╢ci od 1 do 15 i takie w│a╢nie warto╢ci przyjmuje nasz licznik i w pΩtli for. Mam nadziejΩ, ┐e zauwa┐y│e╢, i┐ zmienna i nie jest zadeklarowana na samym pocz▒tku tak jak robili╢my to dotychczas, lecz bezpo╢rednio przed u┐yciem. Mo┐na tak postΩpowaµ, jednak┐e lepiej jest wszystkie zmienne deklarowaµ w tym samym miejscu, czyli np. na pocz▒tku programu. Od momentu deklaracji takiej zmiennej (czyli w dalszej czΩ╢ci kodu) mo┐na jej u┐ywaµ normalnie, czyli tak jakby zosta│a zadeklarowana na pocz▒tku.
T│o, czyli to, co na razie jest czarne, r≤wnie┐ mo┐emy zmieniµ na inny kolor. W tym przypadku mamy jednak do dyspozycji tylko pierwszych 8 kolor≤w (od 0 do 7). Do zmiany koloru t│a s│u┐y funkcja textbackround(nr_koloru); U┐ycie jej nie zmieni nam jednak ca│ego t│a na ekranie, lecz tylko t│o komunikatu. Uzyskujemy w ten spos≤b kolorowy pasek z tekstem. Na przyk│ad:
#include <stdio.h> #include <conio.h> main (void) clrscr(); textcolor(15); for(int i=0;i<=7;i++) { textbackground(i); cprintf("Anna Miedzianowska"); printf("\n"); } getch(); return 0 ; }
I efekt:
Kolory t│a i tekstu mo┐na zmieniµ za jednym razem za pomoc▒ funkcji textattr(liczba);. W jaki spos≤b w jednej liczbie zapisaµ dwie? Zapis dziesiΩtny staje siΩ tu ma│o czytelny, chyba, ┐e zastosujemy zapis w postaci niewielkiego dzia│ania matematycznego. LiczbΩ mo┐emy zapisaµ: liczba=16*tlo+tekst;. Tak przedstawione atrybuty sk│adaj▒ siΩ na liczbΩ czyteln▒ dla kompilatora i zawieraj▒ informacje jednocze╢nie o dw≤ch cechach: kolorze t│a i kolorze tekstu.
Kt≤ry spos≤b jest lepszy? Wyb≤r nale┐y do programisty. Wa┐ne jest to, ┐e na 2 sposoby mo┐emy uzyskaµ ten sam efekt. W poni┐szym przyk│adzie zrezygnowa│am z instrukcji for, aby przedstawiµ kilka wybranych po│▒czen koloru tekstu i t│a. Projektuj▒c stronΩ tytu│owa mo┐na za pomoc▒ tych prostych funkcji uzyskaµ bardzo estetyczny wygl▒d.
#include <stdio.h> #include <conio.h> main (void) clrscr(); textattr(16*1+15); cprintf("Anna Miedzianowska"); printf("\n\n"); textattr(16*5+14); cprintf("Anna Miedzianowska"); printf("\n\n"); textattr(16*4+15); cprintf("Anna Miedzianowska"); printf("\n\n"); textattr(16*1+10); cprintf("Anna Miedzianowska"); printf("\n\n"); textattr(16*2+15); cprintf("Anna Miedzianowska"); getch(); return 0 ; }
Tryb tekstowy, czyli tryb, w kt≤rym pracujemy od pocz▒tku tego kursu pozwala wy╢wietliµ na ekranie okre╢lon▒ ilo╢µ znak≤w. Ka┐dy znak ma taki sam rozmiar i zajmuje pewien prostok▒tny wycinek ekranu. Takich wycink≤w w trybie tekstowym jest 80x25=2000. Znaczy to, ┐e w jednej linii mo┐emy zapisaµ 80 znak≤w, a takich linii mo┐emy umie╢ciµ na ekranie 25. Skoro wiΩc ekran podzielony jest na mniejsze czΩ╢ci r≤wne co do wielko╢ci, mo┐emy potraktowaµ go jako uk│ad wsp≤│rzΩdnych. G≤rny lewy r≤g ekranu bΩdzie naszym ╢rodkiem uk│adu wsp≤│rzΩdnych, czyli punktem 0,0. Wsp≤│rzΩdne x bΩd▒ wzrasta│y od lewej do prawej od warto╢ci 0 do 79, natomiast wsp≤│rzΩdne y bΩd▒ wzrasta│y od g≤ry do do│u (odwrotnie ni┐ w modelu matematycznym) od warto╢ci 0 do 24.
Znaj▒c te zasady mo┐na swobodnie ustawiµ komunikaty na ekranie nie stosuj▒c wyg≤rowanej liczby spacji do przesuniΩcia tekstu np. na ╢rodek ekranu. S│u┐y do tego funkcja gotoxy(x,y). Przesuwa ona kursor do konkretnego miejsca na ekranie (o okre╢lonych wsp≤│rzΩdnych). Cokolwiek co nastΩpnie zostanie wy╢wietlone na ekranie, zacznie sie od tego miejsca.
#include <stdio.h> #include <conio.h> main (void) clrscr(); textattr(16*1+15); gotoxy(20,9); cprintf("Kurs jezyka C++ dla poczatkujacych"); textcolor(15); gotoxy(19,10); cprintf("================================="); textattr(16*5+14); gotoxy(27,12); cprintf("Opracowanie kursu:"); textattr(16*4+15); gotoxy(20,14); cprintf(" A n n a M i e d z i a n o w s k a "); textattr(16*2+15); gotoxy(19,16); cprintf(" http://annamiedzianowska.republika.pl "); textcolor(3); gotoxy(30,18); cprintf("ania12345@go2.pl"); getch(); return 0 ; }
I efekt:
Podsumowuj▒c: