Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <vector>
- #include <time.h>
- #include "resource.h"
- using namespace std;
- TCHAR Nazwa_Klasy[] = TEXT("Klasa okna");
- TCHAR Nazwa_Okna[] = TEXT("Okno");
- enum{BMP_TLO, BMP_KOSZYK, BMP_KOSZYK_MASKA, BMP_JAJKO, BMP_JAJKO_MASKA, BMP_ROZBITE_JAJKO, BMP_ROZBITE_JAJKO_MASKA};
- enum { TIMER_ODSWIEZANIE = 0, TIMER_LOSOWANIE = 1, TIMER_ROZBITE=2 };
- void kopiujBitmape(HDC hdcBuffor, HBITMAP Bmp, POINT polozenie, DWORD operacja)
- {
- HDC temp = CreateCompatibleDC(hdcBuffor);
- HBITMAP OldBmp = (HBITMAP)SelectObject(temp, Bmp);
- BITMAP Info;
- GetObject(Bmp, sizeof(Info), &Info);
- BitBlt(hdcBuffor, polozenie.x, polozenie.y, Info.bmWidth, Info.bmHeight, temp, 0, 0, operacja);
- SelectObject(temp, OldBmp);
- DeleteObject(temp);
- }
- void Wyswietl(HDC hdc, vector<HBITMAP>&bitmapy, vector<POINT> &jajka, vector<POINT>&rozbite, POINT GRACZ, int WIDTH, int HEIGHT)
- {
- HDC hdcBuffor = CreateCompatibleDC(hdc);
- HBITMAP BmpBuffor = CreateCompatibleBitmap(hdc, WIDTH, HEIGHT);
- HBITMAP OldBmpBuffor = (HBITMAP)SelectObject(hdcBuffor, BmpBuffor);
- kopiujBitmape(hdcBuffor, bitmapy[BMP_TLO], { 0,0 }, SRCCOPY);
- kopiujBitmape(hdcBuffor, bitmapy[BMP_KOSZYK_MASKA], GRACZ, SRCAND);
- kopiujBitmape(hdcBuffor, bitmapy[BMP_KOSZYK], GRACZ, SRCPAINT);
- for (int i = 0; i < jajka.size(); i++)
- {
- kopiujBitmape(hdcBuffor, bitmapy[BMP_JAJKO_MASKA], jajka[i], SRCAND);
- kopiujBitmape(hdcBuffor, bitmapy[BMP_JAJKO], jajka[i], SRCPAINT);
- }
- for (int i = 0; i < rozbite.size(); i++)
- {
- kopiujBitmape(hdcBuffor, bitmapy[BMP_ROZBITE_JAJKO_MASKA],rozbite[i] , SRCAND);
- kopiujBitmape(hdcBuffor, bitmapy[BMP_ROZBITE_JAJKO], rozbite[i], SRCPAINT);
- }
- BitBlt(hdc, 0, 0, WIDTH, HEIGHT, hdcBuffor, 0, 0, SRCCOPY);
- SelectObject(hdcBuffor, OldBmpBuffor);
- DeleteDC(hdcBuffor);
- DeleteObject(BmpBuffor);
- }
- LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- static vector<HBITMAP> bitmapy;
- static vector<POINT> jajka;
- static vector<POINT> rozbite;
- static POINT jajko, koszyk;
- static POINT GRACZ;
- static const int przesuniecie = 5;
- static RECT rect;
- static int WIDTH;
- static int HEIGHT;
- static int licznik = 0;
- switch (msg)
- {
- case WM_CREATE:
- {
- srand(time(0));
- GetClientRect(hwnd, &rect);
- WIDTH = rect.right;
- HEIGHT = rect.bottom;
- bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_TLO)));
- bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_KOSZYK)));
- bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_KOSZYK_MASKA)));
- bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_JAJKO)));
- bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_JAJKO_MASKA)));
- bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_ROZBITE_JAJKO)));
- bitmapy.push_back(LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_ROZBITE_JAJKO_MASKA)));
- BITMAP Info;
- GetObject(bitmapy[BMP_JAJKO], sizeof(Info), &Info);
- jajko = { Info.bmWidth, Info.bmHeight };
- GetObject(bitmapy[BMP_KOSZYK], sizeof(Info), &Info);
- koszyk = { Info.bmWidth, Info.bmHeight };
- GRACZ = { (WIDTH - koszyk.x) / 2, HEIGHT-koszyk.y };
- if (!SetTimer(hwnd, 0, 10, NULL))
- {
- MessageBox(NULL, TEXT("Nie udało się utworzyć timera"), TEXT("Błąd"), MB_ICONWARNING);
- return 0;
- }
- if (!SetTimer(hwnd, 1, 1000, NULL))
- {
- MessageBox(NULL, TEXT("Nie udało się utworzyć timera"), TEXT("Błąd"), MB_ICONWARNING);
- return 0;
- }
- if (!SetTimer(hwnd, 2, 2000, NULL))
- {
- MessageBox(NULL, TEXT("Nie udało się utworzyć timera"), TEXT("Błąd"), MB_ICONWARNING);
- return 0;
- }
- break;
- }
- /*case WM_KEYDOWN:
- {
- switch (LOWORD(wParam))
- {
- case VK_LEFT:
- {
- if (GRACZ.x - przesuniecie >= 0)
- GRACZ.x -= przesuniecie;
- break;
- }
- case VK_RIGHT:
- {
- if (GRACZ.x + przesuniecie + koszyk.x <= WIDTH)
- GRACZ.x += przesuniecie;
- break;
- }
- break;
- }
- }*/
- case WM_TIMER:
- {
- switch (LOWORD(wParam))
- {
- case TIMER_ODSWIEZANIE:
- {
- if (GetAsyncKeyState(VK_LEFT) && GRACZ.x - przesuniecie >= 0)
- GRACZ.x -= przesuniecie;
- else if(GetAsyncKeyState(VK_RIGHT) && GRACZ.x + przesuniecie + koszyk.x <= WIDTH)
- GRACZ.x += przesuniecie;
- for (int i = 0; i < jajka.size(); i++)
- {
- jajka[i].y += przesuniecie;
- if (jajka[i].y >= HEIGHT - koszyk.y)
- {
- if (jajka[i].x >= GRACZ.x && jajka[i].x <= GRACZ.x + koszyk.x)
- {
- licznik++;
- TCHAR bufor[30];
- wsprintf(bufor, TEXT("Liczba złapanych jajek = %d"), licznik);
- SetWindowText(hwnd, bufor);
- jajka.erase(jajka.begin() + i);
- }
- else if (jajka[i].y + jajko.y >= HEIGHT)
- {
- rozbite.push_back(jajka[i]);
- jajka.erase(jajka.begin() + i);
- }
- }
- }
- break;
- }
- case TIMER_LOSOWANIE:
- {
- jajka.push_back({ rand() % WIDTH - jajko.x, 0 });
- break;
- }
- case TIMER_ROZBITE:
- {
- if (!rozbite.empty())
- {
- rozbite.erase(rozbite.begin());
- }
- break;
- }
- }
- InvalidateRect(hwnd, &rect, false);
- break;
- }
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- HDC hdc = BeginPaint(hwnd, &ps);
- Wyswietl(hdc, bitmapy, jajka, rozbite, GRACZ, WIDTH, HEIGHT);
- EndPaint(hwnd, &ps);
- break;
- }
- case WM_CLOSE:
- {
- if (MessageBox(hwnd, TEXT("Czy chcesz zakończyć działanie programu?"), TEXT("Pytanie"), MB_OKCANCEL) == IDOK)
- DestroyWindow(hwnd);
- break;
- }
- case WM_DESTROY:
- {
- PostQuitMessage(0);
- break;
- }
- default: return DefWindowProc(hwnd, msg, wParam, lParam);
- }
- return 0;
- }
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR nCmdLine, int nCmdShow)
- {
- const int WIDTH = 640;
- const int HEIGHT = 480;
- MSG Komunikat;
- WNDCLASSEX wc;
- wc.cbClsExtra = NULL;
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.cbWndExtra = NULL;
- wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
- wc.hCursor = LoadCursor(hInstance, IDC_ARROW);
- wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
- wc.hIconSm = LoadIcon(hInstance, IDI_APPLICATION);
- wc.hInstance = hInstance;
- wc.lpfnWndProc = WndProc;
- wc.lpszClassName = Nazwa_Klasy;
- wc.lpszMenuName = NULL;
- wc.style = CS_VREDRAW | CS_HREDRAW;
- if (!RegisterClassEx(&wc))
- {
- MessageBox(0, TEXT("Nie udało się zarejestrować klasy"), TEXT("Błąd"), MB_ICONWARNING);
- return 0;
- }
- HWND okno = CreateWindowEx(WS_EX_CLIENTEDGE, Nazwa_Klasy, Nazwa_Okna, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WIDTH, HEIGHT, NULL, NULL, hInstance, NULL);
- if (okno == NULL)
- {
- MessageBox(0, TEXT("Nie udało się utworzyć okna"), TEXT("Błąd"), MB_ICONWARNING);
- return 0;
- }
- UpdateWindow(okno);
- ShowWindow(okno, SW_SHOW);
- while (GetMessage(&Komunikat, 0, 0, 0) > 0)
- {
- TranslateMessage(&Komunikat);
- DispatchMessage(&Komunikat);
- }
- UnregisterClass(Nazwa_Klasy, hInstance);
- return Komunikat.wParam;
- }
- /////////////resource.h
- //{{NO_DEPENDENCIES}}
- // Microsoft Visual C++ generated include file.
- // Used by jajka.rc
- //
- #define IDB_JAJKO 101
- #define IDB_JAJKO_MASKA 102
- #define IDB_ROZBITE_JAJKO 103
- #define IDB_ROZBITE_JAJKO_MASKA 104
- #define IDB_KOSZYK 105
- #define IDB_KOSZYK_MASKA 106
- #define IDB_BITMAP7 107
- #define IDB_TLO 107
- // Next default values for new objects
- //
- #ifdef APSTUDIO_INVOKED
- #ifndef APSTUDIO_READONLY_SYMBOLS
- #define _APS_NEXT_RESOURCE_VALUE 108
- #define _APS_NEXT_COMMAND_VALUE 40001
- #define _APS_NEXT_CONTROL_VALUE 1001
- #define _APS_NEXT_SYMED_VALUE 101
- #endif
- #endif
- ///////////////////plik.rc
- // Microsoft Visual C++ generated resource script.
- //
- #include "resource.h"
- #define APSTUDIO_READONLY_SYMBOLS
- /////////////////////////////////////////////////////////////////////////////
- //
- // Generated from the TEXTINCLUDE 2 resource.
- //
- #include "winres.h"
- /////////////////////////////////////////////////////////////////////////////
- #undef APSTUDIO_READONLY_SYMBOLS
- /////////////////////////////////////////////////////////////////////////////
- // Polish (Poland) resources
- #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_PLK)
- LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
- #ifdef APSTUDIO_INVOKED
- /////////////////////////////////////////////////////////////////////////////
- //
- // TEXTINCLUDE
- //
- 1 TEXTINCLUDE
- BEGIN
- "resource.h\0"
- END
- 2 TEXTINCLUDE
- BEGIN
- "#include ""winres.h""\r\n"
- "\0"
- END
- 3 TEXTINCLUDE
- BEGIN
- "\r\n"
- "\0"
- END
- #endif // APSTUDIO_INVOKED
- /////////////////////////////////////////////////////////////////////////////
- //
- // Bitmap
- //
- IDB_JAJKO BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\jajko.bmp"
- IDB_JAJKO_MASKA BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\jajko_maska.bmp"
- IDB_ROZBITE_JAJKO BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\jajko_rozbite.bmp"
- IDB_ROZBITE_JAJKO_MASKA BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\jako_rozbite_maska.bmp"
- IDB_KOSZYK BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\koszyk.bmp"
- IDB_KOSZYK_MASKA BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\koszyk_maska.bmp"
- //IDB_TLO BITMAP "D:\polibuden\Programowanie interfejsu użytkownika\jajka\jajka\tlolo.bmp"
- #endif // Polish (Poland) resources
- /////////////////////////////////////////////////////////////////////////////
- #ifndef APSTUDIO_INVOKED
- /////////////////////////////////////////////////////////////////////////////
- //
- // Generated from the TEXTINCLUDE 3 resource.
- //
- /////////////////////////////////////////////////////////////////////////////
- #endif // not APSTUDIO_INVOKED
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement