zoukankan      html  css  js  c++  java
  • 控制方向键盘

    HBITMAP girl[4],bg;
    HDC hdc,mdc,bufdc;
    HWND hWnd;
    DWORD tPre,tNow=0;
    int num,dir,x,y;

    void GemeCycle();
    void MyPaint(HDC hdc);

    ::ZeroMemory(&msg,sizeof(msg)); //指定的内存块清零。 使用结构前清零,而不让结构的成员数值具有不确定性
     // 主消息循环:
     while (msg.message!=WM_QUIT/*GetMessage(&msg, NULL, 0, 0)*/)
     {
      //if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
      if(::PeekMessageA(&msg,NULL,0,0,PM_REMOVE))
      {
       TranslateMessage(&msg);
       DispatchMessage(&msg);
      }
      else
      {
       if (tPre-tNow>0)
       {
        GemeCycle();
       }
      }

     hdc=GetDC(hWnd);
       mdc=CreateCompatibleDC(hdc);
       bufdc=CreateCompatibleDC(hdc);

       bmp=CreateCompatibleBitmap(hdc,640,480);
       SelectObject(mdc,bmp);

       x=300;
       y=250;
       dir=0;
       num=0;

       girl[0]=(HBITMAP)LoadImage(NULL,"0.bmp",IMAGE_BITMAP,120,91,
        LR_LOADFROMFILE);
       girl[1]=(HBITMAP)LoadImage(NULL,"1.bmp",IMAGE_BITMAP,120,91,
        LR_LOADFROMFILE);
       girl[2]=(HBITMAP)LoadImage(NULL,"2.bmp",IMAGE_BITMAP,120,91,
        LR_LOADFROMFILE);
       girl[3]=(HBITMAP)LoadImage(NULL,"3.bmp",IMAGE_BITMAP,120,91,
        LR_LOADFROMFILE);
       bg=(HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,640,480,LR_LOADFROMFILE);
     
       MyPaint(hdc);

    case WM_KEYDOWN:
      switch(wParam)
      {
      case VK_UP:
       switch(dir)
       {
       case 0:
        y-=10;
        break;
       case 1:
        y-=1;
        y-=8;
        break;
       case 2:
        x+=2;
        y-=10;
        break;
       case 3:
        x+=2;
        y-=10;
        break;
       }
       if(y<0)
        y=0;
       dir=0;
       break;
      case VK_DOWN:
       switch(dir)
       {
       case 0:
        x+=1;
        y+=8;
        break;
       case 1:
        y+=10;
        break;
       case 2:
        x+=3;
        y+=6;
        break;
       case 3:
        x+=3;
        y+=6;
        break;
       }
       if(y>375)
        y=375;
       dir=1;
       break;
      case VK_LEFT:
       switch(dir)
       {
       case 0:
        x-=12;
        break;
       case 1:
        x-=13;
        y+=4;
        break;
       case 2:
        x-=10;
        break;
       case 3:
        x-=10;
        break;
       }
       if(x<10)
        x=0;
       dir=2;
       break;
      case VK_RIGHT:
       switch(dir)
       {
       case 0:
        x+=8;
        break;
       case 1:
        x+=7;
        y+=4;
        break;
       case 2:
        x+=10;
        break;
       case 3:
        x+=10;
        break;
       }
       if(x>575)
        x=575;
       dir=3;
       break;
      }
      break;
     case WM_DESTROY:
      int i;

      DeleteDC(mdc);
      DeleteDC(bufdc);
      for(i=0;i<4;i++)
       DeleteObject(girl[i]);
      DeleteObject(bg);
      //ReleaseDC(hWnd,hdc);

      PostQuitMessage(0);
      break;
     default:
      return DefWindowProc(hWnd, message, wParam, lParam);
     }

    void MyPaint(HDC hdc)
    {
     int w,h;

     SelectObject(bufdc,bg);
     BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);

     SelectObject(bufdc,girl[dir]);
     switch(dir)
     {
     case 0:
      w=60;
      h=74;
      break;
     case 1:
      w=60;
      h=91;
      break;
     case 2:
      w=60;
      h=91;
      break;
     case 3:
      w=60;
      h=91;
      break;
     }

     BitBlt(mdc,x,y,w,h,bufdc,60,0,SRCAND);
     BitBlt(mdc,x,y,w,h,bufdc,num*w,0,SRCPAINT);
     BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);

     tPre=GetTickCount();

     num++;
     if(num==8)
      num=0;
    }

    void GemeCycle()
    {
     int w,h;

     SelectObject(bufdc,bg);
     BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);

     SelectObject(bufdc,girl[dir]);
     switch(dir)
     {
     case 0:
      w=60;
      h=74;
      break;
     case 1:
      w=60;
      h=91;
      break;
     case 2:
      w=60;
      h=91;
      break;
     case 3:
      w=60;
      h=91;
      break;
     }

     BitBlt(mdc,x,y,w,h,bufdc,60,0,SRCAND);
     BitBlt(mdc,x,y,w,h,bufdc,0,0,SRCPAINT);
     BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);

     //tPre=GetTickCount();
     tNow =tPre+400;
     num++;
     if(num==8)
      num=0;
    }

  • 相关阅读:
    2014-写给明年现在的自己
    DDD 领域驱动设计-Value Object(值对象)如何使用 EF 进行正确映射
    DDD 领域驱动设计-在动手之前,先把你的脑袋清理干净
    醍醐灌顶:领域驱动设计实现之路
    拨乱反正:DDD 回归具体的业务场景,Domain Model 再再重新设计
    设计窘境:来自 Repository 的一丝线索,Domain Model 再重新设计
    No zuo no die:DDD 应对具体业务场景,Domain Model 重新设计
    拨开迷雾,找回自我:DDD 应对具体业务场景,Domain Model 到底如何设计?
    【记录】GitHub/TortoiseGit 修改邮箱/提交者
    死去活来,而不变质:Domain Model(领域模型) 和 EntityFramework 如何正确进行对象关系映射?
  • 原文地址:https://www.cnblogs.com/batman425/p/3259540.html
Copyright © 2011-2022 走看看