Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <deque>
- #include <time.h>
- using namespace std;
- #define ID_TIMER1 1
- #define ID_TIMER2 2
- #define ID_TIMER3 3
- enum Direction
- {
- LEFT,
- RIGHT,
- NONE
- };
- struct Naboj
- {
- RECT surface;
- };
- struct Kurka
- {
- RECT surface;
- Direction dir;
- int speed;
- int yVel;
- };
- bool checkCollision(RECT r, LPARAM lParam)
- {
- DWORD mouseX = LOWORD(lParam);
- DWORD mouseY = HIWORD(lParam);
- if (mouseX > r.left && mouseX < r.right && mouseY > r.top && mouseY < r.bottom)
- return true;
- return false;
- }
- deque<Naboj> naboje;
- deque<Kurka> kurki;
- TCHAR className[] = TEXT("Nazwa_klasy");
- TCHAR appName[] = TEXT("Kurka wodna");
- LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- static BITMAP bgInfo, kurkaInfo, nabojInfo;
- static HBITMAP bg, kurka, kurkaMask, naboj, nabojMask;
- static RECT clientRect;
- HDC hdc, hdcMem;
- PAINTSTRUCT ps;
- static bool clicked = false;
- static int hit = 0;
- TCHAR buff[16];
- switch (msg)
- {
- case WM_CREATE:
- SetTimer(hwnd, ID_TIMER1, 10, NULL);
- SetTimer(hwnd, ID_TIMER2, 100, NULL);
- SetTimer(hwnd, ID_TIMER3, 1500, NULL);
- GetClientRect(hwnd, &clientRect);
- bg = (HBITMAP)LoadImage(NULL, TEXT("imgs/bg.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
- kurka = (HBITMAP)LoadImage(NULL, TEXT("imgs/kurka.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
- kurkaMask = (HBITMAP)LoadImage(NULL, TEXT("imgs/kurkaMask.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
- naboj = (HBITMAP)LoadImage(NULL, TEXT("imgs/naboj.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
- nabojMask = (HBITMAP)LoadImage(NULL, TEXT("imgs/nabojMask.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
- GetObject(bg, sizeof(bgInfo), &bgInfo);
- GetObject(kurka, sizeof(kurkaInfo), &kurkaInfo);
- GetObject(naboj, sizeof(nabojInfo), &nabojInfo);
- for (int i = 0; i < 3; i++)
- {
- Naboj n;
- n.surface.left = 10 * (i * 3);
- n.surface.top = clientRect.bottom - nabojInfo.bmHeight;
- n.surface.right = n.surface.left + nabojInfo.bmWidth;
- n.surface.bottom = clientRect.bottom;
- naboje.push_back(n);
- }
- break;
- case WM_PAINT:
- hdc = BeginPaint(hwnd, &ps);
- hdcMem = CreateCompatibleDC(hdc);
- SelectObject(hdcMem, bg);
- BitBlt(hdc, 0, 0, bgInfo.bmWidth, bgInfo.bmHeight, hdcMem, 0, 0, SRCCOPY);
- if (kurki.size() > 0)
- for (deque<Kurka>::iterator it = kurki.begin(); it != kurki.end(); it++)
- {
- SelectObject(hdcMem, kurkaMask);
- BitBlt(hdc, it->surface.left, it->surface.top, kurkaInfo.bmWidth, kurkaInfo.bmHeight, hdcMem, 0, 0, SRCAND);
- SelectObject(hdcMem, kurka);
- BitBlt(hdc, it->surface.left, it->surface.top, kurkaInfo.bmWidth, kurkaInfo.bmHeight, hdcMem, 0, 0, SRCPAINT);
- }
- if (naboje.size() > 0)
- for (deque<Naboj>::iterator it = naboje.begin(); it != naboje.end(); it++)
- {
- SelectObject(hdcMem, nabojMask);
- BitBlt(hdc, it->surface.left, it->surface.top, kurkaInfo.bmWidth, kurkaInfo.bmHeight, hdcMem, 0, 0, SRCAND);
- SelectObject(hdcMem, naboj);
- BitBlt(hdc, it->surface.left, it->surface.top, kurkaInfo.bmWidth, kurkaInfo.bmHeight, hdcMem, 0, 0, SRCPAINT);
- }
- DeleteDC(hdcMem);
- EndPaint(hwnd, &ps);
- break;
- case WM_TIMER:
- switch (wParam)
- {
- case ID_TIMER1:
- InvalidateRect(hwnd, NULL, FALSE);
- if (kurki.size() > 0)
- for (deque<Kurka>::iterator it = kurki.begin(); it != kurki.end(); it++)
- {
- it->surface.left += it->speed;
- it->surface.right += it->speed;
- }
- swprintf(buff, 16, TEXT("Trafione: %d"), hit);
- SetWindowText(hwnd, buff);
- break;
- case ID_TIMER2:
- if (kurki.size() > 0)
- for (deque<Kurka>::iterator it = kurki.begin(); it != kurki.end(); it++)
- {
- it->yVel = rand() % 20 + (-10);
- it->surface.top += it->yVel;
- it->surface.bottom += it->yVel;
- }
- break;
- case ID_TIMER3:
- {
- Kurka k;
- k.dir = static_cast<Direction>(rand() % NONE);
- if (k.dir == LEFT)
- {
- k.surface.left = -kurkaInfo.bmWidth;
- k.surface.top = rand() % clientRect.bottom;
- k.surface.right = k.surface.left + kurkaInfo.bmWidth;
- k.surface.bottom = k.surface.top + kurkaInfo.bmHeight;
- k.speed = 5;
- }
- else
- {
- k.surface.left = clientRect.right;
- k.surface.top = rand() % clientRect.bottom / 2;
- k.surface.right = clientRect.right + kurkaInfo.bmWidth;
- k.surface.bottom = k.surface.top + kurkaInfo.bmHeight;
- k.speed = -5;
- }
- kurki.push_back(k);
- }
- break;
- }
- break;
- case WM_LBUTTONUP:
- if (naboje.size() > 0)
- {
- if (kurki.size() > 0)
- for (deque<Kurka>::iterator it = kurki.begin(); it != kurki.end(); it++)
- {
- if (checkCollision(it->surface, lParam))
- {
- hit++;
- kurki.erase(it);
- break;
- }
- }
- for (deque<Naboj>::iterator it = naboje.begin(); it != naboje.end(); it++)
- {
- naboje.erase(it);
- break;
- }
- }
- break;
- case WM_KEYDOWN:
- switch ((int)wParam)
- {
- case VK_HOME:
- if (naboje.size() == 0)
- {
- for (int i = 0; i < 3; i++)
- {
- Naboj n;
- n.surface.left = 10 * (i * 3);
- n.surface.top = clientRect.bottom - nabojInfo.bmHeight;
- n.surface.right = n.surface.left + nabojInfo.bmWidth;
- n.surface.bottom = clientRect.bottom;
- naboje.push_back(n);
- }
- }
- break;
- }
- break;
- case WM_CLOSE:
- if (MessageBox(0, TEXT("Czy na pewno chcesz zakończyć działanie aplikacji?"), appName, MB_YESNO) == IDYES)
- DestroyWindow(hwnd);
- break;
- case WM_DESTROY:
- KillTimer(hwnd, ID_TIMER1);
- KillTimer(hwnd, ID_TIMER2);
- KillTimer(hwnd, ID_TIMER3);
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc(hwnd, msg, wParam, lParam);
- }
- }
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR ilCmdLine, int nCmdShow)
- {
- WNDCLASSEX wC = { 0 };
- HWND hwnd = NULL;
- MSG msg;
- wC.cbSize = sizeof(WNDCLASSEX);
- wC.style = CS_VREDRAW | CS_HREDRAW;
- wC.cbClsExtra = NULL;
- wC.cbWndExtra = NULL;
- wC.hInstance = hInstance;
- wC.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
- wC.lpfnWndProc = WndProc;
- wC.lpszClassName = className;
- wC.lpszMenuName = 0;
- wC.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wC.hIconSm = NULL;
- wC.hCursor = LoadCursor(NULL, IDC_ARROW);
- ATOM result = RegisterClassEx(&wC);
- if (!result)
- {
- MessageBox(0, TEXT("Błąd funkcji RegisterClassEx"), appName, MB_OK);
- }
- hwnd = CreateWindow(
- className,
- appName,
- WS_OVERLAPPEDWINDOW | WS_VISIBLE,
- 100,
- 100,
- 1000,
- 800,
- NULL,
- NULL,
- hInstance,
- NULL
- );
- ShowWindow(hwnd, nCmdShow);
- UpdateWindow(hwnd);
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- UnregisterClass(className, hInstance);
- return msg.wParam;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement