Advertisement
Guest User

Gra

a guest
Dec 5th, 2017
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <windows.h>
  2. #include <list>
  3. #include <time.h>
  4. using namespace std;
  5. TCHAR NazwaAplikacji[] = TEXT("Gierka");
  6. TCHAR NazwaKlasy[] = TEXT("Main");
  7.  
  8. class bloczek
  9. {
  10. private:
  11.     int xl,yt,xp,yb;
  12.     COLORREF kolor;
  13. public:
  14. bloczek(int xl, int yt, int xp, int yb,COLORREF kolor);
  15. int zXl(){return xl;}
  16.     int zYt(){return yt;}
  17.     int zXp(){return xp;}
  18.     int zYb(){return yb;}
  19. void Rysuj(HDC hdc);
  20. };
  21. bloczek::bloczek(int xl, int yt, int xp, int yb,COLORREF kolor):
  22. xl(xl),
  23. yt(yt),
  24. xp(xp),
  25. yb(yb),
  26. kolor(kolor)
  27. {}
  28. class pilka
  29. {
  30.     int xl,yt,xp,yb;
  31.     COLORREF kolor;
  32. public:
  33.     pilka(int Xl, int Yt, int Xp, int Yb,COLORREF kolor);
  34.     void uXl(int uxl){xl=uxl;}
  35.     void uYt(int uyt){yt=uyt;}
  36.     void uXp(int uxp){xp=uxp;}
  37.     void uYb(int uyb){yb=uyb;}
  38.     int zXl(){return xl;}
  39.     int zYt(){return yt;}
  40.     int zXp(){return xp;}
  41.     int zYb(){return yb;}
  42.     void Rysuj(HDC hdc);
  43. };
  44.  
  45. pilka::pilka(int Xl, int Yt, int Xp, int Yb,COLORREF kolor):
  46. xl(Xl),
  47. yt(Yt),
  48. xp(Xp),
  49. yb(Yb),
  50. kolor(kolor)
  51. {}
  52. struct paleczka
  53. {
  54.     int xl,yt,xp,yb;
  55.     COLORREF kolor;
  56. paleczka(int xl, int yt, int xp, int yb,COLORREF kolor);
  57. void Rysuj(HDC hdc);
  58. };
  59. paleczka::paleczka(int xl, int yt, int xp, int yb,COLORREF kolor):
  60. xl(xl),
  61. yt(yt),
  62. xp(xp),
  63. yb(yb),
  64. kolor(kolor)
  65. {}
  66. list<bloczek>klocki;
  67. RECT r;
  68. list<bloczek>::iterator it;
  69. list<pilka>pilki;
  70. list<pilka>::iterator itp;
  71. paleczka ob(31,190,71,195,RGB(0,0,0));
  72. //int a=0,b=0,c=5,d=5;
  73. void bloczek::Rysuj(HDC hdc)
  74. {
  75.     HPEN pioro = CreatePen(PS_SOLID,1,RGB(255,255,255));
  76.     HBRUSH pedzel=CreateSolidBrush(kolor);
  77.     int zDC=SaveDC(hdc);
  78.     SelectObject(hdc,pioro);
  79.     SelectObject(hdc,pedzel);
  80.     Rectangle(hdc,xl,yt,xp,yb);
  81.     //Rectangle(hdc,a,b,c,d);
  82.     //  a+=5;b+=0;c+=5;d+=0;
  83.     DeleteObject(pioro);
  84.     DeleteObject(pedzel);
  85.     RestoreDC(hdc,zDC);
  86. }
  87. void pilka::Rysuj(HDC hdc)
  88. {
  89.     HPEN pioro = CreatePen(PS_SOLID,1,RGB(255,0,0));
  90.     HBRUSH pedzel=CreateSolidBrush(kolor);
  91.     int zDC=SaveDC(hdc);
  92.     SelectObject(hdc,pioro);
  93.     SelectObject(hdc,pedzel);
  94.     Ellipse(hdc,xl,yt,xp,yb);
  95.     DeleteObject(pioro);
  96.     DeleteObject(pedzel);
  97.     RestoreDC(hdc,zDC);
  98. }
  99. void Rysujpl(HDC hdc)
  100. {
  101.     HPEN pioro = CreatePen(PS_SOLID,1,RGB(0,0,255));
  102.     int zDC=SaveDC(hdc);
  103.     SelectObject(hdc,pioro);
  104.     Rectangle(hdc,0,0,102,200);
  105.     DeleteObject(pioro);
  106.     RestoreDC(hdc,zDC);
  107. }
  108. void paleczka::Rysuj(HDC hdc)
  109. {
  110.    
  111.     HBRUSH pedzel=CreateSolidBrush(kolor);
  112.     int zDC=SaveDC(hdc);
  113.     SelectObject(hdc,pedzel);
  114.     Rectangle(hdc,xl,yt,xp,yb);
  115.     DeleteObject(pedzel);
  116.     RestoreDC(hdc,zDC);
  117. }
  118.  
  119. int lot=1;
  120. RECT x;
  121. void sprawdzkolizje(int &kt,HWND Okno)
  122. {   itp=pilki.begin();
  123.     for(it=klocki.begin();it!=klocki.end();it++)
  124.     {
  125.            
  126.             GetClientRect(Okno,&r);
  127.             x.left = (it->zXl() - 1) * r.right/102;
  128.             x.right = (it->zXl() + 6) * r.right/102;
  129.             x.top = (it->zYt() - 1) * r.bottom/200;
  130.             x.bottom = (it->zYt() + 6) * r.bottom/200;
  131.         if(it->zYb()==itp->zYt()&&it->zXl()<=(itp->zXp()+itp->zXl())/2&&it->zXp()>=(itp->zXp()+itp->zXl())/2)
  132.         {
  133.                 klocki.erase(it);
  134.                 if(kt==2)
  135.                 {
  136.                     kt=-4;
  137.                 }
  138.             else if(kt==-2)
  139.             {
  140.                 kt=4;
  141.             }
  142.                 kt*=(-1);
  143.                 //}
  144.             break;                 
  145.            
  146.         }
  147.         else if(itp->zYb()==0||ob.yt==itp->zYb()&&ob.xl<(itp->zXp()+itp->zXl())/2&&ob.xp>(itp->zXp()+itp->zXl())/2||itp->zXl()==0||itp->zXp()==102)
  148.         {
  149.             if(itp->zYb()==0)
  150.             {
  151.             if(kt==2)
  152.                 {
  153.                     kt=-4;
  154.                 }
  155.             else if(kt==-2)
  156.             {
  157.                 kt=4;
  158.             }
  159.             kt*=(-1);
  160.             }
  161.             else if(itp->zXl()>ob.xl&&itp->zXl()<ob.xl+13&&itp->zYb()==ob.yt)
  162.             {
  163.             kt=2;
  164.             kt*=(-1);
  165.             }
  166.             else if(itp->zXl()>ob.xl+13&&itp->zXp()<ob.xp-13&&itp->zYb()==ob.yt)
  167.             {
  168.             kt=-1;
  169.             kt*=(-1);
  170.             }
  171.             else if(itp->zXp()>ob.xl-13&&itp->zXp()<ob.xp&&itp->zYb()==ob.yt)
  172.             {
  173.             kt=-2;
  174.             kt*=(-1);
  175.             }
  176.             else if(itp->zXl()==0||itp->zXp()==102)
  177.             {
  178.             kt*=(-1);
  179.             }
  180.             break;
  181.  
  182.         }
  183.         //else if(itp->zXl()==it->zXp()&&itp->zYt()<(itp->zYb()-itp->zYt())/2&&itp->zYb()>(itp->zYb()-itp->zYt())/2||itp->zXp()==it->zXl())
  184.         //{
  185.         //  klocki.erase(it);
  186.         //      if(kt==2)
  187.         //      {
  188.         //          kt=-4;
  189.         //      }
  190.         //  else if(kt==-2)
  191.         //  {
  192.         //      kt=4;
  193.         //  }
  194.         //      kt*=(-1);
  195.         //      //}
  196.         //  break;
  197.         //}
  198.     }
  199.    
  200. }
  201. RECT t;
  202. static LRESULT CALLBACK FunkcjaOkienkowa(HWND Okno, UINT Komunikat, WPARAM wParam, LPARAM lParam)
  203. {  
  204. PAINTSTRUCT ps;
  205.  srand(time(NULL));
  206. int a=1,b=0,c=11,d=5;
  207.  
  208.     switch (Komunikat) {
  209. case WM_CREATE:
  210.     SetTimer(Okno,10,10,NULL);
  211.     pilki.push_back(pilka(45,155,50,160,RGB(255,0,0)));
  212.     for(int j=0;j<3;j++)
  213.     {
  214.     for(int i=0;i<10;i++)
  215.     {
  216.         klocki.push_back(bloczek(a,b,c,d,RGB(rand()%255+1,rand()%255+1,rand()%255+1)));
  217.         a+=10;c+=10;
  218.     }
  219.         b+=5;d+=5;
  220.         a=1;c=11;
  221.     }
  222.     break;
  223. case WM_PAINT:
  224.     BeginPaint(Okno,&ps);
  225.     GetClientRect(Okno,&r);
  226.    
  227.     SetMapMode(ps.hdc,MM_ISOTROPIC);
  228.     SetWindowExtEx(ps.hdc,101,200,NULL);
  229.     SetViewportExtEx(ps.hdc,r.bottom,r.bottom,NULL);
  230.     Rysujpl(ps.hdc);
  231.     ob.Rysuj(ps.hdc);
  232.     for(itp = pilki.begin();itp!=pilki.end();itp++)
  233.     {
  234.         itp->Rysuj(ps.hdc);
  235.        
  236.     }
  237.     for(it = klocki.begin();it!=klocki.end();it++)
  238.     {
  239.         it->Rysuj(ps.hdc);
  240.        
  241.     }
  242.  
  243.     EndPaint(Okno,&ps);
  244.         break;
  245. case WM_KEYDOWN:
  246.     switch(wParam)
  247.     {
  248.     case VK_RIGHT:
  249.         if(ob.xp<101)
  250.         {
  251.         ob.xl+=5;
  252.         ob.xp+=5;
  253.         }
  254.         break;
  255.     case VK_LEFT:
  256.         if(ob.xl>0)
  257.         {
  258.         ob.xl-=5;
  259.         ob.xp-=5;
  260.         }
  261.         break;
  262.     case VK_SHIFT:
  263.         itp=pilki.begin();
  264.         itp->uXl(45);
  265.         itp->uYt(155);
  266.         itp->uXp(50);
  267.         itp->uYb(160);
  268.         break;
  269.     }
  270.     break;
  271.     case WM_TIMER:
  272.            
  273.             GetClientRect(Okno,&r);
  274.            
  275.             for(itp=pilki.begin();itp!=pilki.end();itp++)
  276.             {
  277.                 t.left = (itp->zXl() - 1) * r.right/102;
  278.                 t.right = (itp->zXl() + 6) * r.right/102;
  279.                 t.top = (itp->zYt() - 1) * r.bottom/200;
  280.                 t.bottom = (itp->zYt() + 6) * r.bottom/200;
  281.                 switch(lot)
  282.                 {
  283.                 case 1:
  284.                     itp->uYt(itp->zYt()-1);
  285.                     itp->uYb(itp->zYb()-1);
  286.  
  287.                     break;
  288.                 case 2:
  289.                     itp->uYt(itp->zYt()-1);
  290.                     itp->uYb(itp->zYb()-1);
  291.                    
  292.                     itp->uXl(itp->zXl()+1);
  293.                     itp->uXp(itp->zXp()+1);
  294.  
  295.                     break;
  296.                     case 4:
  297.                     itp->uYt(itp->zYt()+1);
  298.                     itp->uYb(itp->zYb()+1);
  299.                    
  300.                     itp->uXl(itp->zXl()+1);
  301.                     itp->uXp(itp->zXp()+1);
  302.  
  303.                     break;
  304.                     case -4:
  305.                     itp->uYt(itp->zYt()+1);
  306.                     itp->uYb(itp->zYb()+1);
  307.                    
  308.                     itp->uXl(itp->zXl()-1);
  309.                     itp->uXp(itp->zXp()-1);
  310.  
  311.                     break;
  312.                 case -1:
  313.                     itp->uYt(itp->zYt()+1);
  314.                     itp->uYb(itp->zYb()+1);
  315.  
  316.                 break;
  317.                 case -2:
  318.                     itp->uYt(itp->zYt()-1);
  319.                     itp->uYb(itp->zYb()-1);
  320.                    
  321.                     itp->uXl(itp->zXl()-1);
  322.                     itp->uXp(itp->zXp()-1);
  323.  
  324.                     break;
  325.                 }
  326.                
  327.                 sprawdzkolizje(lot,Okno);
  328.                 InvalidateRect(Okno,0,false);
  329.        
  330.             }
  331.         break;
  332.         case WM_DESTROY:
  333.             KillTimer(Okno,10);
  334.             PostQuitMessage(0);
  335.             break;
  336.         default:
  337.             return DefWindowProc(Okno, Komunikat, wParam, lParam);
  338.     }
  339.     return 0;
  340. }
  341.  
  342. static bool RejestrujKlasy()
  343. {
  344.     WNDCLASSEX wc;
  345.     wc.cbSize = sizeof(WNDCLASSEX);
  346.     wc.cbClsExtra = wc.cbWndExtra = 0;
  347.     wc.hbrBackground = (HBRUSH) (1 + COLOR_WINDOW);
  348.     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  349.     wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  350.     wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  351.     wc.hInstance = GetModuleHandle(NULL);
  352.     wc.lpfnWndProc = &FunkcjaOkienkowa;
  353.     wc.lpszClassName = NazwaKlasy;
  354.     wc.lpszMenuName = NULL;
  355.     wc.style = CS_VREDRAW|CS_HREDRAW;
  356.     return (RegisterClassEx(&wc) != 0);
  357. }
  358.  
  359. static void WyrejestrujKlasy()
  360. {
  361.     UnregisterClass(NazwaKlasy, GetModuleHandle(NULL));
  362. }
  363.  
  364. int WINAPI WinMain(HINSTANCE Instancja, HINSTANCE Poprzednia, LPSTR Parametry, int Widocznosc)
  365. {
  366.     // Zarejestruj klasę. Protestuj, jeżeli wystąpił błąd.
  367.     if (!RejestrujKlasy()) {
  368.         MessageBox(NULL, TEXT("Nie udało się zarejestrować klasy okna!"),
  369.             NazwaAplikacji, MB_ICONSTOP | MB_OK);
  370.         return 1;
  371.     }
  372.     // Stwórz główne okno. Również protestuj, jeżeli wystąpił błąd.
  373.     HWND GlowneOkno = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CLIENTEDGE,
  374.         NazwaKlasy, TEXT("Okno"), WS_OVERLAPPEDWINDOW,
  375.         CW_USEDEFAULT, CW_USEDEFAULT,102, 200,
  376.         NULL, NULL, Instancja, NULL);
  377.     if (GlowneOkno == NULL) {
  378.         MessageBox(NULL, TEXT("Nie udało się stworzyć głównego okna!"),
  379.             NazwaAplikacji, MB_ICONSTOP | MB_OK);
  380.         return 2;
  381.     }
  382.     // Wyświetl i uaktualnij nowo stworzone okno.
  383.     ShowWindow(GlowneOkno, Widocznosc);
  384.     UpdateWindow(GlowneOkno);
  385.     // Główna pętla komunikatów wątku.
  386.     MSG Komunikat;
  387.     while (GetMessage(&Komunikat, NULL, 0, 0) > 0) {
  388.         TranslateMessage(&Komunikat);
  389.         DispatchMessage(&Komunikat);
  390.     }
  391.     // Zwolnij pamięć klas i zakończ proces.
  392.     WyrejestrujKlasy();
  393.     return static_cast<int>(Komunikat.wParam);
  394. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement