Hyluss

Gra statek kosmiczny

Dec 20th, 2016
966
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <windows.h>
  2. #include "resource.h"
  3. #include <time.h>
  4. #include <string>
  5.  
  6. #define LEWO false
  7. #define PRAWO true
  8.  
  9. #define ENEMY_MOVE 5
  10. #define PLAYER_MOVE 15
  11. #define SHOT_MOVE 30
  12.  
  13. using namespace std;
  14.  
  15. TCHAR nkl[] = L"Klasa";
  16.  
  17. inline void wczytajBMP(HDC hdc, HBITMAP &hBitmap, HBITMAP &hOldBitmap, HBITMAP &hMask, HBITMAP &hOldMask, BITMAP &Info, HDC &hMemory, int x, int y)
  18. {
  19.     hOldMask = (HBITMAP) SelectObject (hMemory, hMask);
  20.     GetObject(hMask,sizeof(Info), &Info);
  21.     BitBlt(hdc, x, y, Info.bmWidth, Info.bmHeight, hMemory, 0, 0, SRCAND);
  22.     SelectObject(hMemory, hOldMask);
  23.  
  24.     hOldBitmap = (HBITMAP) SelectObject (hMemory, hBitmap);
  25.     GetObject(hBitmap,sizeof(Info), &Info);
  26.     BitBlt(hdc, x, y, Info.bmWidth, Info.bmHeight, hMemory, 0, 0, SRCPAINT);
  27.     SelectObject(hMemory, hOldBitmap);
  28. }
  29.  
  30. LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam, LPARAM lParam)
  31. {
  32.     static POINT PLAYER = {480, 480}, ENEMY = {480, 0}, SHOT = {PLAYER.x + 26, 480};
  33.     static HBITMAP hOldSpace, hOldSpacecraft, hOldMask, hOldShoot, hOldShootMask;
  34.     static int damage = 0;
  35.     static bool launched = false;
  36.     static bool kierunek = rand() % 2;
  37.     static int licznik = 0;
  38.  
  39.     static HBITMAP hSpace       =   LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_SPACE));
  40.     static HBITMAP hSpacecraft  =   LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_SPACECRAFT));
  41.     static HBITMAP hMask        =   LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_MASK));
  42.     static HBITMAP hShoot       =   LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_SHOT));
  43.     static HBITMAP hShootMask   =   LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_SHOT_MASK));
  44.  
  45.     switch(msg)
  46.     {
  47.         case WM_CREATE:
  48.             if(!SetTimer(hWnd, 1, 50, NULL))
  49.             {
  50.                 MessageBox( hWnd, L"Nie można utworzyć timera!", L"Problem", MB_ICONWARNING );
  51.                 break;
  52.             }
  53.             break;
  54.  
  55.         case WM_DESTROY:
  56.             KillTimer(hWnd, 1);
  57.             PostQuitMessage(0);
  58.             break;
  59.  
  60.         case WM_TIMER:
  61.             {
  62.                 RECT rect;
  63.  
  64.                 if(licznik >= 10)
  65.                 {
  66.                     kierunek = rand() % 2;
  67.                     licznik = 0;
  68.                 }
  69.                 if(launched)
  70.                 {
  71.                     if( SHOT.y <= ENEMY.y + 160)
  72.                         if(SHOT.x >= ENEMY.x && SHOT.x <= ENEMY.x + 80)
  73.                         {
  74.                             damage++;
  75.                             launched = false;
  76.                             SHOT.y = 480;
  77.                             char life[27];
  78.                             sprintf(life, "Trafienia wroga : %d", damage);
  79.                             SetWindowTextA(hWnd, life);
  80.                             if (damage == 10)
  81.                             {
  82.                                 KillTimer(hWnd, 1);
  83.                                 MessageBox(0, L"Zwyciężyłeś wroga!", L"Wygrana",MB_OK | MB_ICONINFORMATION);
  84.                                 PostQuitMessage(0);
  85.                             }
  86.                         }
  87.                     else if( SHOT.y <= 0 )
  88.                     {
  89.                         launched = false;
  90.                         SHOT.y = 480;
  91.                     }
  92.                 }
  93.                 GetClientRect(hWnd, &rect);
  94.                 InvalidateRect(hWnd, &rect, true);
  95.  
  96.             }break;
  97.  
  98.         case WM_PAINT:
  99.         {
  100.             PAINTSTRUCT PS;
  101.             HDC hdc = BeginPaint(hWnd, &PS);
  102.             HDC hMemory = CreateCompatibleDC(hdc);
  103.             BITMAP Info;
  104.  
  105.             hOldSpace = (HBITMAP) SelectObject (hMemory, hSpace);
  106.             GetObject(hSpace,sizeof(Info), &Info);
  107.             BitBlt(hdc, 0, 0, Info.bmWidth, Info.bmHeight, hMemory, 0, 0, SRCCOPY);
  108.             SelectObject(hMemory, hOldSpace);
  109.  
  110.             wczytajBMP(hdc, hSpacecraft, hOldSpacecraft, hMask, hOldMask, Info, hMemory, PLAYER.x, 480);
  111.  
  112.             if(launched)
  113.             {
  114.                     wczytajBMP(hdc, hShoot, hOldShoot, hShootMask, hOldShootMask, Info, hMemory, SHOT.x, SHOT.y);
  115.                     SHOT.y-= SHOT_MOVE;
  116.             }
  117.             if (kierunek == PRAWO )
  118.             {
  119.                 if (ENEMY.x + 80 + ENEMY_MOVE >= 1000)
  120.                     kierunek = !kierunek;
  121.                 else
  122.                 {
  123.                     wczytajBMP(hdc, hSpacecraft, hOldSpacecraft, hMask, hOldMask, Info, hMemory, ENEMY.x, 0);
  124.                     ENEMY.x += ENEMY_MOVE;
  125.                 }
  126.                 licznik++;
  127.             }
  128.             if (kierunek == LEWO  )
  129.             {
  130.                 if(ENEMY.x - ENEMY_MOVE <= 0)
  131.                     kierunek = !kierunek;
  132.                 else
  133.                 {
  134.                     wczytajBMP(hdc, hSpacecraft, hOldSpacecraft, hMask, hOldMask, Info, hMemory, ENEMY.x, 0);
  135.                     ENEMY.x -= ENEMY_MOVE;
  136.                 }
  137.                 licznik++;
  138.             }
  139.             DeleteDC(hMemory);
  140.             ReleaseDC(hWnd, hdc);
  141.             EndPaint(hWnd, &PS);
  142.         } break;
  143.  
  144.         case WM_KEYDOWN:
  145.         {
  146.             RECT rect;
  147.             GetClientRect(hWnd, &rect);
  148.             switch(LOWORD(wParam))
  149.             {
  150.                 case VK_LEFT:
  151.                     if (PLAYER.x - PLAYER_MOVE >= 0)
  152.                     {
  153.                         PLAYER.x -= PLAYER_MOVE;
  154.                     }
  155.                     break;
  156.                 case VK_RIGHT:
  157.                     if( PLAYER.x + 80 + PLAYER_MOVE < 1000)
  158.                     {
  159.                         PLAYER.x += PLAYER_MOVE;
  160.                     }
  161.                     break;
  162.                 case VK_SPACE:
  163.                     if (!launched)
  164.                     {
  165.                         launched = true;
  166.                         SHOT.x = PLAYER.x + 26;
  167.                     }
  168.                     break;
  169.                 case VK_ESCAPE:
  170.                     PostQuitMessage(0); break;
  171.             }
  172.         } break;
  173.  
  174.         default:
  175.             return DefWindowProc(hWnd,msg,wParam,lParam);
  176.     }
  177.     return 0;
  178. }
  179.  
  180. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
  181. {
  182.     srand(time(NULL));
  183.     WNDCLASSEX kl;
  184.     kl.cbClsExtra = kl.cbWndExtra = 0;
  185.     kl.cbSize = sizeof(WNDCLASSEX);
  186.     kl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  187.     kl.hCursor = LoadCursor(hInstance,IDI_APPLICATION);
  188.     kl.hIcon = kl.hIconSm = LoadIcon(hInstance, IDC_ICON);
  189.     kl.hInstance = hInstance;
  190.     kl.lpfnWndProc = &WndProc;
  191.     kl.lpszClassName = nkl;
  192.     kl.lpszMenuName = NULL;
  193.     kl.style = CS_VREDRAW | CS_HREDRAW;
  194.  
  195.     if(!RegisterClassEx(&kl))
  196.     {
  197.         MessageBox(0, TEXT("Nie zarejestrowano klasy okna!"), TEXT("Blad!"),MB_OK | MB_ICONERROR); return 0;
  198.     }
  199.  
  200.     HWND mWnd = CreateWindowEx(0,nkl,TEXT("Trafienia wroga = 0"), WS_OVERLAPPEDWINDOW ^ (WS_THICKFRAME | WS_MAXIMIZEBOX) | WS_VISIBLE,0,0,1000,800,0,0,hInstance,0);
  201.     if (!mWnd)
  202.     {
  203.         MessageBox(0, TEXT("Nie stworzono okna!"), TEXT("Blad!"),MB_OK | MB_ICONERROR); return 0;
  204.     }
  205.  
  206.     MSG msg;
  207.     while(GetMessage(&msg,0,0,0)>0)
  208.     {
  209.             TranslateMessage(&msg);
  210.             DispatchMessage(&msg);
  211.     }
  212.     UnregisterClass(nkl,hInstance);
  213.     return msg.wParam;
  214. }
Advertisement