Facebook
From Obese Echidna, 7 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 266
  1. #include <Windows.h>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. LPSTR className = TEXT("windowClass");
  7. MSG msg;
  8. WORD timer;
  9. HDC hdc;
  10.  
  11. HDC hdcMem;
  12. HBITMAP hbmMem;
  13.  
  14. HANDLE hOld;
  15.  
  16. //TEKSTURY
  17. HBITMAP bgTexture;
  18. HBITMAP playerTexture;
  19. HBITMAP enemyTexture;
  20.  
  21. POINT bgPos;
  22. POINT playerPos;
  23. POINT enemyPos;
  24.  
  25. static int enemyHP = 1;
  26.  
  27. vector<POINT> bulletsPos;
  28. vector<POINT> enemyBullets;
  29.  
  30. static bool enemyDirLeft = false;
  31.  
  32.  
  33. static bool registerClass();
  34.  
  35. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  36.  
  37. void draw(HWND);
  38. void update();
  39.  
  40. POINT enemySize;
  41.  
  42. long int before = GetTickCount();
  43. long int after = GetTickCount();
  44. int seconds;
  45.  
  46. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  47. {
  48.         if (!registerClass())
  49.         {
  50.                 MessageBox(NULL, TEXT("Nie udało się zarejestrować klasy okna"), TEXT("Zjebałeś"), MB_OK | MB_ICONWARNING);
  51.                 return 1;
  52.         }
  53.  
  54.         HWND hwnd = CreateWindowEx(0, className, TEXT("Okno"), WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
  55.                 NULL, NULL, hInstance, NULL);
  56.  
  57.         if (hwnd == NULL)
  58.         {
  59.                 MessageBox(NULL, TEXT("Nie udało się utworzyć okna"), TEXT("Zjebałeś"), MB_OK | MB_ICONWARNING);
  60.                 return 1;
  61.         }
  62.  
  63.         ShowWindow(hwnd, nCmdShow);
  64.         UpdateWindow(hwnd);
  65.  
  66.         while (GetMessage(&msg, NULL, 0, 0))
  67.         {
  68.                 TranslateMessage(&msg);
  69.                 DispatchMessage(&msg);
  70.         }
  71.  
  72.         return msg.wParam;
  73. }
  74.  
  75. void drawTexture(HDC hdc, HBITMAP texture, POINT position)
  76. {
  77.         HDC hdcNew = CreateCompatibleDC(hdc);
  78.         HBITMAP oldImage = (HBITMAP)SelectObject(hdcNew, texture);
  79.         BITMAP textureInfo;
  80.         GetObject(texture, sizeof(textureInfo), &textureInfo);
  81.        
  82.         BitBlt(hdc, position.x, position.y, 800, 600, hdcNew, 0, 0, SRCCOPY);
  83.         SelectObject(hdcNew, oldImage);
  84.         DeleteDC(hdcNew);
  85.         DeleteObject(oldImage);
  86. }
  87.  
  88. HBRUSH red = CreateSolidBrush(RGB(255, 0, 0));
  89.  
  90. void drawBullet(HDC hdc, POINT pos)
  91. {
  92.         HBRUSH def = (HBRUSH) SelectObject(hdc, red);
  93.  
  94.         Rectangle(hdc, pos.x, pos.y, pos.x + 10, pos.y + 10);
  95. }
  96.  
  97. bool checkColl(POINT bodyAPos, POINT bodyBPos, POINT bodyBSize)
  98. {
  99.         if (bodyAPos.x > bodyBPos.x && bodyAPos.x < bodyBPos.x + bodyBSize.x && bodyAPos.y > bodyBPos.y && bodyAPos.y < bodyBPos.y + bodyBSize.y)
  100.         {
  101.                 return true;
  102.         }
  103.         else
  104.         {
  105.                 return false;
  106.         }
  107. }
  108.  
  109. void update()
  110. {
  111.        
  112.  
  113.         if (enemyPos.x <= 0)
  114.         {
  115.                 enemyDirLeft = false;
  116.         }
  117.  
  118.         if (enemyPos.x >= 800 - 64)
  119.         {
  120.                 enemyDirLeft = true;
  121.         }
  122.  
  123.         if (enemyDirLeft)
  124.         {
  125.                 enemyPos.x -= 15;
  126.         }
  127.         else
  128.         {
  129.                 enemyPos.x += 15;
  130.         }
  131.  
  132.         if (seconds >= 10)
  133.         {
  134.                 seconds = 0;
  135.                 POINT bullet;
  136.                 bullet.x = enemyPos.x + 20;
  137.                 bullet.y = enemyPos.y + 20;
  138.  
  139.                 enemyBullets.push_back(bullet);
  140.         }
  141.         else
  142.         {
  143.                 seconds++;
  144.         }
  145.  
  146.         for (int i = 0; i < bulletsPos.size(); i++)
  147.         {
  148.                 bulletsPos[i].y -= 40;
  149.  
  150.                 if (checkColl(bulletsPos[i], enemyPos, enemySize))
  151.                 {
  152.                         enemyHP--;
  153.                 }
  154.  
  155.                 if (bulletsPos[i].y <= 0)
  156.                 {
  157.                         bulletsPos.erase(bulletsPos.begin() + i);
  158.                         i--;
  159.                 }
  160.         }
  161.  
  162.         for (int i = 0; i < enemyBullets.size(); i++)
  163.         {
  164.                 enemyBullets[i].y += 40;
  165.         }
  166. }
  167.  
  168. void draw(HWND hwnd)
  169. {
  170.         PAINTSTRUCT ps;
  171.         hdc = BeginPaint(hwnd, &ps);
  172.  
  173.         hdcMem = CreateCompatibleDC(hdc);
  174.         hbmMem = CreateCompatibleBitmap(hdc, 800, 600);
  175.  
  176.         hOld = SelectObject(hdcMem, hbmMem);
  177.  
  178.         drawTexture(hdc, bgTexture, bgPos);
  179.         if (enemyHP > 0)
  180.         {
  181.                 drawTexture(hdc, enemyTexture, enemyPos);
  182.         }
  183.  
  184.         drawTexture(hdc, playerTexture, playerPos);
  185.  
  186.         for (int i = 0; i < bulletsPos.size(); i++)
  187.         {
  188.                 drawBullet(hdc, bulletsPos[i]);
  189.         }
  190.  
  191.         for (int i = 0; i < enemyBullets.size(); i++)
  192.         {
  193.                 drawBullet(hdc, enemyBullets[i]);
  194.         }
  195.  
  196.         SelectObject(hdcMem, hOld);
  197.         DeleteObject(hbmMem);
  198.         DeleteDC(hdcMem);
  199.  
  200.         EndPaint(hwnd, &ps);
  201. }
  202.  
  203. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  204. {
  205.         static bool spacePressed = false;
  206.  
  207.         switch (msg)
  208.         {
  209.                 case WM_CREATE:
  210.                 {
  211.                         SetTimer(hwnd, timer, 100, NULL);
  212.  
  213.                         bgTexture = (HBITMAP)LoadImage(NULL, "space.bmp", IMAGE_BITMAP, 800, 600, LR_LOADFROMFILE);
  214.                         playerTexture = (HBITMAP)LoadImage(NULL, "shipPlayer.bmp", IMAGE_BITMAP, 64, 128, LR_LOADFROMFILE);
  215.                         enemyTexture = (HBITMAP)LoadImage(NULL, "shipEnemy.bmp", IMAGE_BITMAP, 64, 128, LR_LOADFROMFILE);
  216.  
  217.                         bgPos.x = 0;
  218.                         bgPos.y = 0;
  219.  
  220.                         playerPos.x = 800 / 2;
  221.                         playerPos.y = 600 - 128 - 40;
  222.  
  223.                         enemyPos.x = 800 / 2;
  224.                         enemyPos.y = 0;
  225.  
  226.                         enemySize.x = 64;
  227.                         enemySize.y = 128;
  228.                 }break;
  229.  
  230.                 case WM_PAINT:
  231.                 {
  232.                         draw(hwnd);
  233.                 }break;
  234.  
  235.                 case WM_KEYDOWN:
  236.                 {
  237.                         switch ((wParam))
  238.                         {
  239.                                 case VK_LEFT:
  240.                                 {
  241.                                         playerPos.x -= 15;
  242.                                 }break;
  243.  
  244.                                 case VK_RIGHT:
  245.                                 {
  246.                                         playerPos.x += 15;
  247.                                 }break;
  248.  
  249.                                 case VK_SPACE:
  250.                                 {
  251.                                         if (!spacePressed)
  252.                                         {
  253.                                                 spacePressed = true;
  254.                                                 POINT bullet;
  255.                                                 bullet.x = playerPos.x + 20;
  256.                                                 bullet.y = playerPos.y - 20;
  257.  
  258.                                                 bulletsPos.push_back(bullet);
  259.                                         }
  260.                                 }break;
  261.                         }
  262.                 }break;
  263.  
  264.                 case WM_KEYUP:
  265.                 {
  266.                         switch (wParam)
  267.                         {
  268.                         case VK_SPACE:
  269.                         {
  270.                                 spacePressed = false;
  271.                         }break;
  272.                         }
  273.                 }break;
  274.  
  275.                 case WM_TIMER:
  276.                 {
  277.                         update();
  278.                         InvalidateRect(hwnd, 0, 1);
  279.                 }break;
  280.  
  281.                 case WM_CLOSE:
  282.                 {
  283.                         DestroyWindow(hwnd);
  284.                 }break;
  285.  
  286.                 case WM_DESTROY:
  287.                 {
  288.                         PostQuitMessage(0);
  289.                 }break;
  290.  
  291.                 default:
  292.                 {
  293.                         return DefWindowProc(hwnd, msg, wParam, lParam);
  294.                 }
  295.         }
  296.  
  297.         return 0;
  298. }
  299.  
  300. static bool registerClass()
  301. {
  302.         WNDCLASSEX wc;
  303.         wc.cbSize = sizeof(WNDCLASSEX);
  304.         wc.style = 0;
  305.         wc.cbClsExtra = 0;
  306.         wc.cbWndExtra = 0;
  307.         wc.lpfnWndProc = WndProc;
  308.         wc.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(0, 0, 0));
  309.         wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  310.         wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  311.         wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  312.         wc.hInstance = GetModuleHandle(NULL);
  313.         wc.lpszMenuName = NULL;
  314.         wc.lpszClassName = className;
  315.  
  316.         return (RegisterClassEx(&wc) != 0);
  317. }