Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.39 KB | None | 0 0
  1. // Nagłówek standardowych funkcji matematycznych
  2. #include <math.h>
  3.  
  4. // Dołącz definicje biblioteki Allegro
  5. #include <allegro.h>
  6.  
  7.  
  8. // Bitmapa Allegro, na której będziemy rysowali grafikę przed
  9. // pokazaniem jej na ekranie. Dzięki temu grafika w trakcie
  10. // rysowania nie jest widoczna, a jest pokazywana użytkownikowi
  11. // dopiero wówczas, gdy jej rysowanie jest zakończone i jest
  12. // gotowa do wyświetlenia.
  13. //
  14. BITMAP *buffer;
  15.  
  16.  
  17.  
  18. /*
  19. ***************************************************************************
  20.  
  21. Ekran ma wymiary: w poziomie 0..SCREEN_W-1, w pionie 0..SCREEN_H-1, przy czym
  22. poczatek ukladu wspolrzednych znajduje sie w lewym gornym rogu ekranu.
  23.  
  24. Rysowanie podstawowych obiektow graficznych umozliwiaja nastepujace procedury:
  25.  
  26.         create_bitmap( szerokość, wysokość ) - tworzy i zwraca bitmapę o określonym rozmiarze
  27.  
  28.         load_bitmap( ścieżka_pliku, paleta ) - wczytuje bitmapę z dysku (formaty BMP i TGA)
  29.                 jako parametr paleta można podać NULL (w trybach 32-bitowego koloru nie korzysta się z palet)
  30.  
  31.         destroy_bitmap( bitmapa ) - usuwa utworzoną/wczytaną wcześniej bitmapę
  32.  
  33.         blit( bitmapa_z, bitmapa_do, sx, sy, dx, dy, szerokość, wysokość ) - kopiuje
  34.                 fragment bitmapy do innej bitmapy, kopiowany jest fragment, który ma
  35.                 lewy górny róg na bitmapie wyjściowej umieszczony w punkcie (sx,sy),
  36.                 po kopiowaniu ten róg trafia w punkt (dx,dy) bitmapy docelowej,
  37.                 kopiowany jest fragment o podanej szerokości i wysokości
  38.  
  39.         bitmapa->w              - pozwala odczytać szerokość bitmapy
  40.         bitmapa->h              - pozwala odczytać wysokość bitmapy
  41.  
  42.         makecol( r, g, b ) - zwraca numer wybranego koloru
  43.                 r, g, b - wartości kanału czerwonego, zielonego i niebieskiego
  44.                                   w zakresie 0..255
  45.  
  46.         clear(bitmapa) - czyści daną bitmapę
  47.  
  48.         clear_to_color(bitmapa, kolor) - jak wyżej, lecz czyści na określony kolor
  49.  
  50.         putpixel(bitmapa, x, y, kolor) - zmienia kolor punktu o wspolrzędnych (x,y).
  51.  
  52.         line(bitmapa, x1, y1, x2, y2, kolor) - rysuje odcinek między punktami (x1,y1) a (x2,y2).
  53.  
  54.         textout_ex(bitmapa, font, tekst, x, y, kolor, kolor_tła) - wyświetla tekst
  55.                 jako czcionkę (font) można podać czcionkę domyslną (jest w zmiennej globalnej "font")
  56.                 jeżeli za kolor_tła podamy -1 tekst wyświetli się z tłem przezroczystym
  57.  
  58.         floodfill(bitmapa, x, y, kolor) - wypełnia ograniczony obszar danym kolorem,
  59.                 przy czym (x,y) wskazuje punkt wnetrza obszaru wypełnianego.
  60.  
  61.         rectfill(bitmapa, x1, y1, x2, y2, kolor) - rysuje wypełniony prostokat, ktorego
  62.                 lewy gorny rog ma wspolrzedne (x1, y1), a prawy dolny (x2-1, y2-1)
  63.  
  64.         circle(bitmapa, x, y, r, kolor) - kresli okrag o srodku w
  65.                 punkcie o wspolrzednych (x, y) i promieniu r
  66.  
  67.         circlefill(bitmapa, x, y, r, kolor) - jak wyżej, lecz okrąg jest wypełniony
  68.  
  69.         polygon(bitmapa, ilość_wierzchołków, tablica_współrzędnych, kolor) -
  70.                 rysuje wypełniony wielokąt, w tablicy współrzędnych powinny znajdować się
  71.                 naprzemian współrzędne X i Y kolejnych wierzchołków wielokąta
  72.  
  73.  
  74. */
  75.  
  76.  
  77.  
  78. // Funkcja główna
  79. int main()
  80. {
  81.         allegro_init();                         // Inicjalizacja biblioteki Allegro
  82.         install_keyboard();                     // Inicjalizacja obsługi klawiatury
  83.  
  84.         // Uruchomienie trybu graficznego
  85.         // Pracujemy w oknie (WINDOWED) w rozdzielczości 640x480
  86.         // z 32-bitowym kolorem.
  87.         set_color_depth(32);
  88.         set_gfx_mode(GFX_AUTODETECT_WINDOWED, 1280, 1024, 0, 0);
  89.  
  90.         // Utwórz bitmapę, na której będzie się odbywało rysowanie
  91.         // Bitmapa ma szerokość i wysokość taką, jak nasz "ekran"
  92.         buffer = create_bitmap(SCREEN_W,SCREEN_H);
  93.  
  94.         //
  95.  
  96.         // Definicja wieloboku
  97.         const int N = 3;
  98.         int triangleRedX[N]={-100,0,100};
  99.         int triangleRedY[N]={-150,-325,-150};
  100.         int triangleYellowX[N]={-50,0,50};
  101.         int triangleYellowY[N]={-175,-275,-175};
  102.  
  103.         // Tablice na przetworzone współrzędna punktów
  104.         int pointsRed[2*N];
  105.         int pointsYellow[2*N];
  106.  
  107.         // Zmienne na potrzeby obracania figury
  108.         double fi=0.0, dfi=0.1, sinfi, cosfi;//kat obrotu
  109.         double zoom=1.0;
  110.         int move = 0;
  111.  
  112.  
  113.         // Pętla główna programu, tablica globalna key[] przechowuje
  114.         // aktualny stan (wciśnięty/puszczony) wszystkich klawiszy.
  115.         // Działamy, dopóki użytkownik nie wciśnie Esc.
  116.         while(!key[KEY_ESC])
  117.         {
  118.                 // Wyczyść bitmapę
  119.                 clear(buffer);
  120.  
  121.                 // Wyznacz środek ekranu;
  122.                 int xm = SCREEN_W/2 + move;
  123.                 int ym = SCREEN_H/2;
  124.                 // Obrót figury
  125.                 sinfi = sin(fi);
  126.                 cosfi = cos(fi);
  127.                 for( int i=0; i<N; i++ )
  128.                 {
  129.                         pointsRed[2*i  ] = (int)( zoom*triangleRedX[i]*cosfi - zoom*triangleRedY[i]*sinfi + 0.5) + xm;
  130.                         pointsRed[2*i+1] = (int)( zoom*triangleRedX[i]*sinfi + zoom*triangleRedY[i]*cosfi + 0.5) + ym;
  131.                         pointsYellow[2*i  ] = (int)( zoom*triangleYellowX[i]*cosfi - zoom*triangleYellowY[i]*sinfi + 0.5) + xm;
  132.                         pointsYellow[2*i+1] = (int)( zoom*triangleYellowX[i]*sinfi + zoom*triangleYellowY[i]*cosfi + 0.5) + ym;
  133.                 }
  134.                 fi += dfi;
  135.                 if(key[KEY_UP])
  136.                 {
  137.                     if(zoom<10) zoom+=0.01;
  138.                 }
  139.                 if(key[KEY_DOWN])
  140.                 {
  141.                     if (zoom > 0 ) zoom-=0.01;
  142.                 }
  143.                 if(key[KEY_LEFT])
  144.                 {
  145.                     move-=5;
  146.                 }
  147.                 if(key[KEY_RIGHT])
  148.                 {
  149.                     move+=5;
  150.                 }
  151.                 // Kolory rysowania
  152.                 int c0 = makecol( 255, 255,   0 );      // żółty
  153.                 int c1 = makecol( 255, 0, 0 );  // czerwony
  154.  
  155.                 // Narysuj wypełniony wielokat
  156.                 polygon( buffer, N, pointsRed, c0 );
  157.                 polygon( buffer, N, pointsYellow, c1 );
  158.  
  159.                 // Poczekaj aż karta graficzna skończy wyświetlać aktualny obraz.
  160.                 // Inaczej moglibyśmy podmienić grafikę w trakcie jej wyświetlania
  161.                 // przez kartę, przez co na ekranie przez chwilę byłby widoczny
  162.                 // obraz złożony z fragmentów różnych klatek.
  163.                 vsync();
  164.  
  165.                 // Skopiuj bufor na ekran
  166.                 // (screen jest bitmapą reprezentującą powierzchnię ekranu,
  167.                 //  a blit() jest funkcją kopiującą prostokątne obszary bitmap)
  168.                 blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);
  169.  
  170.                 // Odczekaj 10 milisekund
  171.                 rest(10);
  172.         }
  173.         //rest(1000);
  174.         // Usuń bitmapę bufora
  175.         destroy_bitmap( buffer );
  176.  
  177.         // Koniec
  178.         return 0;
  179. }
  180.  
  181. // Definicja mówiąca Allegro, że powyższa funkcja jest funkcją główną,
  182. // co pozwala skompilować powyższy kod bez żadnych zmian na wielu
  183. // systemach operacyjnych.
  184. END_OF_MAIN()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement