>_<:AI introduction.

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

 //贴上小鸟
SelectObject(bufdc,bird);
for(i=;i<;i++){
if(rand()%!=){
if(p[i].y>nowY-)
p[i].y-=;
else
p[i].y+=; if(p[i].x>nowX-)
p[i].x-=;
else
p[i].x+=;
}
if(p[i].x>nowX-){ //判断小鸟移动方向
BitBlt(mdc,p[i].x,p[i].y,,,bufdc,,,SRCAND);
BitBlt(mdc,p[i].x,p[i].y,,,bufdc,,,SRCPAINT);
}else{
BitBlt(mdc,p[i].x,p[i].y,,,bufdc,,,SRCAND);
BitBlt(mdc,p[i].x,p[i].y,,,bufdc,,,SRCPAINT);
}
}

>_<:resource

 #include <windows.h>
// C 运行时头文件
#include <stdlib.h>
#include <cstdio>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <string> //定义结构,飞机子弹
struct BULLET{
int x,y;
bool exist;
}; // 全局变量:
HINSTANCE hInst; // 当前实例 HBITMAP bg,ship,bullet,bird;//背景图,飞机图,子弹图,鸟
HDC hdc,mdc,bufdc;
HWND hWnd;
int x,y,nowX,nowY;//鼠标坐标,飞机坐标(贴图坐标)
int w=,bcount;//滚动背景所要剪切的宽度,子弹数目
BULLET b[];//存储飞机发出的子弹
POINT p[];//鸟的位置 // 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
void MyPaint(HDC hdc); int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow){ MSG msg;
MyRegisterClass(hInstance);
// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow)){
return FALSE;
}
// 主消息循环:
while (GetMessage(&msg, NULL, , )){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
} // 函数: MyRegisterClass()
//
// 目的: 注册窗口类。
ATOM MyRegisterClass(HINSTANCE hInstance){
WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = ;
wcex.cbWndExtra = ;
wcex.hInstance = hInstance;
wcex.hIcon = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+);
wcex.lpszMenuName = "Beautifulzzzz";
wcex.lpszClassName = "Beautifulzzzz";
wcex.hIconSm = NULL; return RegisterClassEx(&wcex);
} // 函数: InitInstance(HINSTANCE, int)
//
// 目的: 保存实例句柄并创建主窗口
//
// 注释:
//
// 在此函数中,我们在全局变量中保存实例句柄并
// 创建和显示主程序窗口。
// 1.设定飞机的初始位置
// 2.设定鼠标位置及隐藏
// 3.设定鼠标光标移动区域
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){ HBITMAP bmp;
POINT pt,lt,rb;
RECT rect; hInst = hInstance; // 将实例句柄存储在全局变量中 hWnd = CreateWindow("Beautifulzzzz","Beautifulzzzz", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, , CW_USEDEFAULT, , NULL, NULL, hInstance, NULL); if (!hWnd)
{
return FALSE;
} MoveWindow(hWnd,,,,,true);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd); hdc=GetDC(hWnd);
mdc=CreateCompatibleDC(hdc);
bufdc=CreateCompatibleDC(hdc); bmp=CreateCompatibleBitmap(hdc,,);
SelectObject(mdc,bmp); bg=(HBITMAP)LoadImageA(NULL,"bg.bmp",IMAGE_BITMAP,,,LR_LOADFROMFILE);
ship=(HBITMAP)LoadImageA(NULL,"ship.bmp",IMAGE_BITMAP,,,LR_LOADFROMFILE);
bullet=(HBITMAP)LoadImageA(NULL,"bullet.bmp",IMAGE_BITMAP,,,LR_LOADFROMFILE);
bird=(HBITMAP)LoadImageA(NULL,"bird.bmp",IMAGE_BITMAP,,,LR_LOADFROMFILE); x=;
y=;
nowX=;
nowY=; //设定鼠标光标位置
pt.x=;
pt.y=;
ClientToScreen(hWnd,&pt);
SetCursorPos(pt.x,pt.y); ShowCursor(false);//隐藏鼠标光标 //限制鼠标光标移动区域
GetClientRect(hWnd,&rect);
lt.x=rect.left;
lt.y=rect.top;
rb.x=rect.right;
rb.y=rect.bottom;
ClientToScreen(hWnd,&lt);
ClientToScreen(hWnd,&rb);
rect.left=lt.x;
rect.top=lt.y;
rect.right=rb.x;
rect.bottom=rb.y;
ClipCursor(&rect); SetTimer(hWnd,,,NULL);
MyPaint(hdc); return TRUE;
} //
// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 目的: 处理主窗口的消息。
//
// WM_COMMAND - 处理应用程序菜单
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出消息并返回
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
int i;
int wmId, wmEvent;
PAINTSTRUCT ps; switch (message)
{
case WM_KEYDOWN: //按下消息
if(wParam==VK_ESCAPE) //按下[esc]
PostQuitMessage();
break;
case WM_LBUTTONDOWN: //单击鼠标左键消息
for(i=;i<;i++)
{
if(!b[i].exist)
{
b[i].x=nowX;
b[i].y=nowY+;
b[i].exist=true;
bcount++;
break;
}
}
case WM_MOUSEMOVE:
x=LOWORD(lParam); //取得鼠标x坐标
if(x>)
x=;
else if(x<)
x=; y=HIWORD(lParam);
if(y>)
y=;
else if(y<)
y=; break;
case WM_TIMER:
A:MyPaint(hdc);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
ClipCursor(NULL);//回复鼠标移动区域 DeleteDC(mdc);
DeleteDC(bufdc);
DeleteObject(bg);
DeleteObject(bullet);
DeleteObject(ship);
ReleaseDC(hWnd,hdc); PostQuitMessage();
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return ;
} //1.设定飞机坐标并进行贴图
//2.设定所有子弹坐标并进行贴图
//3.显示真正的鼠标坐标所在的坐标
void MyPaint(HDC hdc){
char str[]="";
int i; //贴上背景图
SelectObject(bufdc,bg);
BitBlt(mdc,,,w,,bufdc,-w,,SRCCOPY);
BitBlt(mdc,w,,-w,,bufdc,,,SRCCOPY); //飞机坐标向鼠标坐标位置靠近
if(nowX<x){
nowX+=;
if(nowX>x)
nowX=x;
}else{
nowX-=;
if(nowX<x)
nowX=x;
} if(nowY<y){
nowY-=;
if(nowY<y)
nowY=y;
}else{
nowY+=;
if(nowY>y)
nowY=y;
} //贴上飞机图
SelectObject(bufdc,ship);
BitBlt(mdc,nowX,nowY,,,bufdc,,,SRCAND);
BitBlt(mdc,nowX,nowY,,,bufdc,,,SRCPAINT); SelectObject(bufdc,bullet);
if(bcount!=){
for(i=;i<;i++){
if(b[i].exist){
//贴上子弹图
BitBlt(mdc,b[i].x,b[i].y,,,bufdc,,,SRCAND);
BitBlt(mdc,b[i].x,b[i].y,,,bufdc,,,SRCPAINT); b[i].x-=;
if(b[i].x<){
bcount--;
b[i].exist=false;
}
}
}
} //贴上小鸟
SelectObject(bufdc,bird);
for(i=;i<;i++){
if(rand()%!=){
if(p[i].y>nowY-)
p[i].y-=;
else
p[i].y+=; if(p[i].x>nowX-)
p[i].x-=;
else
p[i].x+=;
}
if(p[i].x>nowX-){ //判断小鸟移动方向
BitBlt(mdc,p[i].x,p[i].y,,,bufdc,,,SRCAND);
BitBlt(mdc,p[i].x,p[i].y,,,bufdc,,,SRCPAINT);
}else{
BitBlt(mdc,p[i].x,p[i].y,,,bufdc,,,SRCAND);
BitBlt(mdc,p[i].x,p[i].y,,,bufdc,,,SRCPAINT);
}
} //显示鼠标坐标
sprintf(str,"x坐标: %d ",x);
TextOutA(mdc,,,str,strlen(str));
sprintf(str,"y坐标: %d ",y);
TextOutA(mdc,,,str,strlen(str)); BitBlt(hdc,,,,,mdc,,,SRCCOPY); w+=;
if(w==)
w=;
}

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

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

    >_<:Only give you the code,try to understand it! >_<:picture resource #include <windo ...

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

    >_<:Just the minimum Win32  frame don't have any other special function. //{{NO_DEPENDENCIES}} ...

  3. [游戏模版17] Win32 推箱子 迷宫

    >_<:Here introduce a simple game: >_<:resource >_<:only can push a box and finally ...

  4. [游戏模版18] Win32 五子棋

    >_<:Learning its AI logic. >_<:resource >_<:code: #include <windows.h> // C ...

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

    >_<:introduce the functions of define\create\use pen and brush to draw all kinds of line and s ...

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

    >_<:use MOUSE_MOVE message refresh the position information. >_<:use LOWORD(lParam) get ...

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

    >_<:first build some points put in poly1[],poly2[] and poly3[] in the function of InitInstance ...

  8. [游戏模版6] Win32 graph

    >_<:there in the MyPaint(...) function respectively use Ellipse(...) draw ellipse, use RoundRe ...

  9. [游戏模版7] Win32 最简单贴图

    >_<:this is the first using mapping. >_<:There will be introducing how to do: First load ...

随机推荐

  1. DataTable.Compute()用法

    DataTable.Compute()用法 2010-04-07 11:28 一.DataTable.Compute()方法說明如下 作用:          计算用来传递筛选条件的当前行上的给定表达 ...

  2. 循序渐进之Spring AOP(6) - 使用@Aspect注解

    前面几节的示例看起来让人沮丧,要记忆如此多的接口.类和继承关系,做各种复杂的配置.好在这些只是一种相对过时的实现方式,现在只需要使用@Aspect注解及表达式就可以轻松的使用POJO来定义切面,设计精 ...

  3. Eclipse is running in a JRE, but a JDK is required 解决方法(转)

    转自:http://comeonbabye.iteye.com/blog/1186239 安装Maven后每次启动出现警告信息: Eclipse is running in a JRE, but a ...

  4. java内存知识

    java对内存的分类. (网上资料)程序中用来存放数据的内存分为四块,另有一块用于存放代码 1.堆:存放所有new出来的对象(我们知道java并没有全局变量这个概念,有人是把它单独放在properti ...

  5. centos安装Python2.7

    1. 查看本机系统及python版本 # cat /etc/redhat-release CentOS release 6.7 (Final) 查看CentOS release 6.7 (Final) ...

  6. DataTable以列分组

    //DataTable以列分组 var result = from r in dt.AsEnumerable() group r by ), b = r.Field<) } into g sel ...

  7. mysql 字符串处理优化

    周五下午,同事突然说有个存储过程要帮忙优化,就拿来看看,大概看了下: 数据库端需求:数据库中要存储一个AppID字段,对应一个Account可以自行设置自己的AppID(我就不从业务上多说了), 以前 ...

  8. jQuery实现无缝滚动条

    很多时候只看别人的代码时很难看懂.有很多原因,有时候可能是没有耐心,这时候看一下实现的原理就很快明白代码的内容,所以要加些注释,让自己让别人都能看明白:有的时候就是因为知识有限就是不懂,哪怕代码很简单 ...

  9. WPF中ListBox的样式设置

    设置之后的效果为

  10. XE3随笔10:TSuperType

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...