Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <list>
- #include <time.h>
- using namespace std;
- TCHAR NazwaAplikacji[] = TEXT("Gierka");
- TCHAR NazwaKlasy[] = TEXT("Main");
- class bloczek
- {
- private:
- int xl,yt,xp,yb;
- COLORREF kolor;
- public:
- bloczek(int xl, int yt, int xp, int yb,COLORREF kolor);
- int zXl(){return xl;}
- int zYt(){return yt;}
- int zXp(){return xp;}
- int zYb(){return yb;}
- void Rysuj(HDC hdc);
- };
- bloczek::bloczek(int xl, int yt, int xp, int yb,COLORREF kolor):
- xl(xl),
- yt(yt),
- xp(xp),
- yb(yb),
- kolor(kolor)
- {}
- class pilka
- {
- int xl,yt,xp,yb;
- COLORREF kolor;
- public:
- pilka(int Xl, int Yt, int Xp, int Yb,COLORREF kolor);
- void uXl(int uxl){xl=uxl;}
- void uYt(int uyt){yt=uyt;}
- void uXp(int uxp){xp=uxp;}
- void uYb(int uyb){yb=uyb;}
- int zXl(){return xl;}
- int zYt(){return yt;}
- int zXp(){return xp;}
- int zYb(){return yb;}
- void Rysuj(HDC hdc);
- };
- pilka::pilka(int Xl, int Yt, int Xp, int Yb,COLORREF kolor):
- xl(Xl),
- yt(Yt),
- xp(Xp),
- yb(Yb),
- kolor(kolor)
- {}
- struct paleczka
- {
- int xl,yt,xp,yb;
- COLORREF kolor;
- paleczka(int xl, int yt, int xp, int yb,COLORREF kolor);
- void Rysuj(HDC hdc);
- };
- paleczka::paleczka(int xl, int yt, int xp, int yb,COLORREF kolor):
- xl(xl),
- yt(yt),
- xp(xp),
- yb(yb),
- kolor(kolor)
- {}
- list<bloczek>klocki;
- RECT r;
- list<bloczek>::iterator it;
- list<pilka>pilki;
- list<pilka>::iterator itp;
- paleczka ob(31,190,71,195,RGB(0,0,0));
- //int a=0,b=0,c=5,d=5;
- void bloczek::Rysuj(HDC hdc)
- {
- HPEN pioro = CreatePen(PS_SOLID,1,RGB(255,255,255));
- HBRUSH pedzel=CreateSolidBrush(kolor);
- int zDC=SaveDC(hdc);
- SelectObject(hdc,pioro);
- SelectObject(hdc,pedzel);
- Rectangle(hdc,xl,yt,xp,yb);
- //Rectangle(hdc,a,b,c,d);
- // a+=5;b+=0;c+=5;d+=0;
- DeleteObject(pioro);
- DeleteObject(pedzel);
- RestoreDC(hdc,zDC);
- }
- void pilka::Rysuj(HDC hdc)
- {
- HPEN pioro = CreatePen(PS_SOLID,1,RGB(255,0,0));
- HBRUSH pedzel=CreateSolidBrush(kolor);
- int zDC=SaveDC(hdc);
- SelectObject(hdc,pioro);
- SelectObject(hdc,pedzel);
- Ellipse(hdc,xl,yt,xp,yb);
- DeleteObject(pioro);
- DeleteObject(pedzel);
- RestoreDC(hdc,zDC);
- }
- void Rysujpl(HDC hdc)
- {
- HPEN pioro = CreatePen(PS_SOLID,1,RGB(0,0,255));
- int zDC=SaveDC(hdc);
- SelectObject(hdc,pioro);
- Rectangle(hdc,0,0,102,200);
- DeleteObject(pioro);
- RestoreDC(hdc,zDC);
- }
- void paleczka::Rysuj(HDC hdc)
- {
- HBRUSH pedzel=CreateSolidBrush(kolor);
- int zDC=SaveDC(hdc);
- SelectObject(hdc,pedzel);
- Rectangle(hdc,xl,yt,xp,yb);
- DeleteObject(pedzel);
- RestoreDC(hdc,zDC);
- }
- int lot=1;
- RECT x;
- void sprawdzkolizje(int &kt,HWND Okno)
- { itp=pilki.begin();
- for(it=klocki.begin();it!=klocki.end();it++)
- {
- GetClientRect(Okno,&r);
- x.left = (it->zXl() - 1) * r.right/102;
- x.right = (it->zXl() + 6) * r.right/102;
- x.top = (it->zYt() - 1) * r.bottom/200;
- x.bottom = (it->zYt() + 6) * r.bottom/200;
- if(it->zYb()==itp->zYt()&&it->zXl()<=(itp->zXp()+itp->zXl())/2&&it->zXp()>=(itp->zXp()+itp->zXl())/2)
- {
- klocki.erase(it);
- if(kt==2)
- {
- kt=-4;
- }
- else if(kt==-2)
- {
- kt=4;
- }
- kt*=(-1);
- //}
- break;
- }
- 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)
- {
- if(itp->zYb()==0)
- {
- if(kt==2)
- {
- kt=-4;
- }
- else if(kt==-2)
- {
- kt=4;
- }
- kt*=(-1);
- }
- else if(itp->zXl()>ob.xl&&itp->zXl()<ob.xl+13&&itp->zYb()==ob.yt)
- {
- kt=2;
- kt*=(-1);
- }
- else if(itp->zXl()>ob.xl+13&&itp->zXp()<ob.xp-13&&itp->zYb()==ob.yt)
- {
- kt=-1;
- kt*=(-1);
- }
- else if(itp->zXp()>ob.xl-13&&itp->zXp()<ob.xp&&itp->zYb()==ob.yt)
- {
- kt=-2;
- kt*=(-1);
- }
- else if(itp->zXl()==0||itp->zXp()==102)
- {
- kt*=(-1);
- }
- break;
- }
- //else if(itp->zXl()==it->zXp()&&itp->zYt()<(itp->zYb()-itp->zYt())/2&&itp->zYb()>(itp->zYb()-itp->zYt())/2||itp->zXp()==it->zXl())
- //{
- // klocki.erase(it);
- // if(kt==2)
- // {
- // kt=-4;
- // }
- // else if(kt==-2)
- // {
- // kt=4;
- // }
- // kt*=(-1);
- // //}
- // break;
- //}
- }
- }
- RECT t;
- static LRESULT CALLBACK FunkcjaOkienkowa(HWND Okno, UINT Komunikat, WPARAM wParam, LPARAM lParam)
- {
- PAINTSTRUCT ps;
- srand(time(NULL));
- int a=1,b=0,c=11,d=5;
- switch (Komunikat) {
- case WM_CREATE:
- SetTimer(Okno,10,10,NULL);
- pilki.push_back(pilka(45,155,50,160,RGB(255,0,0)));
- for(int j=0;j<3;j++)
- {
- for(int i=0;i<10;i++)
- {
- klocki.push_back(bloczek(a,b,c,d,RGB(rand()%255+1,rand()%255+1,rand()%255+1)));
- a+=10;c+=10;
- }
- b+=5;d+=5;
- a=1;c=11;
- }
- break;
- case WM_PAINT:
- BeginPaint(Okno,&ps);
- GetClientRect(Okno,&r);
- SetMapMode(ps.hdc,MM_ISOTROPIC);
- SetWindowExtEx(ps.hdc,101,200,NULL);
- SetViewportExtEx(ps.hdc,r.bottom,r.bottom,NULL);
- Rysujpl(ps.hdc);
- ob.Rysuj(ps.hdc);
- for(itp = pilki.begin();itp!=pilki.end();itp++)
- {
- itp->Rysuj(ps.hdc);
- }
- for(it = klocki.begin();it!=klocki.end();it++)
- {
- it->Rysuj(ps.hdc);
- }
- EndPaint(Okno,&ps);
- break;
- case WM_KEYDOWN:
- switch(wParam)
- {
- case VK_RIGHT:
- if(ob.xp<101)
- {
- ob.xl+=5;
- ob.xp+=5;
- }
- break;
- case VK_LEFT:
- if(ob.xl>0)
- {
- ob.xl-=5;
- ob.xp-=5;
- }
- break;
- case VK_SHIFT:
- itp=pilki.begin();
- itp->uXl(45);
- itp->uYt(155);
- itp->uXp(50);
- itp->uYb(160);
- break;
- }
- break;
- case WM_TIMER:
- GetClientRect(Okno,&r);
- for(itp=pilki.begin();itp!=pilki.end();itp++)
- {
- t.left = (itp->zXl() - 1) * r.right/102;
- t.right = (itp->zXl() + 6) * r.right/102;
- t.top = (itp->zYt() - 1) * r.bottom/200;
- t.bottom = (itp->zYt() + 6) * r.bottom/200;
- switch(lot)
- {
- case 1:
- itp->uYt(itp->zYt()-1);
- itp->uYb(itp->zYb()-1);
- break;
- case 2:
- itp->uYt(itp->zYt()-1);
- itp->uYb(itp->zYb()-1);
- itp->uXl(itp->zXl()+1);
- itp->uXp(itp->zXp()+1);
- break;
- case 4:
- itp->uYt(itp->zYt()+1);
- itp->uYb(itp->zYb()+1);
- itp->uXl(itp->zXl()+1);
- itp->uXp(itp->zXp()+1);
- break;
- case -4:
- itp->uYt(itp->zYt()+1);
- itp->uYb(itp->zYb()+1);
- itp->uXl(itp->zXl()-1);
- itp->uXp(itp->zXp()-1);
- break;
- case -1:
- itp->uYt(itp->zYt()+1);
- itp->uYb(itp->zYb()+1);
- break;
- case -2:
- itp->uYt(itp->zYt()-1);
- itp->uYb(itp->zYb()-1);
- itp->uXl(itp->zXl()-1);
- itp->uXp(itp->zXp()-1);
- break;
- }
- sprawdzkolizje(lot,Okno);
- InvalidateRect(Okno,0,false);
- }
- break;
- case WM_DESTROY:
- KillTimer(Okno,10);
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc(Okno, Komunikat, wParam, lParam);
- }
- return 0;
- }
- static bool RejestrujKlasy()
- {
- WNDCLASSEX wc;
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.cbClsExtra = wc.cbWndExtra = 0;
- wc.hbrBackground = (HBRUSH) (1 + COLOR_WINDOW);
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
- wc.hInstance = GetModuleHandle(NULL);
- wc.lpfnWndProc = &FunkcjaOkienkowa;
- wc.lpszClassName = NazwaKlasy;
- wc.lpszMenuName = NULL;
- wc.style = CS_VREDRAW|CS_HREDRAW;
- return (RegisterClassEx(&wc) != 0);
- }
- static void WyrejestrujKlasy()
- {
- UnregisterClass(NazwaKlasy, GetModuleHandle(NULL));
- }
- int WINAPI WinMain(HINSTANCE Instancja, HINSTANCE Poprzednia, LPSTR Parametry, int Widocznosc)
- {
- // Zarejestruj klasę. Protestuj, jeżeli wystąpił błąd.
- if (!RejestrujKlasy()) {
- MessageBox(NULL, TEXT("Nie udało się zarejestrować klasy okna!"),
- NazwaAplikacji, MB_ICONSTOP | MB_OK);
- return 1;
- }
- // Stwórz główne okno. Również protestuj, jeżeli wystąpił błąd.
- HWND GlowneOkno = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CLIENTEDGE,
- NazwaKlasy, TEXT("Okno"), WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, CW_USEDEFAULT,102, 200,
- NULL, NULL, Instancja, NULL);
- if (GlowneOkno == NULL) {
- MessageBox(NULL, TEXT("Nie udało się stworzyć głównego okna!"),
- NazwaAplikacji, MB_ICONSTOP | MB_OK);
- return 2;
- }
- // Wyświetl i uaktualnij nowo stworzone okno.
- ShowWindow(GlowneOkno, Widocznosc);
- UpdateWindow(GlowneOkno);
- // Główna pętla komunikatów wątku.
- MSG Komunikat;
- while (GetMessage(&Komunikat, NULL, 0, 0) > 0) {
- TranslateMessage(&Komunikat);
- DispatchMessage(&Komunikat);
- }
- // Zwolnij pamięć klas i zakończ proces.
- WyrejestrujKlasy();
- return static_cast<int>(Komunikat.wParam);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement