// 脚踏实地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
/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: 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)
{
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)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_LBUTTONDOWN()
ON_WM_TIMER()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
//}}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
////////////////////////////////////////////////////////////////////////////////
MoveWindow(0,0,800,600);//窗口定位
CenterWindow(); //居中窗口
//---------------------------------------------------------------
m_game.dir="../../图片/";//图片路径
m_game.initmap(); //初始化类
// m_game.loaddata(); //调资源包............................
fidtim=0; //寻路时间
down=0;dowx=0;dowy=0; //左键按键清0
//--------------------------------------------------------------------
//................................................................
CString str=" 这是《学VC、编游戏》的第七个示例\r\n\r\n";
str+=" 在这一章,我们使用了以下知识、技术。\r\n";
str+="1.设置障碍,建立地图障碍数字化模型。\r\n";
str+="2.加入了角色的自动寻路的算法。游戏中的活动对象都可以自动寻路。\r\n";
str+="3.加入了其它动物在场景中随机活动的方法。\r\n";
str+="4.加入了选择地图的功能。\r\n";
str+="5.加入了图形光标。\r\n\r\n";
str+="重点:自动寻址的实现方法。\r\n";
str+="\r\n====操作方法====\r\n\r\n";
str+="A、在场景内点任意点,指挥主角移动。\r\n";
str+="B、将鼠标移到场景外,可以移动地图。\r\n";
str+="C、在微缩地图上点一下,可以快速定位。\r\n\r\n";
str+="注: 在5X5的场景中我们设了两个迷宫,你试试看。\r\n";
GetDlgItem(IDC_EDIT1)->MoveWindow
( m_game.mapl,m_game.maph+80,m_game.mapw,360,TRUE);
SetDlgItemText(IDC_EDIT1, str);
//................................................................
GetDlgItem(IDC_STATIC0)->MoveWindow( 0,8,WIDTH+4,HEIGHT+4,TRUE);
GetDlgItem(IDC_STATIC1)->MoveWindow
( m_game.mapl-2,m_game.mapt-2,m_game.mapw+4,m_game.maph+4,TRUE);
GetDlgItem(IDC_STATIC2)->MoveWindow
( m_game.mapl,m_game.maph+20,m_game.mapw,30,TRUE);
GetDlgItem(IDOK)->MoveWindow
( m_game.mapl,m_game.maph+55,m_game.mapw,25,TRUE);//调地图
GetDlgItem(IDC_STATIC3)->MoveWindow(2,600-26,260,18,TRUE); //提示
GetDlgItem(IDC_STATIC4)->MoveWindow(2+265,600-26,270,18,TRUE); //时间
GetDlgItem(IDC_STATIC5)->MoveWindow(2+270*2,600-26,250,18,TRUE);//坐标
//在状态栏隐藏对话框==============================
DWORD dwExStyle=GetExStyle();
dwExStyle =(~WS_EX_APPWINDOW & dwExStyle) | WS_EX_TOOLWINDOW;
SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,dwExStyle);
//================================================
SetTimer(3,100,NULL);
////////////////////////////////////////////////////////////////////////////////
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()
{
return (HCURSOR) m_hIcon;
}
void CMyDlg::OnCancel() //退出,[类向导中定义生成]
{ KillTimer(1);KillTimer(2);
if( ::MessageBox(GetSafeHwnd(), "退出程序吗?","请您确定!",
MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 ) == IDYES )
{m_game.exit(); //退出类
CDialog::OnCancel();
}
else {SetTimer(1,TIMER,NULL);SetTimer(2,1000,NULL);}
}
void CMyDlg::OnTimer(UINT nIDEvent) //时钟函数,[类向导中定义生成]
{////////////////////////////////////////////////////////////////////////////////////
if(nIDEvent==1)//动画刷屏
{tim=timeGetTime(); //开始时间
CClientDC dc(this);
m_game.mlmap(); //地图块移动拼接
int i;
for(i=0;i<m_game.rs;i++)
m_game.setobj(i); //对象显示
BitBlt(dc.m_hDC,2,10,WIDTH,HEIGHT,m_game.BkDC1,0,0,SRCCOPY);//用Bk1刷新窗口
SetTextColor(dc.m_hDC,RGB(0,0,255));//字色
SetBkMode(dc.m_hDC,TRANSPARENT);
TextOut(dc.m_hDC,200,30,"我现在可以自己找路,再不乱穿了。",32);
if(m_game.rs>1) m_game.smlmap(dc.m_hDC); //显示小地图
tim=timeGetTime()-tim; //显示时间=结束时间-开始时间
}
if(nIDEvent==2)//显示信息
{char cc[255],c1[255];
int q=m_game.mann;
sprintf(cc,"地图[X:%4d Y:%4d] 人[x:%4d y:%4d]",
m_game.scrx,m_game.scry,m_game.man[q].xix,m_game.man[q].xiy);
SetDlgItemText(IDC_STATIC5, cc);
sprintf(cc,"[显示区对象数:%3d] [%3dms/屏] [CPU占用%3d%]",m_game.mans,tim,tim*100/TIMER);
SetDlgItemText(IDC_STATIC4, cc);
switch(fidtim)
{case -1: {strcpy(c1,"障碍点"); break;}
case -2: {strcpy(c1,"起始点"); break;}
case -3: {strcpy(c1,"无路"); break;}
case -4: {strcpy(c1,"搜索忙"); break;}
case -5: {strcpy(c1,"太远了"); break;}
case -10: {strcpy(c1,"左上边界"); break;}
case -20: {strcpy(c1,"右下边界"); break;}
default: {sprintf(c1,"搜索时间:%dms",fidtim);}
}
sprintf(cc,"地图%dX%d 障碍%dX%d %s,%d",
WIDTH*m_game.SCRP0,HEIGHT*m_game.SCRP0,
WIDTH*m_game.SCRP0/GX,HEIGHT*m_game.SCRP0/GY,c1,m_game.man[q].pk);
SetDlgItemText(IDC_STATIC3, cc);
m_game.randxy();//随机产生兽的移动目标
}
if(nIDEvent==3)//启动延时
{KillTimer(3);
OnOK();//调地图
}
CDialog::OnTimer(nIDEvent);
}
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)//取针对主角的目标位置,[类向导中定义生成]
{/////////////////////////////////////////////////////////////////////////////////////
int x0=point.x,y0=point.y;
if(y0<10)//拖动窗口
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
CClientDC dc(this);
fidtim=m_game.leftdown(dc.m_hDC,x0,y0);//按左键
SetCursor(m_Cur); //显示光标
/////////////////////////////////////////////////////////////////////////////////////
CDialog::OnLButtonDown(nFlags, point);
}
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{ CRect lpRect0;
GetWindowRect(&lpRect0);
int x0=pMsg->pt.x-lpRect0.left;
int y0=pMsg->pt.y-lpRect0.top;
CClientDC dc(this);
if(m_game.rs>0) //数据调入后
{m_game.movesmap(x0,y0); //移动地图
// m_game.smlmap(dc.m_hDC); //显示小地图
}
return CDialog::PreTranslateMessage(pMsg);
}
void CMyDlg::OnLButtonUp(UINT nFlags, CPoint point)//地图编辑用
{ down=dowx=dowy=0;
SetCursor(m_Cur);
CDialog::OnLButtonUp(nFlags, point);
}
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)//鼠标移动的消息
{ int x=point.x-2-dowx;
int y=point.y-10-dowy;
int x0=(x+m_game.scrx)/GX,y0=(y
没有合适的资源?快使用搜索试试~ 我知道了~
学VC编游戏-08.脚踏实地
共20个文件
cur:5个
h:4个
cpp:3个
2星 需积分: 3 33 下载量 53 浏览量
2008-11-24
10:35:05
上传
评论
收藏 18KB 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”将程序解包到硬盘上。不要直接用拷贝光盘的办法(直接拷贝的文件是只读属性的)。
资源推荐
资源详情
资源评论
收起资源包目录
08.脚踏实地.rar (20个子文件)
08.脚踏实地
脚踏实地.dsw 541B
RES
脚踏实地.ico 3KB
CURSOR3.CUR 2KB
CURSOR4.CUR 326B
CURSOR0.CUR 766B
CURSOR2.CUR 2KB
CURSOR1.CUR 2KB
脚踏实地.rc2 400B
BITMAP1.BMP 1KB
TEST.DSW 541B
StdAfx.cpp 210B
脚踏实地.dsp 5KB
脚踏实地Dlg.h 2KB
StdAfx.h 1KB
脚踏实地.h 1KB
脚踏实地.rc 6KB
脚踏实地.clw 1KB
脚踏实地Dlg.cpp 9KB
RESOURCE.H 1KB
脚踏实地.cpp 2KB
共 20 条
- 1
资源评论
- youkivjvj2015-01-14跟我想要的不一样,而且自己不会用
- WeeMeggie2012-07-28编译时有这个错误 Cannot open include file: '../游戏类库/game_寻路.h': No such file or directory
mickgrant
- 粉丝: 2
- 资源: 48
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码
- C#,排列组合的堆生成法(Heap’s Algorithm for generating permutations)算法与源代码
- C#,老鼠迷宫问题的回溯法求解(Rat in a Maze)算法与源代码
- 6693eeb8d683458a07938615fba9e68f.apk
- C#,数值计算,解微分方程的龙格-库塔二阶方法与源代码
- C#,数值计算,用割线法(Secant Method)求方程根的算法与源代码
- C#,子集和问题(Subset Sum Problem)的算法与源代码
- mongodb 数据库基本操作
- Linux操作系统基础教程
- Linux操作系统相关习题集
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功