>_<: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. 数据库中int类型存在空数据开发过程中model和dal层处理方法

    model层 public Int32? IsFullAttendance { get; set; } dal层  if (dr["IsFullAttendance"] + &qu ...

  2. java与微信企业号交互

    微信企业号接收消息(使用SpringMVC): http://blog.csdn.net/omsvip/article/details/39480577 微信企业号api: http://qydev. ...

  3. java基础八 [序列化和文件的输入/输出](阅读Head First Java记录)

    对象具有状态和行为两种属性.行为存在类中的方法中,想要保存状态有多种方法,这里介绍两种: 一是保存整个当前对象本身(通过序列化):一是将对象中各个状态值保存到文件中(这种方式可以给其他非JAVA程序用 ...

  4. cadence学习之原理图——连线

    重点: (1)两种连接方式:Place Net和Place Net Alias (2)交叉线之间的电气连接Place Junction (3)引脚悬空 Place no connect (4)两器件管 ...

  5. C++队列中应该注意的一些问题

    第一次在C++中写类,新手,见笑 #include<iostream.h>#include<iostream>template<typename T> class ...

  6. DropDownList的使用,RadioButtonList的使用

    DropDownList的使用之从后台动态获取值 前端aspx代码如下 <asp:DropDownList ID="DDLTypeID" runat="server ...

  7. iOS7.0适配问题

    self.navigationController.navigationBar.translucent = YES,导航栏透明 extendedLayoutIncludesOpaqueBars = Y ...

  8. JavaWeb---图书馆管理系统

    写在开头,以后每天写记录. 今天,初步了解了一下,项目需求,用现在自己所学的知识,很多还不能做出来. 先用目前的知识,一步步的做出来,不断的完善,今天遇到的问题: 任务分析: 01.list页面的ad ...

  9. Servlet调用过程整理

  10. Oracle 截取、查找字符函数(持续更新)

    整理一些常用的截取.查找字符函数: 1.查找某一个字符串中某一个字符(串)出现的次数 SELECT LENGTH(REGEXP_REPLACE(REPLACE('anne<br>lily& ...