• [游戏模版16] Win32 飞机射击 敌人追踪


    >_<:AI introduction.

    >_<:According the plane position (nowX,nowY) relative to birds' position (p[i].x,p[i].y)  automaticly change birds' position.

     1 //贴上小鸟
     2 SelectObject(bufdc,bird);
     3 for(i=0;i<3;i++){
     4     if(rand()%3!=1){
     5         if(p[i].y>nowY-16)
     6             p[i].y-=5;
     7         else
     8             p[i].y+=5;
     9 
    10         if(p[i].x>nowX-25)
    11             p[i].x-=5;
    12         else
    13             p[i].x+=5;
    14     }
    15     if(p[i].x>nowX-25){   //判断小鸟移动方向
    16         BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,61,61,SRCAND);
    17         BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,0,61,SRCPAINT);
    18     }else{
    19         BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,61,0,SRCAND);
    20         BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,0,0,SRCPAINT);
    21     }
    22 }

    >_<:resource

      1 #include <windows.h>
      2 // C 运行时头文件
      3 #include <stdlib.h>
      4 #include <cstdio>
      5 #include <malloc.h>
      6 #include <memory.h>
      7 #include <tchar.h>
      8 #include <string>
      9 
     10 
     11 //定义结构,飞机子弹
     12 struct BULLET{
     13     int x,y;
     14     bool exist;
     15 };
     16 
     17 // 全局变量:
     18 HINSTANCE hInst;                                // 当前实例
     19 
     20 HBITMAP bg,ship,bullet,bird;//背景图,飞机图,子弹图,鸟
     21 HDC hdc,mdc,bufdc;
     22 HWND hWnd;
     23 int x,y,nowX,nowY;//鼠标坐标,飞机坐标(贴图坐标)
     24 int w=0,bcount;//滚动背景所要剪切的宽度,子弹数目
     25 BULLET b[30];//存储飞机发出的子弹
     26 POINT p[3];//鸟的位置
     27 
     28 // 此代码模块中包含的函数的前向声明:
     29 ATOM                MyRegisterClass(HINSTANCE hInstance);
     30 BOOL                InitInstance(HINSTANCE, int);
     31 LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
     32 INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
     33 void                MyPaint(HDC hdc);
     34 
     35 int APIENTRY _tWinMain(HINSTANCE hInstance,
     36                      HINSTANCE hPrevInstance,
     37                      LPTSTR    lpCmdLine,
     38                      int       nCmdShow){
     39 
     40     MSG msg;
     41     MyRegisterClass(hInstance);
     42     // 执行应用程序初始化:
     43     if (!InitInstance (hInstance, nCmdShow)){
     44         return FALSE;
     45     }
     46     // 主消息循环:
     47     while (GetMessage(&msg, NULL, 0, 0)){
     48         TranslateMessage(&msg);
     49         DispatchMessage(&msg);
     50     }
     51     return (int) msg.wParam;
     52 }
     53 
     54 //  函数: MyRegisterClass()
     55 //
     56 //  目的: 注册窗口类。
     57 ATOM MyRegisterClass(HINSTANCE hInstance){
     58     WNDCLASSEX wcex;
     59 
     60     wcex.cbSize = sizeof(WNDCLASSEX);
     61 
     62     wcex.style            = CS_HREDRAW | CS_VREDRAW;
     63     wcex.lpfnWndProc    = WndProc;
     64     wcex.cbClsExtra        = 0;
     65     wcex.cbWndExtra        = 0;
     66     wcex.hInstance        = hInstance;
     67     wcex.hIcon            = NULL;
     68     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
     69     wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
     70     wcex.lpszMenuName    = "Beautifulzzzz";
     71     wcex.lpszClassName    = "Beautifulzzzz";
     72     wcex.hIconSm        = NULL;
     73 
     74     return RegisterClassEx(&wcex);
     75 }
     76 
     77 //   函数: InitInstance(HINSTANCE, int)
     78 //
     79 //   目的: 保存实例句柄并创建主窗口
     80 //
     81 //   注释:
     82 //
     83 //        在此函数中,我们在全局变量中保存实例句柄并
     84 //        创建和显示主程序窗口。
     85 //        1.设定飞机的初始位置
     86 //        2.设定鼠标位置及隐藏
     87 //        3.设定鼠标光标移动区域
     88 //
     89 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){
     90 
     91    HBITMAP bmp;
     92    POINT pt,lt,rb;
     93    RECT rect;
     94 
     95    hInst = hInstance; // 将实例句柄存储在全局变量中
     96 
     97    hWnd = CreateWindow("Beautifulzzzz","Beautifulzzzz", WS_OVERLAPPEDWINDOW,
     98       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
     99 
    100    if (!hWnd)
    101    {
    102       return FALSE;
    103    }
    104 
    105    MoveWindow(hWnd,10,10,640,480,true);
    106    ShowWindow(hWnd, nCmdShow);
    107    UpdateWindow(hWnd);
    108 
    109    hdc=GetDC(hWnd);
    110    mdc=CreateCompatibleDC(hdc);
    111    bufdc=CreateCompatibleDC(hdc);
    112 
    113    bmp=CreateCompatibleBitmap(hdc,640,480);
    114    SelectObject(mdc,bmp);
    115 
    116    bg=(HBITMAP)LoadImageA(NULL,"bg.bmp",IMAGE_BITMAP,648,480,LR_LOADFROMFILE);
    117    ship=(HBITMAP)LoadImageA(NULL,"ship.bmp",IMAGE_BITMAP,100,148,LR_LOADFROMFILE);
    118    bullet=(HBITMAP)LoadImageA(NULL,"bullet.bmp",IMAGE_BITMAP,10,20,LR_LOADFROMFILE);
    119    bird=(HBITMAP)LoadImageA(NULL,"bird.bmp",IMAGE_BITMAP,122,122,LR_LOADFROMFILE);
    120 
    121    x=300;
    122    y=300;
    123    nowX=300;
    124    nowY=300;
    125 
    126    //设定鼠标光标位置
    127    pt.x=300;
    128    pt.y=300;
    129    ClientToScreen(hWnd,&pt);
    130    SetCursorPos(pt.x,pt.y);
    131 
    132    ShowCursor(false);//隐藏鼠标光标
    133 
    134    //限制鼠标光标移动区域
    135    GetClientRect(hWnd,&rect);
    136    lt.x=rect.left;
    137    lt.y=rect.top;
    138    rb.x=rect.right;
    139    rb.y=rect.bottom;
    140    ClientToScreen(hWnd,&lt);
    141    ClientToScreen(hWnd,&rb);
    142    rect.left=lt.x;
    143    rect.top=lt.y;
    144    rect.right=rb.x;
    145    rect.bottom=rb.y;
    146    ClipCursor(&rect);
    147 
    148 
    149    SetTimer(hWnd,1,50,NULL);
    150    MyPaint(hdc);
    151 
    152    return TRUE;
    153 }
    154 
    155 //
    156 //  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
    157 //
    158 //  目的: 处理主窗口的消息。
    159 //
    160 //  WM_COMMAND    - 处理应用程序菜单
    161 //  WM_PAINT    - 绘制主窗口
    162 //  WM_DESTROY    - 发送退出消息并返回
    163 //
    164 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    165     int i;
    166     int wmId, wmEvent;
    167     PAINTSTRUCT ps;
    168 
    169     switch (message)
    170     {
    171     case WM_KEYDOWN:          //按下消息
    172         if(wParam==VK_ESCAPE) //按下[esc]
    173             PostQuitMessage(0);
    174         break;
    175     case WM_LBUTTONDOWN:      //单击鼠标左键消息
    176         for(i=0;i<30;i++)
    177         {
    178             if(!b[i].exist)
    179             {
    180                 b[i].x=nowX;
    181                 b[i].y=nowY+30;
    182                 b[i].exist=true;
    183                 bcount++;
    184                 break;
    185             }
    186         }
    187     case WM_MOUSEMOVE:
    188         x=LOWORD(lParam);    //取得鼠标x坐标
    189         if(x>530)
    190             x=530;
    191         else if(x<0)
    192             x=0;
    193 
    194         y=HIWORD(lParam);
    195         if(y>380)
    196             y=380;
    197         else if(y<0)
    198             y=0;
    199 
    200         break;
    201     case WM_TIMER:
    202         A:MyPaint(hdc);
    203         break;
    204     case WM_PAINT:
    205         hdc = BeginPaint(hWnd, &ps);
    206         // TODO: 在此添加任意绘图代码...
    207         EndPaint(hWnd, &ps);
    208         break;
    209     case WM_DESTROY:
    210         ClipCursor(NULL);//回复鼠标移动区域
    211 
    212         DeleteDC(mdc);
    213         DeleteDC(bufdc);
    214         DeleteObject(bg);
    215         DeleteObject(bullet);
    216         DeleteObject(ship);
    217         ReleaseDC(hWnd,hdc);
    218 
    219         PostQuitMessage(0);
    220         break;
    221     default:
    222         return DefWindowProc(hWnd, message, wParam, lParam);
    223     }
    224     return 0;
    225 }
    226 
    227 //1.设定飞机坐标并进行贴图
    228 //2.设定所有子弹坐标并进行贴图
    229 //3.显示真正的鼠标坐标所在的坐标
    230 void MyPaint(HDC hdc){
    231     char str[20]="";
    232     int i;
    233 
    234     //贴上背景图
    235     SelectObject(bufdc,bg);
    236     BitBlt(mdc,0,0,w,480,bufdc,640-w,0,SRCCOPY);
    237     BitBlt(mdc,w,0,640-w,480,bufdc,0,0,SRCCOPY);
    238 
    239 
    240     //飞机坐标向鼠标坐标位置靠近
    241     if(nowX<x){
    242         nowX+=10;
    243         if(nowX>x)
    244             nowX=x;
    245     }else{
    246         nowX-=10;
    247         if(nowX<x)
    248             nowX=x;
    249     }
    250 
    251     if(nowY<y){
    252         nowY-=10;
    253         if(nowY<y)
    254             nowY=y;
    255     }else{
    256         nowY+=10;
    257         if(nowY>y)
    258             nowY=y;
    259     }
    260 
    261     //贴上飞机图
    262     SelectObject(bufdc,ship);
    263     BitBlt(mdc,nowX,nowY,100,74,bufdc,0,74,SRCAND);
    264     BitBlt(mdc,nowX,nowY,100,74,bufdc,0,0,SRCPAINT);
    265 
    266     SelectObject(bufdc,bullet);
    267     if(bcount!=0){
    268         for(i=0;i<30;i++){
    269             if(b[i].exist){
    270                 //贴上子弹图
    271                 BitBlt(mdc,b[i].x,b[i].y,10,10,bufdc,0,10,SRCAND);
    272                 BitBlt(mdc,b[i].x,b[i].y,10,10,bufdc,0,0,SRCPAINT);
    273 
    274                 b[i].x-=10;
    275                 if(b[i].x<0){
    276                     bcount--;
    277                     b[i].exist=false;
    278                 }
    279             }
    280         }
    281     }
    282 
    283     //贴上小鸟
    284     SelectObject(bufdc,bird);
    285     for(i=0;i<3;i++){
    286         if(rand()%3!=1){
    287             if(p[i].y>nowY-16)
    288                 p[i].y-=5;
    289             else
    290                 p[i].y+=5;
    291 
    292             if(p[i].x>nowX-25)
    293                 p[i].x-=5;
    294             else
    295                 p[i].x+=5;
    296         }
    297         if(p[i].x>nowX-25){   //判断小鸟移动方向
    298             BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,61,61,SRCAND);
    299             BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,0,61,SRCPAINT);
    300         }else{
    301             BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,61,0,SRCAND);
    302             BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,0,0,SRCPAINT);
    303         }
    304     }
    305 
    306     //显示鼠标坐标
    307     sprintf(str,"x坐标:  %d   ",x);
    308     TextOutA(mdc,0,0,str,strlen(str));
    309     sprintf(str,"y坐标:  %d   ",y);
    310     TextOutA(mdc,0,20,str,strlen(str));
    311 
    312     BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
    313 
    314     w+=10;
    315     if(w==640)
    316         w=0;
    317 }
  • 相关阅读:
    Gearman分布式任务处理系统(六)跨多种环境部署
    Gearman分布式任务处理系统(五)版本介绍、安装方法和使用说明
    Gearman分布式任务处理系统(四)Gearman协议
    Gearman分布式任务处理系统(三)libevent介绍
    Java课程笔记_4
    Lesson 13-14 How often do you exercise?
    Lesson 11-12 Men and Women
    Java课程笔记_3
    Lession 9-10 Cell Phone Taboos
    Lession 5-6 When you have a cold
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3734112.html
Copyright © 2020-2023  润新知