Advertisement
Mihao

Statki

Jan 4th, 2017
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.91 KB | None | 0 0
  1. // Statki.cpp : Defines the entry point for the application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "Statki.h"
  6. #include <Windows.h>
  7. #include "Resource.h"
  8. #include <ctime>
  9.  
  10. #define liczba_zyc 2;
  11.  
  12. struct Statek {
  13.     POINT wsp;
  14.     bool pocisk;
  15.     int naboje;
  16.     int hp;
  17.     HBITMAP statek;
  18.     HBITMAP statekMaska;
  19. };
  20. struct Pocisk {
  21.     POINT wsp;
  22.     HICON pocisk;
  23. };
  24.  
  25. static Statek gracz;            // Utworzenie 2 graczy
  26. static Statek przeciwnik;       //
  27. static Statek kura;             //
  28.  
  29. static Pocisk pocisk;
  30. static Pocisk pocisk2;
  31.  
  32. static HDC hdcMem;
  33. static HBITMAP hbmMem;
  34. static HBRUSH brush;
  35.  
  36. static PAINTSTRUCT ps;
  37. static HBITMAP tlo;
  38. static RECT r;
  39.  
  40. static bool kierunek;
  41. static char buff[50];
  42. static int licznik = 0;
  43.  
  44. void UruchomGre(HWND hwnd) {
  45.     GetClientRect(hwnd, &r);
  46.     SetTimer(hwnd, 1, 16, NULL);
  47.     SetTimer(hwnd, 2, 500, NULL);
  48.     SetTimer(hwnd, 3, 500, NULL);
  49.  
  50.     brush = CreatePatternBrush(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP8)));
  51.     tlo = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP8));
  52.     gracz.statek = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP2));
  53.     gracz.statekMaska = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP3));
  54.  
  55.     przeciwnik.statek = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP4));
  56.     przeciwnik.statekMaska = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP5));
  57.  
  58.    
  59.     //Kura
  60.  
  61.     kura.statek = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP4));
  62.     kura.statekMaska = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP5));
  63.  
  64.  
  65.     pocisk.pocisk = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));
  66.  
  67.     gracz.pocisk = false;
  68.         //pocisk.wsp.x = 412;
  69.         //pocisk.wsp.y = 475;
  70.         gracz.wsp.x = r.right / 2 - 25;             // ustawianie statku względem osi oX
  71.         gracz.wsp.y = 490;                          // ustawienie na sztywno odległości od dolnej granicy
  72.         przeciwnik.wsp.x = r.right / 2 - 25;
  73.         przeciwnik.wsp.y = 30;
  74.         przeciwnik.hp = liczba_zyc;
  75.     }
  76.  
  77.  
  78. void RysujStatek(HDC hdc, Statek statek) {
  79.     HDC hdcMem = CreateCompatibleDC(hdc);
  80.     SelectObject(hdcMem, statek.statekMaska);
  81.     BitBlt(hdc, statek.wsp.x, statek.wsp.y, 55, 60, hdcMem, 0, 0, SRCAND);
  82.     SelectObject(hdcMem, statek.statek);
  83.     BitBlt(hdc, statek.wsp.x, statek.wsp.y, 55, 60, hdcMem, 0, 0, SRCPAINT);
  84.     DeleteDC(hdcMem);
  85. }
  86.  
  87.  
  88. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
  89.     srand(time(NULL));
  90.  
  91.     switch (msg) {
  92.  
  93.     case WM_CREATE: {
  94.         UruchomGre(hwnd);
  95.        
  96.     }break;
  97.  
  98.     case WM_TIMER: {
  99.         switch (wParam){
  100.         case 1: {
  101.             //
  102.             //  RANDOMOWE RUSZANIE SIE STATKU PRZECIWNIKA
  103.             //
  104.  
  105.             if (kierunek == true) {
  106.                 if(przeciwnik.wsp.x <= r.right - 60)
  107.                 przeciwnik.wsp.x += rand()%10;
  108.                 else {
  109.                     kierunek = false;
  110.                 }
  111.             }
  112.             if (kierunek == false) {
  113.                 if (przeciwnik.wsp.x > r.left + 5)
  114.                 przeciwnik.wsp.x -= rand()%10;
  115.                 else {
  116.                     kierunek = true;
  117.                 }
  118.             }
  119.  
  120.             //
  121.             //  STEROWANIE STATKIEM
  122.             //
  123.  
  124.             if (GetAsyncKeyState(VK_LEFT)) {
  125.                 if (gracz.wsp.x >= r.left + 5)
  126.                 gracz.wsp.x -= 10;
  127.             }
  128.             if (GetAsyncKeyState(VK_RIGHT)) {
  129.                 if(gracz.wsp.x <= r.right - 60)
  130.                 gracz.wsp.x += 10;
  131.             }
  132.  
  133.             if (GetAsyncKeyState(VK_SPACE)) {
  134.                 if (gracz.pocisk == false) {
  135.                     pocisk.wsp.x = przeciwnik.wsp.x + 12; // bylo gracz
  136.                     pocisk.wsp.y = 45; // byo 475
  137.                 }
  138.                 gracz.pocisk = true;        // Blokada wystrzału kolejnego pocisku
  139.             }
  140.  
  141.            
  142.  
  143.             //
  144.             // LOT POCISKU
  145.             //
  146.            
  147.             if (gracz.pocisk == true) {
  148.                 if (pocisk.wsp.y <= 5) {
  149.                     przeciwnik.pocisk = false; // gracz
  150.                 }
  151.                 else if (pocisk.wsp.x >= gracz.wsp.x - 16 && pocisk.wsp.x <= gracz.wsp.x + 50 && pocisk.wsp.y <= gracz.wsp.y + 60) { // zamiast gracz było przeciwnik
  152.                     przeciwnik.hp += 1; // było minus równa sie
  153.                     gracz.pocisk = false;
  154.                 }
  155.                 pocisk.wsp.y += 5;      //było  pocisk.wsp.y -= 20;
  156.             }
  157.             InvalidateRect(hwnd, NULL, TRUE);
  158.        
  159.         }break;
  160.         case 2: {
  161.             //int liczba = ;
  162.             if ((rand() % 100) % 2 == 0) {
  163.                 kierunek = true;
  164.             }
  165.             else {
  166.                 kierunek = false;
  167.             }
  168.         }break;
  169.         case 3: {           /// robienie kury
  170.            
  171.             licznik++;
  172.             if ( licznik == 2) {
  173.                 kura.wsp.x =  0;//rand() % 800  + 40;
  174.                 kura.wsp.y = 0;//rand() % 400  + 80;
  175.             }
  176.             if (licznik == 5)
  177.             {
  178.                 licznik = 0;
  179.                 kura.wsp.x = 2000;
  180.                 kura.wsp.y = 3000;
  181.                 // usun statek
  182.                 }
  183.         }break;
  184.         default: break;
  185.         }
  186.     }break;
  187.  
  188.     case WM_LBUTTONDOWN:
  189.             {
  190.                     POINT klik;
  191.                     GetCursorPos( & klik );
  192.                     if (klik.x > kura.wsp.x  )
  193.                     {
  194.                         //if (klik.y > kura.wsp.y && klik.y <= kura.wsp.y + 40)
  195.                         {
  196.                             przeciwnik.hp += 1;
  197.                         }
  198.                     }
  199.             }
  200.         break;
  201.  
  202.     case WM_PAINT: {
  203.         BeginPaint(hwnd, &ps);
  204.         wsprintfA(buff, "Przeciwnik ma %d żyć", przeciwnik.hp);
  205.         SetWindowTextA(hwnd, buff);
  206.         hdcMem = CreateCompatibleDC(ps.hdc);
  207.         hbmMem = tlo;
  208.         SelectObject(hdcMem, hbmMem);
  209.         FillRect(hdcMem, &r, brush);
  210.         RysujStatek(hdcMem, gracz);
  211.         RysujStatek(hdcMem, przeciwnik);
  212.  
  213.         if(licznik==3)                      //jezli kura sie pojawia
  214.             RysujStatek(hdcMem, kura);
  215.        
  216.         if (gracz.pocisk == true)
  217.         DrawIcon(hdcMem, pocisk.wsp.x, pocisk.wsp.y, pocisk.pocisk);
  218.         if (przeciwnik.hp == 0) {
  219.             KillTimer(hwnd, 1);
  220.             KillTimer(hwnd, 2);
  221.             KillTimer(hwnd, 3);
  222.             DeleteObject(tlo);
  223.             tlo = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP6));
  224.             SelectObject(hdcMem, tlo);
  225.             BitBlt(ps.hdc, 0, 0, 1000, 600, hdcMem, 0, 0, SRCCOPY);
  226.             DeleteObject(tlo);
  227.         }
  228.         BitBlt(ps.hdc, r.left, r.top, r.right, r.bottom, hdcMem, 0, 0, SRCCOPY);
  229.         DeleteDC(hdcMem);
  230.         EndPaint(hwnd, &ps);
  231.     }break;
  232.  
  233.     case WM_KEYDOWN:
  234.     {
  235.         switch ((int)wParam)
  236.         {
  237.         case VK_F1:
  238.         {
  239.             UruchomGre(hwnd);
  240.             break;
  241.         }
  242.         default: break;
  243.         }
  244.            
  245.     }break;
  246.  
  247.     case WM_CLOSE: {
  248.         DeleteObject(przeciwnik.statek);
  249.         DeleteObject(przeciwnik.statekMaska);
  250.         DeleteObject(gracz.statekMaska);
  251.         DeleteObject(gracz.statek);
  252.         DeleteObject(pocisk.pocisk);
  253.         DeleteObject(hbmMem);
  254.         DestroyWindow(hwnd);
  255.         PostQuitMessage(0);
  256.     }break;
  257.  
  258.  
  259.  
  260.     default: return DefWindowProc(hwnd, msg, wParam, lParam);
  261.  
  262.     }
  263. };
  264. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
  265.     MSG msg;
  266.     WNDCLASS wndclass;
  267.     HWND hwnd;
  268.  
  269.     wndclass.style = CS_HREDRAW | CS_VREDRAW;
  270.     wndclass.lpfnWndProc = WndProc;
  271.     wndclass.cbClsExtra = 0;
  272.     wndclass.cbWndExtra = 0;
  273.     wndclass.hInstance = hInstance;
  274.     wndclass.hIcon = NULL;
  275.     wndclass.hCursor = LoadCursor(NULL, IDC_CROSS);
  276.     wndclass.hbrBackground = NULL;
  277.     wndclass.lpszMenuName = NULL;
  278.     wndclass.lpszClassName = TEXT("Wesołych !!");
  279.  
  280.     if (RegisterClass(&wndclass) == 0)
  281.         return FALSE;
  282.  
  283.     hwnd = CreateWindow(TEXT("Wesołych !!"), NULL, WS_OVERLAPPEDWINDOW ^ (WS_THICKFRAME | WS_MAXIMIZEBOX) | WS_VISIBLE , CW_USEDEFAULT, CW_USEDEFAULT, 1000, 600, NULL, NULL, hInstance, NULL);
  284.  
  285.     if (hwnd == NULL)
  286.         return FALSE;
  287.  
  288.     while (GetMessage(&msg, NULL, 0, 0))
  289.     {
  290.         TranslateMessage(&msg);
  291.         DispatchMessage(&msg);
  292.     }
  293.  
  294.     return msg.wParam;
  295. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement