Advertisement
Guest User

jajka

a guest
Dec 18th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.01 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <vector>
  3. #include <time.h>
  4. #include "resource.h"
  5.  
  6. using namespace std;
  7.  
  8.  
  9.  
  10. TCHAR Nazwa_Klasy[] = TEXT("Klasa okna");
  11. TCHAR Nazwa_Okna[] = TEXT("Okno");
  12.  
  13. enum{BMP_TLO, BMP_KOSZYK, BMP_KOSZYK_MASKA, BMP_JAJKO, BMP_JAJKO_MASKA, BMP_ROZBITE_JAJKO, BMP_ROZBITE_JAJKO_MASKA};
  14.  
  15. enum { TIMER_ODSWIEZANIE = 0, TIMER_LOSOWANIE = 1, TIMER_ROZBITE=2 };
  16.  
  17. void kopiujBitmape(HDC hdcBuffor, HBITMAP Bmp, POINT polozenie, DWORD operacja)
  18. {
  19. HDC temp = CreateCompatibleDC(hdcBuffor);
  20. HBITMAP OldBmp = (HBITMAP)SelectObject(temp, Bmp);
  21. BITMAP Info;
  22. GetObject(Bmp, sizeof(Info), &Info);
  23. BitBlt(hdcBuffor, polozenie.x, polozenie.y, Info.bmWidth, Info.bmHeight, temp, 0, 0, operacja);
  24. SelectObject(temp, OldBmp);
  25. DeleteObject(temp);
  26. }
  27.  
  28. void Wyswietl(HDC hdc, vector<HBITMAP>&bitmapy, vector<POINT> &jajka, vector<POINT>&rozbite, POINT GRACZ, int WIDTH, int HEIGHT)
  29. {
  30. HDC hdcBuffor = CreateCompatibleDC(hdc);
  31. HBITMAP BmpBuffor = CreateCompatibleBitmap(hdc, WIDTH, HEIGHT);
  32. HBITMAP OldBmpBuffor = (HBITMAP)SelectObject(hdcBuffor, BmpBuffor);
  33.  
  34. kopiujBitmape(hdcBuffor, bitmapy[BMP_TLO], { 0,0 }, SRCCOPY);
  35.  
  36. kopiujBitmape(hdcBuffor, bitmapy[BMP_KOSZYK_MASKA], GRACZ, SRCAND);
  37. kopiujBitmape(hdcBuffor, bitmapy[BMP_KOSZYK], GRACZ, SRCPAINT);
  38.  
  39. for (int i = 0; i < jajka.size(); i++)
  40. {
  41. kopiujBitmape(hdcBuffor, bitmapy[BMP_JAJKO_MASKA], jajka[i], SRCAND);
  42. kopiujBitmape(hdcBuffor, bitmapy[BMP_JAJKO], jajka[i], SRCPAINT);
  43. }
  44.  
  45. for (int i = 0; i < rozbite.size(); i++)
  46. {
  47. kopiujBitmape(hdcBuffor, bitmapy[BMP_ROZBITE_JAJKO_MASKA],rozbite[i] , SRCAND);
  48. kopiujBitmape(hdcBuffor, bitmapy[BMP_ROZBITE_JAJKO], rozbite[i], SRCPAINT);
  49. }
  50.  
  51. BitBlt(hdc, 0, 0, WIDTH, HEIGHT, hdcBuffor, 0, 0, SRCCOPY);
  52. SelectObject(hdcBuffor, OldBmpBuffor);
  53. DeleteDC(hdcBuffor);
  54. DeleteObject(BmpBuffor);
  55. }
  56.  
  57.  
  58. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  59. {
  60. static vector<HBITMAP> bitmapy;
  61. static vector<POINT> jajka;
  62. static vector<POINT> rozbite;
  63. static POINT jajko, koszyk;
  64. static POINT GRACZ;
  65. static const int przesuniecie = 5;
  66. static RECT rect;
  67. static int WIDTH;
  68. static int HEIGHT;
  69. static int licznik = 0;
  70.  
  71. switch (msg)
  72. {
  73. case WM_CREATE:
  74. {
  75. srand(time(0));
  76. GetClientRect(hwnd, &rect);
  77. WIDTH = rect.right;
  78. HEIGHT = rect.bottom;
  79.  
  80. bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_TLO)));
  81. bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_KOSZYK)));
  82. bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_KOSZYK_MASKA)));
  83. bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_JAJKO)));
  84. bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_JAJKO_MASKA)));
  85. bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_ROZBITE_JAJKO)));
  86. bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_ROZBITE_JAJKO_MASKA)));
  87.  
  88. BITMAP Info;
  89. GetObject(bitmapy[BMP_JAJKO], sizeof(Info), &Info);
  90. jajko = { Info.bmWidth, Info.bmHeight };
  91. GetObject(bitmapy[BMP_KOSZYK], sizeof(Info), &Info);
  92. koszyk = { Info.bmWidth, Info.bmHeight };
  93. GRACZ = { (WIDTH - koszyk.x) / 2, HEIGHT-koszyk.y };
  94.  
  95. if (!SetTimer(hwnd, 0, 10, NULL))
  96. {
  97. MessageBox(NULL, TEXT("Nie udało się utworzyć timera"), TEXT("Błąd"), MB_ICONWARNING);
  98. return 0;
  99. }
  100. if (!SetTimer(hwnd, 1, 1000, NULL))
  101. {
  102. MessageBox(NULL, TEXT("Nie udało się utworzyć timera"), TEXT("Błąd"), MB_ICONWARNING);
  103. return 0;
  104. }
  105. if (!SetTimer(hwnd, 2, 2000, NULL))
  106. {
  107. MessageBox(NULL, TEXT("Nie udało się utworzyć timera"), TEXT("Błąd"), MB_ICONWARNING);
  108. return 0;
  109. }
  110. break;
  111. }
  112. /*case WM_KEYDOWN:
  113. {
  114. switch (LOWORD(wParam))
  115. {
  116. case VK_LEFT:
  117. {
  118. if (GRACZ.x - przesuniecie >= 0)
  119. GRACZ.x -= przesuniecie;
  120. break;
  121. }
  122. case VK_RIGHT:
  123. {
  124. if (GRACZ.x + przesuniecie + koszyk.x <= WIDTH)
  125. GRACZ.x += przesuniecie;
  126. break;
  127. }
  128. break;
  129. }
  130. }*/
  131. case WM_TIMER:
  132. {
  133. switch (LOWORD(wParam))
  134. {
  135. case TIMER_ODSWIEZANIE:
  136. {
  137. if (GetAsyncKeyState(VK_LEFT) && GRACZ.x - przesuniecie >= 0)
  138. GRACZ.x -= przesuniecie;
  139.  
  140. else if(GetAsyncKeyState(VK_RIGHT) && GRACZ.x + przesuniecie + koszyk.x <= WIDTH)
  141. GRACZ.x += przesuniecie;
  142.  
  143. for (int i = 0; i < jajka.size(); i++)
  144. {
  145. jajka[i].y += przesuniecie;
  146. if (jajka[i].y >= HEIGHT - koszyk.y)
  147. {
  148. if (jajka[i].x >= GRACZ.x && jajka[i].x <= GRACZ.x + koszyk.x)
  149. {
  150. licznik++;
  151. TCHAR bufor[30];
  152. wsprintf(bufor, TEXT("Liczba złapanych jajek = %d"), licznik);
  153. SetWindowText(hwnd, bufor);
  154. jajka.erase(jajka.begin() + i);
  155. }
  156. else if (jajka[i].y + jajko.y >= HEIGHT)
  157. {
  158. rozbite.push_back(jajka[i]);
  159. jajka.erase(jajka.begin() + i);
  160.  
  161. }
  162. }
  163. }
  164.  
  165. break;
  166. }
  167. case TIMER_LOSOWANIE:
  168. {
  169.  
  170. jajka.push_back({ rand() % WIDTH - jajko.x, 0 });
  171. break;
  172. }
  173. case TIMER_ROZBITE:
  174. {
  175. if (!rozbite.empty())
  176. {
  177. rozbite.erase(rozbite.begin());
  178. }
  179.  
  180. break;
  181. }
  182. }
  183.  
  184. InvalidateRect(hwnd, &rect, false);
  185. break;
  186. }
  187. case WM_PAINT:
  188. {
  189. PAINTSTRUCT ps;
  190. HDC hdc = BeginPaint(hwnd, &ps);
  191. Wyswietl(hdc, bitmapy, jajka, rozbite, GRACZ, WIDTH, HEIGHT);
  192.  
  193. EndPaint(hwnd, &ps);
  194. break;
  195. }
  196. case WM_CLOSE:
  197. {
  198. if (MessageBox(hwnd, TEXT("Czy chcesz zakończyć działanie programu?"), TEXT("Pytanie"), MB_OKCANCEL) == IDOK)
  199. DestroyWindow(hwnd);
  200. break;
  201. }
  202. case WM_DESTROY:
  203. {
  204. PostQuitMessage(0);
  205. break;
  206. }
  207. default: return DefWindowProc(hwnd, msg, wParam, lParam);
  208. }
  209. return 0;
  210. }
  211.  
  212. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR nCmdLine, int nCmdShow)
  213. {
  214. const int WIDTH = 640;
  215. const int HEIGHT = 480;
  216. MSG Komunikat;
  217.  
  218. WNDCLASSEX wc;
  219.  
  220. wc.cbClsExtra = NULL;
  221. wc.cbSize = sizeof(WNDCLASSEX);
  222. wc.cbWndExtra = NULL;
  223. wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  224. wc.hCursor = LoadCursor(hInstance, IDC_ARROW);
  225. wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
  226. wc.hIconSm = LoadIcon(hInstance, IDI_APPLICATION);
  227. wc.hInstance = hInstance;
  228. wc.lpfnWndProc = WndProc;
  229. wc.lpszClassName = Nazwa_Klasy;
  230. wc.lpszMenuName = NULL;
  231. wc.style = CS_VREDRAW | CS_HREDRAW;
  232.  
  233. if (!RegisterClassEx(&wc))
  234. {
  235. MessageBox(0, TEXT("Nie udało się zarejestrować klasy"), TEXT("Błąd"), MB_ICONWARNING);
  236. return 0;
  237. }
  238.  
  239. HWND okno = CreateWindowEx(WS_EX_CLIENTEDGE, Nazwa_Klasy, Nazwa_Okna, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WIDTH, HEIGHT, NULL, NULL, hInstance, NULL);
  240.  
  241. if (okno == NULL)
  242. {
  243. MessageBox(0, TEXT("Nie udało się utworzyć okna"), TEXT("Błąd"), MB_ICONWARNING);
  244. return 0;
  245. }
  246.  
  247. UpdateWindow(okno);
  248. ShowWindow(okno, SW_SHOW);
  249.  
  250. while (GetMessage(&Komunikat, 0, 0, 0) > 0)
  251. {
  252. TranslateMessage(&Komunikat);
  253. DispatchMessage(&Komunikat);
  254. }
  255.  
  256. UnregisterClass(Nazwa_Klasy, hInstance);
  257.  
  258. return Komunikat.wParam;
  259. }
  260.  
  261. /////////////resource.h
  262.  
  263. //{{NO_DEPENDENCIES}}
  264. // Microsoft Visual C++ generated include file.
  265. // Used by jajka.rc
  266. //
  267. #define IDB_JAJKO 101
  268. #define IDB_JAJKO_MASKA 102
  269. #define IDB_ROZBITE_JAJKO 103
  270. #define IDB_ROZBITE_JAJKO_MASKA 104
  271. #define IDB_KOSZYK 105
  272. #define IDB_KOSZYK_MASKA 106
  273. #define IDB_BITMAP7 107
  274. #define IDB_TLO 107
  275.  
  276. // Next default values for new objects
  277. //
  278. #ifdef APSTUDIO_INVOKED
  279. #ifndef APSTUDIO_READONLY_SYMBOLS
  280. #define _APS_NEXT_RESOURCE_VALUE 108
  281. #define _APS_NEXT_COMMAND_VALUE 40001
  282. #define _APS_NEXT_CONTROL_VALUE 1001
  283. #define _APS_NEXT_SYMED_VALUE 101
  284. #endif
  285. #endif
  286.  
  287. ///////////////////plik.rc
  288.  
  289. // Microsoft Visual C++ generated resource script.
  290. //
  291. #include "resource.h"
  292.  
  293. #define APSTUDIO_READONLY_SYMBOLS
  294. /////////////////////////////////////////////////////////////////////////////
  295. //
  296. // Generated from the TEXTINCLUDE 2 resource.
  297. //
  298. #include "winres.h"
  299.  
  300. /////////////////////////////////////////////////////////////////////////////
  301. #undef APSTUDIO_READONLY_SYMBOLS
  302.  
  303. /////////////////////////////////////////////////////////////////////////////
  304. // Polish (Poland) resources
  305.  
  306. #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_PLK)
  307. LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
  308.  
  309. #ifdef APSTUDIO_INVOKED
  310. /////////////////////////////////////////////////////////////////////////////
  311. //
  312. // TEXTINCLUDE
  313. //
  314.  
  315. 1 TEXTINCLUDE
  316. BEGIN
  317. "resource.h\0"
  318. END
  319.  
  320. 2 TEXTINCLUDE
  321. BEGIN
  322. "#include ""winres.h""\r\n"
  323. "\0"
  324. END
  325.  
  326. 3 TEXTINCLUDE
  327. BEGIN
  328. "\r\n"
  329. "\0"
  330. END
  331.  
  332. #endif // APSTUDIO_INVOKED
  333.  
  334.  
  335. /////////////////////////////////////////////////////////////////////////////
  336. //
  337. // Bitmap
  338. //
  339.  
  340. IDB_JAJKO BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\jajko.bmp"
  341.  
  342. IDB_JAJKO_MASKA BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\jajko_maska.bmp"
  343.  
  344. IDB_ROZBITE_JAJKO BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\jajko_rozbite.bmp"
  345.  
  346. IDB_ROZBITE_JAJKO_MASKA BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\jako_rozbite_maska.bmp"
  347.  
  348. IDB_KOSZYK BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\koszyk.bmp"
  349.  
  350. IDB_KOSZYK_MASKA BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\koszyk_maska.bmp"
  351.  
  352. //IDB_TLO BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\tlolo.bmp"
  353.  
  354. #endif // Polish (Poland) resources
  355. /////////////////////////////////////////////////////////////////////////////
  356.  
  357.  
  358.  
  359. #ifndef APSTUDIO_INVOKED
  360. /////////////////////////////////////////////////////////////////////////////
  361. //
  362. // Generated from the TEXTINCLUDE 3 resource.
  363. //
  364.  
  365.  
  366. /////////////////////////////////////////////////////////////////////////////
  367. #endif // not APSTUDIO_INVOKED
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement