// 走四方Dlg.cpp : implementation file
/*********************************
[学VC编游戏]
编著、程序设计:唐明理 2004.7
E-mail: cqtml@163.com
**********************************/
#include "stdafx.h"
#include "走四方.h"
#include "走四方Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////
// 数据结构定义
/////////////////////////////////////////////
typedef struct
{ int qi; //动作起点
unsigned short bc; //动作步数
} JCDZ; //对象动作结构 [5章]
typedef struct
{ short int jisu; //序号
short int xix,xiy; //角色座标
short int x0,y0; //目标位置
short int lb;
short int p; //计数
short int m0,m1; //位置初值、终值
short int zs; //动作:人[0站1走2刺3劈4倒]
short int js; //角色:人[0男1女]
short int fw; //方位: [0南1西南2西3西北4北5东北6东7东南]
} MAN; //对象结构 [5章]
/////////////////////////////////////////////
// 全局变量定义
/////////////////////////////////////////////
#define SBUF 2801 //兽最大数 [5章]
#define RBUF 801 //人最大数 [5章]
HBITMAP bit; //设备相关位图 [2章]
HDC MemDC; //角色设备场景 [2章]
HDC DCBak; //地图设备场景 [4章]
int w,h; //图形尺寸 [2章]
CString dir; //定义路径变量 [2章]
CString cc; //公用变量 [2章]
char appdir[256]; //当前目录 [3章]
CRect rect; //定义窗口尺寸变量 [3章]
MAN man[1]; //定义对象变量 [5章]
short int sbufx [SBUF];//兽的偏移量x [5章]
short int sbufy [SBUF];//兽的偏移量y [5章]
short int rbufx [RBUF];//人的偏移量x [5章]
short int rbufy [RBUF];//人的偏移量y [5章]
JCDZ zjdz[5]= {0,5,40,10,120,10,200,10,280,10};//主角动作[5章]
//0站, 1走 , 2刺 , 3劈, 4倒下
////////////////////////////////////////////
// 函数定义
////////////////////////////////////////////
BOOL getpic(CString cc,int p); //调图片到相关位图 [3章]
BOOL loadbmp(CString cc); //调BMP图片 [2章]
void TransparentBlt2( HDC hdc0, // 目标DC
int nX0,int nY0,// 目标偏移
int nW0,int nH0,// 目标宽高度
HDC hdc1, // 源DC
int nX1,int nY1,// 源起点
int nW1,int nH1,// 源宽高度
UINT Tcol // 透明色,COLORREF类型
); //透明显示 [4章]
void bianfw (int q); //方位转换 [5章]
void manmove(int i); //角色移动 [5章]
void setman (int q); //设置人物动作方位 [5章]
/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)//[MFC自动生成]
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)//[MFC自动生成]
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)//[MFC自动生成]
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers
BOOL CMyDlg::OnInitDialog()//对话框程序的初始入口,[MFC自动产生]
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
//A、在IDC_EDIT1上显示说明信息
cc="\r\n 这是《学VC、编游戏》的第四个示例:\r\n\r\n";
cc+=" 在这一章我们使用了以下知识、技术\r\n\r\n";
cc+="1.建立鼠标左键按键消息。\r\n";
cc+="2.定义一个名为MAN的数据结构来表示游戏的角色。\r\n";
cc+="3.角色移动功能函数。\r\n";
cc+="4.角色动作转换函数。\r\n";
cc+="5.角色图形规律分析。\r\n";
cc+="6.在时钟消息中加入角色移动和动作转换。\r\n";
cc+="7.加入了对象显示的校正值,使对象的显示不再跳动。\r\n\r\n";
cc+="重点:角色的移动和动作变换。";
SetDlgItemText(IDC_EDIT1,cc);
//B、窗口定位
MoveWindow(0,0,640,480); //窗口定位
CenterWindow(); //居中窗口
GetDlgItem(IDOK)->MoveWindow(640-60,0,55,18,TRUE);//确定按钮控件位置
//C、建立图形环境
MemDC =CreateCompatibleDC(0); //创建角色设备场景
DCBak =CreateCompatibleDC(0); //创建地图设备场景
GetWindowRect(rect); //取当前窗口尺寸
//D、设主角数据
man[0].lb =0; //类别[0人1兽2景]
man[0].fw =7; //方位[0南1西南2西3西北4北5东北6东7东南]
man[0].js =0; //角色[0男,1女]
man[0].zs =1; //动作[0站1走2刺3劈4倒]
man[0].xix=50; //当前位置x
man[0].xiy=50; //当前位置y
man[0].x0 =rect.Width()/2; //目标位置x
man[0].y0 =rect.Height()/2; //目标位置y
setman(0); //设置人物动作方位
//E、设置路径
GetCurrentDirectory(256,appdir);//取当前目录
dir=appdir;
if(dir.Right(8)=="运行程序")
dir="图片/";
else
dir="../运行程序/图片/"; //图片路径
//F、调入显示背景
loadbmp(dir+"地面.BMP"); //调背景图片
SelectObject(DCBak,bit); //调入位图关联到地图设备场景
//G、在背景上显示文字
SetBkMode(DCBak,TRANSPARENT); //字为透明方式
SetTextColor(DCBak,RGB(250,250,250)); //设置地图设备场景字色
cc="在场景内任意点按鼠标左键试试! 他可以上树、下水。"; //设文字内容
TextOut(DCBak,150,100,cc,lstrlen(cc)); //在DCBak显示文字
cc="搞什么嘛? 玩猫捉老鼠吗! 现在人物有些闪烁,你知道为什么吗?";//设文字内容
TextOut(DCBak,150,280,cc,lstrlen(cc)); //在DCBak显示文字
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMyDlg::OnPaint() //刷新,[类向导中定义生成]
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CMyDlg::OnQueryDragIcon()//[MFC自动生成]
{
return (HCURSOR) m_hIcon;
}
void CMyDlg::OnOK() //确定键,[类向导中定义生成]
{ GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);//隐藏文本框
//启动时钟
SetTimer(1,150,NULL); //设定时器150毫秒
}
void CMyDlg::OnCancel() //退出,[类向导中定义生成]
{//////////////////////////////////
DeleteDC(MemDC); //删除暂存设备场景
DeleteObject(bit); //删除暂存设备相关位图
DeleteDC(DCBak); //删除地图设备场景
//////////////////////////////////
CDialog::OnCancel();
}
void CMyDlg::OnTimer(UINT nIDEvent) //时钟函数,[类向导中定义生成]
{ CClientDC dc(this);
//A、用地图刷新窗口;将DCBak指向的位图拷贝到dc.m_hDC指向的当前窗口内存
int wid=rect.Width(); //当前窗口宽
int hei=rect.Height(); //当前窗口高
BitBlt(dc.m_hDC,0,0,wid,hei,DCBak,0,0,SRCCOPY);//用地图刷新窗口
//B、角色移动
manmove(0); //角色移动
//C、调角色图片到MemDC
if(getpic("人",man[0].p)==FALSE) //调角色图片
{AfxMessageBox(cc+"没找到!");return;}
SelectObject(MemDC,bit); //调入的位图关联到角色设备场景
//D、调角色的位置偏移位置
int x,y;
if(man[0].lb!=2)//不是景,景是静物没有偏移位置
{int x0=0,y0=0;
if(man[0].lb==0) {x0=rbufx[man[0].p];y0=rbufy[man[0].p];}
if(man[0].lb==1) {x0=sbufx[man[0].p];y0=sbufy[man[0].p];}
if(man[0].fw>4) x0=w-x0; //是东北、东、东南方位
x=man[0].xix-x0; //对象显示的x位置
y=man[0].xiy-y0; //对象显示的y位置
}
//E、透明显示
TransparentBlt2(dc.m_hDC,x,y,w,h,MemDC,0,0,w,h,RGB(255,255,255));//透明显示
//F、下一动作
man[0].p++; //下一动作
if(man[0].p>=man[0].m1) //若本动作完成
bianfw(0); //进行方位转换
CDialog::OnTimer(nIDEvent);
}
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point
没有合适的资源?快使用搜索试试~ 我知道了~
学VC编游戏-05.走四方
共14个文件
h:4个
cpp:3个
dsw:2个
5星 · 超过95%的资源 需积分: 9 38 下载量 96 浏览量
2008-11-24
10:33:13
上传
评论
收藏 15KB RAR 举报
温馨提示
[学vc编游戏]光盘使用说明 一、目录结构说明 01.游戏演示 演示CAI的源程序 02.我来了 第2章我来了源程序 03.让我动吧 第3章让我动吧源程序 04.别给我框框 第4章别给我框框源程序 05.走四方 第5章走四方源程序 06.穿越丛林 第6章穿越丛林源程序 07.广阔天地 第7章广阔天地源程序 08.脚踏实地 第8章脚踏实地源程序 08-1.求解最短路径 求解最短路径源程序 09.狩猎谋生 第9章狩猎谋生源程序 10.快一点 第10章快一点源程序 10-1.资源打包 资源打包源程序 11.再快一点 第11章再快一点源程序 12.真的打呀 第12章真的打呀源程序 13.地图编辑器 第13章地图编辑器源程序 游戏类库 共用GDI游戏类库 运行程序 所有运行程序 使用说明.txt 本说明文件 学vc编游戏.exe 本光盘所有文件的自解压包 二、使用方法 1、进入运行程序目录,进行“01.游戏演示.exe”。在这里,你可以任选章节运行演示程序或编译源程序。 2、在运行目录中,任选程序运行。 3、对程序章节的源程序进行编译运行。 三、注意: 1、你的机器上应装有VC6.0才能编译源程序。 2、不要在光盘上编译源程序(因为光盘是只读的)。 3、要编译[学vc编游戏]源程序一定要运行“学vc编游戏.exe”将程序解包到硬盘上。不要直接用拷贝光盘的办法(直接拷贝的文件是只读属性的)。
资源详情
资源评论
资源推荐
收起资源包目录
05.走四方.rar (14个子文件)
05.走四方
走四方Dlg.h 1KB
RES
走四方.rc2 398B
走四方.ico 3KB
TEST.DSW 537B
StdAfx.cpp 208B
走四方Dlg.cpp 14KB
走四方.dsp 4KB
走四方.rc 5KB
走四方.dsw 537B
走四方.clw 721B
StdAfx.h 1KB
Resource.h 546B
走四方.cpp 1KB
走四方.h 1KB
共 14 条
- 1
mickgrant
- 粉丝: 2
- 资源: 48
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2