[游戏模版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 }

时间: 2024-11-02 23:23:45

[游戏模版16] Win32 飞机射击 敌人追踪的相关文章

[游戏模版15] Win32 飞机射击

>_<:Only give you the code,try to understand it! >_<:picture 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

[游戏模版2] Win32最小框架

>_<:Just the minimum Win32  frame don't have any other special function. 1 //{{NO_DEPENDENCIES}} 2 // Microsoft Visual C++ generated include file. 3 // Used by FE.RC 4 // 5 #define IDR_MAINFRAME 128 6 #define IDD_FE_DIALOG 102 7 #define IDD_ABOUTBOX

[游戏模版3] Win32 画笔 画刷 图形

>_<:introduce the functions of define\create\use pen and brush to draw all kinds of line and some graphs. >_<!following 2 files are the same with the previous and file main.cpp has some changes. 1 //{{NO_DEPENDENCIES}} 2 // Microsoft Visual C+

[游戏模版18] Win32 五子棋

>_<:Learning its AI logic. >_<:resource >_<:code: 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 #incl

[游戏模版6] Win32 graph

>_<:there in the MyPaint(...) function respectively use Ellipse(...) draw ellipse, use RoundRect(...) draw rectangle whose angle is round, use Pie(...) draw sector also named fan shap, use Chord(...) draw  arch also named bow shaped. >_<:the s

[游戏模版4] Win32 显示鼠标位置

>_<:use MOUSE_MOVE message refresh the position information. >_<:use LOWORD(lParam) get position x and use HIWORD(lParam) get position y 1 //{{NO_DEPENDENCIES}} 2 // Microsoft Visual C++ generated include file. 3 // Used by FE.RC 4 // 5 #defin

[游戏模版5] Win32 折线 弧线

>_<:first build some points put in poly1[],poly2[] and poly3[] in the function of InitInstance(...) >_<:then in the function MyDraw() use  PolylineTo(...)\Polyline(...)\Polygon(...) draw diferent line and use PolyBezierTo(...)\PolyBezier(...)

[游戏模版20] Win32 物理引擎 加速运动

>_<:Compared with previous talk,there will be taking about how to create an accelerated speed.Only a little change in the MyPaint(...) function. >_<:resource >_<:code 1 #include <windows.h> 2 // C 运行时头文件 3 #include <stdlib.h>

[游戏模版21] Win32 物理引擎 能量守恒

>_<:Only a little change in the function of MyPaint(...),besides the initial value have some changes. >_<:resource >_<:code:    1 #include <windows.h> 2 // C 运行时头文件 3 #include <stdlib.h> 4 #include <cstdio> 5 #include &