Advertisement
Guest User

Untitled

a guest
Jan 15th, 2017
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Windows.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <vector>
  6. #include <iostream>
  7.  
  8. TCHAR MYCL[]=TEXT("MojaKlasa");
  9. TCHAR APPNAME[]=TEXT("kury");
  10.  
  11. #define TIMERT 15 //Frame time in ms
  12.  
  13. #define KURTIME 500
  14.  
  15. struct Kura{
  16.     POINT pos;
  17.     double stime;
  18.     bool hidden;
  19. };
  20.  
  21. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam){
  22.     static HDC hobiekt;
  23.     static HDC hdcm;
  24.     static HBITMAP mem;
  25.     static HBITMAP mold;
  26.  
  27.     static HBITMAP old;
  28.     static HBITMAP tlo;
  29.     static HBITMAP kura;
  30.     static HBITMAP mkura;
  31.     static HBITMAP celownik;
  32.     static BITMAP itlo;
  33.     static BITMAP ikura;
  34.     static BITMAP icelownik;
  35.  
  36.  
  37.     static POINT cp;
  38.     static POINT vcp;
  39.     static POINT ocp;
  40.     static POINT oldkp;
  41.     static Kura K;
  42.     static UINT punkty;
  43.  
  44.     static RECT cr;
  45.  
  46.     static double ltime;
  47.     static double ftime;
  48.  
  49.     static bool fstscan;
  50.     static bool strzal;
  51.  
  52.     switch(msg){
  53.         case WM_CLOSE:{
  54.             DestroyWindow(hwnd);
  55.         }break;
  56.         case WM_DESTROY:{
  57.             SelectObject(hobiekt,old);
  58.             SelectObject(hdcm,mold);
  59.             DeleteDC(hdcm);
  60.             DeleteDC(hobiekt);
  61.             DeleteObject(kura);
  62.             DeleteObject(celownik);
  63.             DeleteObject(mkura);
  64.             DeleteObject(tlo);
  65.  
  66.             PostQuitMessage(0);
  67.         }break;
  68.         case WM_SETFOCUS:{
  69.             ShowCursor(FALSE);
  70.             }break;
  71.         case WM_KILLFOCUS:{
  72.             ShowCursor(TRUE);
  73.             }break;
  74.         case WM_CREATE:{
  75.  
  76.             ftime=0.0;
  77.             ltime=0.0;
  78.  
  79.             punkty=0;
  80.  
  81.             fstscan=true;
  82.             HDC hdc=GetDC(hwnd);
  83.             GetClientRect(hwnd,&cr);
  84.  
  85.             hobiekt=CreateCompatibleDC(hdc);
  86.             hdcm=CreateCompatibleDC(hdc);
  87.             mem=CreateCompatibleBitmap(hdc,cr.right, cr.bottom);
  88.  
  89.             ReleaseDC(hwnd,hdc);
  90.  
  91.             mold=(HBITMAP)SelectObject(hdcm,mem);
  92.  
  93.             tlo=(HBITMAP)LoadImage(GetModuleHandle(0),TEXT("back.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
  94.             kura=(HBITMAP)LoadImage(GetModuleHandle(0),TEXT("k.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
  95.             mkura=(HBITMAP)LoadImage(GetModuleHandle(0),TEXT("km.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
  96.             celownik=(HBITMAP)LoadImage(GetModuleHandle(0),TEXT("cel.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
  97.  
  98.             if(!kura || !mkura|| !celownik|| !tlo){
  99.                 MessageBox(hwnd,TEXT("Problem z wczytaniem tekstur"),TEXT("Error"),MB_OK|MB_ICONERROR);
  100.                 PostQuitMessage(1);
  101.             }
  102.  
  103.             GetObject(tlo,sizeof(BITMAP),&itlo);
  104.             GetObject(kura,sizeof(BITMAP),&ikura);
  105.             GetObject(celownik,sizeof(BITMAP),&icelownik);
  106.  
  107.             old=(HBITMAP)SelectObject(hobiekt,tlo);
  108.             SetTimer(hwnd,0,TIMERT,0);  //main loop
  109.             SetTimer(hwnd,1,500,0); //fps update
  110.  
  111.             SetTimer(hwnd,2,KURTIME,0); //chicken reposition
  112.  
  113.         }break;
  114.         case WM_MOUSEMOVE:{
  115.             POINT ncp;
  116.             ocp=cp;
  117.  
  118.             ncp.x=LOWORD(lparam);
  119.             ncp.y=HIWORD(lparam);
  120.  
  121.             vcp.x=cp.x-ncp.x;
  122.             vcp.y=cp.y-ncp.y;
  123.  
  124.             cp=ncp;
  125.         }break;
  126.         case WM_LBUTTONDOWN:{
  127.             strzal=true;
  128.             //std::cout<<"AA"<<std::endl;
  129.         }break;
  130.         case WM_TIMER:{
  131.             RECT r;
  132.  
  133.             switch(LOWORD(wparam)){
  134.                 case 3:{
  135.                     KillTimer(hwnd,3);
  136.                     K.hidden=true;
  137.                     SetTimer(hwnd,2,KURTIME,0);
  138.                 }break;
  139.                 case 2:{
  140.                     KillTimer(hwnd,2);
  141.                     SetTimer(hwnd,3,KURTIME,0);
  142.                     K.hidden=false;
  143.                     oldkp.x=K.pos.x;
  144.                     oldkp.y=K.pos.y;
  145.  
  146.                     K.pos.x=rand()%(cr.right-icelownik.bmWidth);
  147.                     K.pos.y=rand()%(cr.bottom-icelownik.bmHeight);
  148.                 }break;
  149.                 case 1:{
  150.                     char buf[16];
  151.                     r.left=0;
  152.                     r.top=0;
  153.                     r.bottom=20;
  154.                     r.right=80;
  155.                     sprintf(buf,"FPS:%.2f",1.0/ftime);
  156.                     TextOutA(hdcm,0,0,buf,strlen(buf));
  157.                     InvalidateRect(hwnd,&r,false);
  158.                 }break;
  159.                 case 0:{
  160.  
  161.                     double rtime=time(NULL);
  162.                     SYSTEMTIME st;
  163.                     GetLocalTime(&st);
  164.                     rtime+=0.001*st.wMilliseconds;
  165.                     ftime=rtime-ltime;
  166.  
  167.                     SelectObject(hobiekt,tlo);
  168.                     BitBlt(hdcm,0,0,itlo.bmWidth,itlo.bmHeight,hobiekt,0,0,SRCCOPY);
  169.  
  170.                     if(fstscan){
  171.                         InvalidateRect(hwnd,0,0);
  172.                         fstscan=false;
  173.                     }
  174.  
  175.                     char buf[32];
  176.  
  177.                     r.left=cr.right-80;
  178.                     r.top=0;
  179.                     r.bottom=20;
  180.                     r.right=cr.right;
  181.                     sprintf(buf,"Punkty:%d",punkty);
  182.                     TextOutA(hdcm,r.left,r.top,buf,strlen(buf));
  183.                     InvalidateRect(hwnd,&r,false);
  184.  
  185.                     if(!K.hidden){
  186.                         SelectObject(hobiekt,mkura);
  187.                         BitBlt(hdcm,K.pos.x,K.pos.y,ikura.bmWidth,ikura.bmHeight,hobiekt,0,0,SRCAND);
  188.                         SelectObject(hobiekt,kura);
  189.                         BitBlt(hdcm,K.pos.x,K.pos.y,ikura.bmWidth,ikura.bmHeight,hobiekt,0,0,SRCPAINT);
  190.                         if(strzal){
  191.                             SelectObject(hobiekt,mkura);
  192.                             POINT p;
  193.                             p.x=cp.x-K.pos.x;
  194.                             p.y=cp.y-K.pos.y;
  195.  
  196.                             if(GetPixel(hobiekt,p.x,p.y)==0x000000){
  197.                                 K.hidden=true;
  198.                                 punkty++;
  199.                             }
  200.                         }
  201.                     }
  202.                     r.left=K.pos.x;
  203.                     r.right=K.pos.x+ikura.bmWidth;
  204.                     r.top=K.pos.y;
  205.                     r.bottom=K.pos.y+ikura.bmHeight;
  206.                     InvalidateRect(hwnd, &r,0);
  207.  
  208.                     r.left=oldkp.x;
  209.                     r.right=r.left+ikura.bmWidth;
  210.                     r.top=oldkp.y;
  211.                     r.bottom=oldkp.y+ikura.bmHeight;
  212.                     InvalidateRect(hwnd, &r, 0);
  213.  
  214.  
  215.                     SelectObject(hobiekt,celownik);
  216.                     BitBlt(hdcm,cp.x-icelownik.bmWidth/2,cp.y-icelownik.bmHeight/2,icelownik.bmWidth,icelownik.bmHeight,hobiekt,0,0,SRCAND);
  217.                     r.left=cp.x-icelownik.bmWidth/2;
  218.                     r.top=cp.y-icelownik.bmHeight/2;
  219.                     r.right=r.left+icelownik.bmWidth;
  220.                     r.bottom=r.top+icelownik.bmHeight;
  221.  
  222.                     r.left-=16;
  223.                     r.right+=16;
  224.                     r.top-=16;
  225.                     r.bottom+=16;
  226.  
  227.  
  228.                     if(vcp.x > 0){
  229.                         r.right+=2*(vcp.x*vcp.x+8);
  230.                     }else{
  231.                         r.left-=2*(vcp.x*vcp.x+8);
  232.                     }
  233.  
  234.                     if(vcp.y > 0){
  235.                         r.bottom+=2*(vcp.y*vcp.y+8);
  236.                     }else{
  237.                         r.top-=2*(vcp.y*vcp.y+8);
  238.                     }
  239.  
  240.  
  241.                     InvalidateRect(hwnd,&r,0);
  242.                     r.left=ocp.x;
  243.                     r.right=ocp.x+icelownik.bmWidth;
  244.                     r.top=ocp.y;
  245.                     r.bottom=ocp.y+icelownik.bmHeight;
  246.                     InvalidateRect(hwnd,&r,0);
  247.  
  248.                     SelectObject(hdcm,GetStockObject(NULL_BRUSH));
  249.  
  250.                     ltime=rtime;
  251.                     strzal=false;
  252.                 }break;
  253.             }
  254.         }break;
  255.         case WM_ERASEBKGND:{
  256.             return 1;
  257.         }break;
  258.         case WM_PAINT:{
  259.  
  260.             PAINTSTRUCT ps;
  261.             BeginPaint(hwnd,&ps);
  262.  
  263.             BitBlt(ps.hdc,0,0,cr.right,cr.bottom,hdcm,0,0,SRCCOPY);
  264.  
  265.             EndPaint(hwnd,&ps);
  266.         }break;
  267.         default:{return DefWindowProc(hwnd, msg, wparam, lparam);}break;
  268.     }
  269.     return 0;
  270. }
  271.  
  272. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
  273.     srand(time(NULL));
  274.     WNDCLASSEX wc;
  275.  
  276.     wc.cbClsExtra=0;
  277.     wc.cbSize=sizeof(WNDCLASSEX);
  278.     wc.cbWndExtra=0;
  279.     wc.hbrBackground=(HBRUSH)(1);
  280.     wc.hCursor=LoadCursor(0,IDC_ARROW);
  281.     wc.hIcon=LoadIcon(0,IDI_APPLICATION);
  282.     wc.hIconSm=LoadIcon(0, IDI_APPLICATION);
  283.     wc.hInstance=hInstance;
  284.     wc.lpfnWndProc=WndProc;
  285.     wc.lpszClassName=MYCL;
  286.     wc.lpszMenuName=NULL;
  287.     wc.style=CS_VREDRAW|CS_HREDRAW;
  288.  
  289.     if(!RegisterClassEx(&wc)){
  290.         MessageBox(0,TEXT("Nie zarejestrowac klasy glownej okienka!"),TEXT("Error"),MB_OK+MB_ICONERROR);
  291.         return 1;
  292.     }
  293.  
  294.     HWND hwnd;
  295.  
  296.     hwnd=CreateWindowEx(WS_EX_CLIENTEDGE,MYCL,APPNAME,WS_SYSMENU,CW_USEDEFAULT,CW_USEDEFAULT,640,480,NULL,NULL,hInstance,NULL);
  297.  
  298.     if(hwnd==NULL){
  299.         MessageBox(0,TEXT("Nie mozna stworzyc okienka!"),TEXT("Error"),MB_OK+MB_ICONEXCLAMATION);
  300.         UnregisterClass(MYCL,hInstance);
  301.         return 1;
  302.     }
  303.     ShowWindow(hwnd,nCmdShow);
  304.     UpdateWindow(hwnd);
  305.  
  306.     MSG msg;
  307.     while(GetMessage(&msg,NULL,0,0)>0){
  308.         TranslateMessage(&msg);
  309.         DispatchMessage(&msg);
  310.     }
  311.  
  312.     UnregisterClass(MYCL,hInstance);
  313.     return msg.wParam;
  314. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement