// 狩猎谋生Dlg.cpp : implementation file
/*********************************
[学VC编游戏]
编著、程序设计:唐明理 2004.7
E-mail: cqtml@163.com
**********************************/
#include "stdafx.h"
#include "狩猎谋生.h"
#include "狩猎谋生Dlg.h"
#include "setmap.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CString getdir;
CString getfile;
/////////////////////////////////////////////////////////////////////////////
// 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_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_TIMER()
//}}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.initmap(); //初始化类
// m_game.loaddata(); //调压缩资源包............................
fidtim=0; //寻路时间
down=0;dowx=0;dowy=0; //左键按键清0
hMCI=NULL;
//--------------------------------------------------------------------
CString str=" 这是《学VC、编游戏》的第八个示例\r\n\r\n";
str+=" 在这一章,我们使用了以下知识、技术。\r\n";
str+="1. 加入对象的碰撞检测,打斗方法,碰撞时动作转换。\r\n";
str+="2. 加入对象在障碍物后的半透明显示的技术。\r\n";
str+="3. WAV声音、MIDI音乐播放方法。\r\n";
str+="4. 又一种调地图的方法──模态对话框\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";
str+="D、ESC键,退出游戏。\r\n\r\n";
str+="你可以指挥主角去打猎了。但打不死的,因为这里我们还没有加对象的生命值。\r\n";
GetDlgItem(IDC_EDIT1)->MoveWindow
( m_game.mapl,m_game.maph+80,m_game.mapw,370,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.Alphasetobj(i,0); //对象半透明显示
for(i=0;i<m_game.rs;i++)
{m_game.Alphasetobj(i,1); //对象半透明显示
m_game.lookit(i); //角色碰撞
}
/* for(i=0;i<m_game.rs;i++)
{m_game.setobj(i); //对象显示
m_game.lookit(i); //角色碰撞
}*/
BitBlt(dc.m_hDC,2,10,WIDTH,HEIGHT,m_game.BkDC1,0,0,SRCCOPY);//用Bk1刷新窗口
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(MCIWndGetPosition(hMCI) >=MCIWndGetLength(hMCI)) MCIWndPlay(hMCI);
}
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=po
没有合适的资源?快使用搜索试试~ 我知道了~
学VC编游戏-09.狩猎谋生
共21个文件
h:5个
cur:4个
cpp:4个
需积分: 3 28 下载量 191 浏览量
2008-11-24
10:35:32
上传
评论
收藏 20KB 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”将程序解包到硬盘上。不要直接用拷贝光盘的办法(直接拷贝的文件是只读属性的)。
资源推荐
资源详情
资源评论
收起资源包目录
09.狩猎谋生.rar (21个子文件)
09.狩猎谋生
狩猎谋生.dsw 541B
RES
CURSOR3.CUR 2KB
狩猎谋生.rc2 400B
CURSOR0.CUR 766B
CURSOR2.CUR 2KB
CURSOR1.CUR 2KB
BITMAP1.BMP 1KB
狩猎谋生.ico 3KB
TEST.DSW 541B
StdAfx.cpp 210B
狩猎谋生.dsp 5KB
SETMAP.CPP 2KB
SETMAP.H 1KB
狩猎谋生.clw 1KB
狩猎谋生Dlg.cpp 10KB
狩猎谋生.cpp 2KB
StdAfx.h 1KB
狩猎谋生Dlg.h 2KB
狩猎谋生.h 1KB
狩猎谋生.rc 6KB
RESOURCE.H 1KB
共 21 条
- 1
资源评论
mickgrant
- 粉丝: 2
- 资源: 48
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功