====== GDI ====== ===== Zadanie 1 - Paint ===== Zaimplementuj aplikację, która pozwala rysować przy pomocy myszki po oknie głównym. Rysowanie odbywa się po wciśnięciu lewego klawisza myszy domyślnym piórem. Dodaj do programu możliwość zmiany koloru posaka oraz zmiany jego grubości. ====Przydatne funkcje==== * funkcja [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd144871%28v=vs.85%29.aspx|GetDC]] uzyskuje uchwyt do DC (//device context//) * funkcja ReleaseDC() zamyka DC * funkcja [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd145069%28v=vs.85%29.aspx|MoveToEx]] przesuwa pióro do wskazanej pozycji * funkcja [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd145029%28v=vs.85%29.aspx|LineTo]] rysuje linię do wskazanej pozycji * komunikaty ''[[https://msdn.microsoft.com/en-us/library/windows/desktop/ms645607(v=vs.85).aspx|WM_LBUTTONDOWN]]'', ''[[https://msdn.microsoft.com/en-us/library/windows/desktop/ms645608(v=vs.85).aspx|WM_LBUTTONUP]]'', ''[[https://msdn.microsoft.com/en-us/library/windows/desktop/ms645616(v=vs.85).aspx|WM_MOUSEMOVE]]'' wołane w czasie zdarzeń związanych z myszą (wciśnięcie lewego klawisz, zwolnienie lewego klawisza i ruch myszą) * finckja [[https://msdn.microsoft.com/pl-pl/library/windows/desktop/ms646912(v=vs.85).aspx|ChooseColor()]] z biblioteki ''Commdlg.h'' tworzy okno dialogowe umożliwiające wybrać kolor. ===== Zadanie 2 - Najeźdzcy z kosmosu ===== Zaimplementuj grę Space Invaders. {{ http://computerarcheology.com/Arcade/SpaceInvaders/SpaceInvaders.jpg?400 }} Gracz porusza za pomocą klawiszy pojazdem kosmicznym w lewo i w prawo oraz oddaje strzał po wciśnięciu spacji. Wrogie statki kosmiczne poruszają się automatycznie i w losowych odstępachch czasu oddają strzał do pojazdu gracza. Każdy zestrelony statek wroga zwiększa wartość punktów wyświetlanych na liczniku u dołu ekranu. Sprity (statek gracza i wrogie statki) zrealizowane są za pomocą bitmap. Przygotuj własne animacje (bitmapy) lub skorzystaj z poniższych grafik: {{ https://therush.files.wordpress.com/2013/08/invaders.png?50 }} {{zajecia:winprog_2018_1:invaders.bmp|invaders.bmp }} ====Przydatne funkcje==== ==== Device Context ==== * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd144871%28v=vs.85%29.aspx|GetDC]] - uzyskanie uchwytu do DC (//device context//) * ReleaseDC * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd183362%28v=vs.85%29.aspx|BeginPaint]] - przygotowanie okna do rysowania dla komunikatu ''WM_PAINT'' * EndPaint **[[https://msdn.microsoft.com/en-us/library/windows/desktop/dd144962(v=vs.85).aspx|Obiekty GDI]]** * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd144904%28v=vs.85%29.aspx|GetObject]] - uzuskuje informacje na temat obiektu DC * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd162957%28v=vs.85%29.aspx|SelectObject]] - ustawia wzkazany obiekt w kontekście DC * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd183539%28v=vs.85%29.aspx|DeleteObject]] - niszczy obiekt * Pen * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd183509%28v=vs.85%29.aspx|CreatePen]] - długopis/pisak * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd162970%28v=vs.85%29.aspx|SetDCPenColor]] * Brush * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd183518%28v=vs.85%29.aspx|CreateSolidBrush]] - pędzel * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd183504%28v=vs.85%29.aspx|CreateHatchBrush]] - pędzel z wzorem * Font * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd183499%28v=vs.85%29.aspx|CreateFont]] - font * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd145133%28v=vs.85%29.aspx|TextOut]] - wypisuje tekst w zadanej pozycji * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd162498%28v=vs.85%29.aspx|DrawText]] - wypisuje tekst we wskazanej pozycji * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd145093%28v=vs.85%29.aspx|SetTextColor]] - ustawia kolor tekstu * Bitmap * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd145033%28v=vs.85%29.aspx|LoadBitmap]] - wczytanie bitmapy * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd183489%28v=vs.85%29.aspx|CreateCompatibleCD]] - utworzenie zgodnego kontekstu DC * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd183370%28v=vs.85%29.aspx|BitBlt]] - kopiowanie zawartości kontekstu DC ==== Kształty i rysowanie ==== * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd145078%28v=vs.85%29.aspx|SetPixel]] - rysywoanie pojedynczego piksela * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd145069%28v=vs.85%29.aspx|MoveToEx]] - przesunięcie pisaka * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd145029%28v=vs.85%29.aspx|LineTo]] - narysowanie linii * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd162715%28v=vs.85%29.aspx|Kształty wypełnione]] * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd162898%28v=vs.85%29.aspx|Rectangle]] - prostokąt * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd162510%28v=vs.85%29.aspx|Elipse]] - elipsa * [[https://msdn.microsoft.com/en-us/library/windows/desktop/dd162964%28v=vs.85%29.aspx|SetBkColor]] - kolor tła ==== Timer ==== * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644906%28v=vs.85%29.aspx|SetTimer]] - uruchomienie stopera * komunikat ''[[https://msdn.microsoft.com/pl-pl/library/windows/desktop/ms644902(v=vs.85).aspx|WM_TIMER]]'' wysyłany po określonym czasie od uruchomienia czasomierza * [[https://msdn.microsoft.com/pl-pl/library/windows/desktop/ms644903(v=vs.85).aspx|KillTimer]] - zatrzymuje (zabija) stoper ==== Sterowanie ==== * komunikaty związane z obsługą klawiszy [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms646280(v=vs.85).aspx|WM_KEYDOWN]], [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms646281(v=vs.85).aspx|WM_KEYUP]] ===== Space invaders c.d. ===== Zmodyfikuj grę space invaders w taki sposób aby rysowanie sceny oraz znimacje realiowane były w osobnym wątku.\\ Przydatne funkcje: * [[https://msdn.microsoft.com/en-us/library/ms682453%28VS.85%29.aspx|CreateThread]] tworzenie wątku * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms686717%28v=vs.85%29.aspx|TerminateThread]] przerywanie działania wątku * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms724211%28v=vs.85%29.aspx|CloseHandle]] zamyka uchwyt do obiektu (np. do wątku)