>_<: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 else13 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 }
>_<:
1 #include2 // C 运行时头文件 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 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,<);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)244 nowX=x;245 }else{246 nowX-=10;247 if(nowX 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 else290 p[i].y+=5;291 292 if(p[i].x>nowX-25)293 p[i].x-=5;294 else295 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 }