暑假实习MFC实现迷宫自寻路径.docx

上传人:b****3 文档编号:5489568 上传时间:2023-05-08 格式:DOCX 页数:49 大小:274.41KB
下载 相关 举报
暑假实习MFC实现迷宫自寻路径.docx_第1页
第1页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第2页
第2页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第3页
第3页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第4页
第4页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第5页
第5页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第6页
第6页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第7页
第7页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第8页
第8页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第9页
第9页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第10页
第10页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第11页
第11页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第12页
第12页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第13页
第13页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第14页
第14页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第15页
第15页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第16页
第16页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第17页
第17页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第18页
第18页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第19页
第19页 / 共49页
暑假实习MFC实现迷宫自寻路径.docx_第20页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

暑假实习MFC实现迷宫自寻路径.docx

《暑假实习MFC实现迷宫自寻路径.docx》由会员分享,可在线阅读,更多相关《暑假实习MFC实现迷宫自寻路径.docx(49页珍藏版)》请在冰点文库上搜索。

暑假实习MFC实现迷宫自寻路径.docx

暑假实习MFC实现迷宫自寻路径

数据结构与VC编程实习

实习报告

学生姓名:

说道

专业班级:

指导教师:

2012年7月7 日

实习题目

迷宫

一、任务描述及要求

任意确定一个迷宫的规模和形态,用非递归的方法走出迷宫,并输出至少一条通路的路径。

基本要求:

(75分)

迷宫的存储结构由学生自行选择。

合理设计窗口界面,首先创建一个迷宫,迷宫的元素可以预先设计好,也可以通过界面建立或修改,建立后的迷宫在窗口界面上显示出来;通过单击“开始”按钮,显示从入口到出口的行进路线,迷宫的显示尽量美观逼真。

功能菜单或按钮自行设计,以合理为目的。

扩展要求:

(20分)

动态显示在迷宫中的行进、回溯路线。

二、概要设计

1.抽象数据类型

链式栈。

2.整个程序包含功能模块及模块间的调用关系

三、详细设计

1.虚拟实现

即数据结构的C++语言描述

template//栈节点定义

structstackNode

{

Tdata;

stackNode*link;

stackNode(stackNode*ptr=NULL){link=ptr;}//仅初始化指针成员的初始函数.

stackNode(constT&d,stackNode*ptr=NULL){data=d;link=ptr;};//初始化数据与指针成员的构造函数.

~stackNode(){};

};

template//栈类定义

classstack

{

private:

stackNode*top;//栈顶元素

public:

stack():

top(NULL){};

voidmakeempty();//置栈空

virtual~stack(){stack:

:

makeempty();};//析构函数

voidpush(T&x);//入栈

boolpop(T&x);//出栈

intgetSize()const;//获得栈元素个数

boolgettop(T&x)const;//获得栈顶元素

boolIsempty()const{returntop==NULL?

true:

false;}//判栈空

};

2.抽象数据类型中定义的操作算法实现

用伪代码描述(见源代码)

3.函数之间的调用关系

工程名为:

MistyRainMaze(烟雨迷宫)。

四、调试分析

1.程序在调试过程中出现的问题及解决方法

由于之前准备充分,程序编写过程中没有遇到多少问题,很快就解决了。

CSDN、pudn及XX文库是解决问题的快捷通道,VisualAssistX是避免不必要错误产生的根本之道。

2.算法的时间复杂度分析

O(m*n),可以考虑用A*或B*算法进行改进。

五、测试结果

根据一组提供的测试数据得到什么样的结果

六、心得体会

七、实现工程

首先新建一个基于单文档的工程MistyRainMaze,在第四步中注意View类的基类选择CScrollView,然后在MistyRainMazeView.h的CMistyRainMazeView类前面加入宏定义及线程回调声明。

#include"stack.h"

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

structAutoPlayPARAM

{

int**m_nMaze;//迷宫数组

UINTm_nMazeRowSize;//迷宫行规模

UINTm_nMazeColSize;//迷宫列规模

intm_nRowStart;//起点位置

intm_nColStart;//

intm_nRowEnd;//终点位置

intm_nColEnd;//

CPointm_ptStart;//图像左上角坐标

intm_ntimedelay;//演示延迟时间

CDC*pDC;

UINTm_nRowSpace;//迷宫行距

UINTm_nColSpace;//迷宫列距

};

typedefenumtagCurrorState

{

CURROR_STAND,//标准光标

CURROR_BLOCK,//画墙时的光标

CURROR_START,//画起点光标

CURROR_END,//画终点光标

CURROR_EREASE//擦出光标

}CurrorState;

////数组中0代表通路1代表墙2代表起点3代表终点

//typedefenumtagPositionState

//{

//BACKGROUND,BLOCK,START,END

//}PositionState;

//

typedefstructtagitems

{

introw;

intcol;

intdir;

}items;//定义位置偏移

typedefstructtagoffset

{

introw;

intcol;

}offset;//偏移数组

staticDWORDWINAPIAutoPlayProc(

LPVOIDlpParameter//threaddata

);//自动演示线程回调函数

添加图像资源及光标资源,标好ID号。

为CMistyRainMazeView类添加成员变量及函数

private:

int**m_nMaze;//迷宫数组

UINTm_nMazeRowSize;//迷宫行规模

UINTm_nMazeColSize;//迷宫列规模

UINTm_nRowSpace;//迷宫行距

UINTm_nColSpace;//迷宫列距

CPointm_ptStart;//图像左上角坐标

BOOLm_bStop;//初始停止标志为FALSE

CBitmapm_bitmap[4];//加载图像

HCURSORm_hcursor[5];//加载光标

intm_ntimedelay;//演示延迟时间

CurrorStatem_currorstate;//光标状态指示

intm_nRowStart;//起点位置

intm_nColStart;//

intm_nRowEnd;//终点位置

intm_nColEnd;//

HANDLEm_hThreadAuotPlay;

voidDrawBlock(intx,inty,CDC*pDC,intnState=1);

//Operations

public:

voidInitGame();//初始化迷宫,每次重新设置需调用

 

CMistyRainMazeView:

:

CMistyRainMazeView()

{

//TODO:

addconstructioncodehere

m_nRowSpace=16;//初始化行距16

m_nColSpace=16;//

m_nMazeRowSize=20;//初始化迷宫20×20

m_nMazeColSize=20;//

m_ptStart.x=0;//左上角暂定0,0,以后会调整

m_ptStart.y=0;//

m_ntimedelay=50;//初始化延迟100毫秒

m_nRowStart=1;////初始化起点和终点

m_nColStart=1;//

m_nRowEnd=m_nMazeRowSize-2;//

m_nColEnd=m_nMazeColSize-2;//

m_currorstate=CURROR_STAND;//初始化标准光标

m_bitmap[0].LoadBitmap(IDB_BLOCK);//墙的图像

m_bitmap[1].LoadBitmap(IDB_START);//起点的图像

m_bitmap[2].LoadBitmap(IDB_BACKGROUND);//背景图像

m_bitmap[3].LoadBitmap(IDB_END);//终点图像

//从资源加载图像及光标

m_hcursor[0]=(HCURSOR)LoadImage(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDC_STANDARD),

IMAGE_CURSOR,

15,15,LR_DEFAULTSIZE);

m_hcursor[1]=(HCURSOR)LoadImage(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDC_BLOCK),

IMAGE_CURSOR,

15,15,LR_DEFAULTSIZE);

m_hcursor[2]=(HCURSOR)LoadImage(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDC_START),

IMAGE_CURSOR,

15,15,LR_DEFAULTSIZE);

m_hcursor[3]=(HCURSOR)LoadImage(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDC_END),

IMAGE_CURSOR,

15,15,LR_DEFAULTSIZE);

m_hcursor[4]=(HCURSOR)LoadImage(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDC_EREASE),

IMAGE_CURSOR,

15,15,LR_DEFAULTSIZE);

m_bStop=FALSE;

srand((unsigned)time(NULL));

InitGame();

}

CMistyRainMazeView:

:

~CMistyRainMazeView()

{

if(m_nMaze!

=NULL)

for(inti=0;i

delete[]m_nMaze[i];//释放内存空间

if(m_hThreadAuotPlay)

CloseHandle(m_hThreadAuotPlay);

}

//实现InitGame(),每次初始化迷宫用

voidCMistyRainMazeView:

:

InitGame()

{

m_nMaze=newint*[m_nMazeRowSize];//分配空间

for(inti=0;i

m_nMaze[i]=newint[m_nMazeColSize];

for(i=0;i

for(intj=0;j

m_nMaze[i][j]=1;

for(i=0;i

for(intj=0;j

{

if(i==0||j==0||i==m_nMazeRowSize-1||j==m_nMazeColSize-1)

m_nMaze[i][j]=1;

else

{

m_nMaze[i][j]=rand()%3+4;

if(m_nMaze[i][j]==4)

m_nMaze[i][j]=1;

else

m_nMaze[i][j]=0;

}

}

m_nMaze[m_nRowStart][m_nColStart]=2;//设置起始位置

m_nMaze[m_nRowEnd][m_nColEnd]=3;//设置终点位置

}

//重载CMistyRainMazeView的OnSetCursor函数,实现编译时光标指示。

BOOLCMistyRainMazeView:

:

OnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

if(nHitTest==HTCLIENT)

{

switch(m_currorstate)

{

//caseCURROR_STAND:

//SetCursor(m_hcursor[0]);

//return1;

//break;

caseCURROR_BLOCK:

SetCursor(m_hcursor[1]);

return1;

break;

caseCURROR_START:

SetCursor(m_hcursor[2]);

return1;

break;

caseCURROR_END:

SetCursor(m_hcursor[3]);

return1;

break;

caseCURROR_EREASE:

SetCursor(m_hcursor[4]);

return1;

break;

default:

returnCScrollView:

:

OnSetCursor(pWnd,nHitTest,message);

}

}

returnCScrollView:

:

OnSetCursor(pWnd,nHitTest,message);

}

教师评语

评语:

 

指导教师(签名):

下面给出关键文件代码

//MistyRainMazeView.cpp:

implementationoftheCMistyRainMazeViewclass

//

#include"stdafx.h"

#include"MistyRainMaze.h"

#include

#include"SettingDlg.h"

#include"MistyRainMazeDoc.h"

#include"MistyRainMazeView.h"

#include"MainFrm.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//CMistyRainMazeView

IMPLEMENT_DYNCREATE(CMistyRainMazeView,CScrollView)

BEGIN_MESSAGE_MAP(CMistyRainMazeView,CScrollView)

//{{AFX_MSG_MAP(CMistyRainMazeView)

ON_WM_MOUSEMOVE()

ON_COMMAND(IDM_AUTO_PLAY,OnAutoPlay)

ON_WM_LBUTTONDOWN()

ON_WM_SETCURSOR()

ON_COMMAND(IDM_EDIT_START,OnEditStart)

ON_COMMAND(IDM_EDIT_END,OnEditEnd)

ON_COMMAND(IDM_EDIT_BLOCK,OnEditBlock)

ON_COMMAND(IDM_EREASE,OnErease)

ON_COMMAND(IDM_EDIT_EXIT,OnEditExit)

ON_COMMAND(IDM_RANDOM_GENERATE,OnRandomGenerate)

ON_COMMAND(IDM_SETTING,OnSetting)

ON_WM_RBUTTONDOWN()

ON_COMMAND(IDM_ONLINE_HELP,OnOnlineHelp)

ON_WM_LBUTTONUP()

ON_WM_KEYDOWN()

//}}AFX_MSG_MAP

//Standardprintingcommands

ON_COMMAND(ID_FILE_PRINT,CScrollView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT,CScrollView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW,CScrollView:

:

OnFilePrintPreview)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CMistyRainMazeViewconstruction/destruction

CMistyRainMazeView:

:

CMistyRainMazeView()

{

//TODO:

addconstructioncodehere

m_bLeftButtonDown=FALSE;

m_bStop=FALSE;

m_nRowSpace=18;//初始化行距16

m_nColSpace=18;//

m_nMazeRowSize=20;//初始化迷宫20×20

m_nMazeColSize=20;//

m_ptStart.x=0;//左上角暂定0,0,以后会调整

m_ptStart.y=0;//

m_ntimedelay=100;//初始化延迟100毫秒

m_nRowStart=1;////初始化起点和终点

m_nColStart=1;//

m_nRowEnd=m_nMazeRowSize-2;//

m_nColEnd=m_nMazeColSize-2;//

m_currorstate=CURROR_STAND;//初始化标准光标

//从资源加载图像光标

m_hcursor[0]=(HCURSOR)LoadImage(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDC_STANDARD),

IMAGE_CURSOR,

15,15,LR_DEFAULTSIZE);

m_hcursor[1]=(HCURSOR)LoadImage(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDC_BLOCK),

IMAGE_CURSOR,

15,15,LR_DEFAULTSIZE);

m_hcursor[2]=(HCURSOR)LoadImage(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDC_START),

IMAGE_CURSOR,

15,15,LR_DEFAULTSIZE);

m_hcursor[3]=(HCURSOR)LoadImage(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDC_END),

IMAGE_CURSOR,

15,15,LR_DEFAULTSIZE);

m_hcursor[4]=(HCURSOR)LoadImage(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDC_EREASE),

IMAGE_CURSOR,

15,15,LR_DEFAULTSIZE);

m_bStop=FALSE;//初始化停止为false

srand((unsigned)time(NULL));//设置时间种子,用于随机参数

InitGame();//初始化迷宫

}

CMistyRainMazeView:

:

~CMistyRainMazeView()

{

if(m_nMaze!

=NULL)

for(inti=0;i

delete[]m_nMaze[i];//释放内存空间

if(m_hThreadAuotPlay)

CloseHandle(m_hThreadAuotPlay);

}

BOOLCMistyRainMazeView:

:

PreCreateWindow(CREATESTRUCT&cs)

{

//TODO:

ModifytheWindowclassorstylesherebymodifying

//theCREATESTRUCTcs

returnCScrollView:

:

PreCreateWindow(cs);

}

/////////////////////////////////////////////////////////////////////////////

//CMistyRainMazeViewdrawing

//烟雨迷宫1.0版

//开发历程:

2011年6月4日,创建工程,实现获取屏幕坐标位置,后来发现其实没大用,后来忙于考试、实习

//2011年7月9日规划工程,实现加载图像、迷宫编辑功能

//2011年7月10日实现随机生成,栈计算通行结果正确

//2011年7月11日实现自动演示(只加了4句代码!

//2011年7月11日验收通过,转向3D智能导航员项目开发

//2011年7月14日实现多线程演示功能

//2011年7月16日润色注释,更便于阅读

//2011年7月19加入支持键盘走迷宫,支持实现自动与手动的完美结合

//

//代码规范,简洁易懂,注释完整、清晰,是符合面向思维规范不可多得的佳作

//

//烟雨集团水惊云科技

//作者:

迷若烟雨(面向思维创始人)

//2011年7月16日

//

//特别鸣谢:

//孙鑫《VC++深入详解》

//候捷《深入浅出MFC》

//殷人昆《数据结构》

//CSDN、pudn及XX文库无私奉献的开源爱好者

//

//////////////////////////////////////////////////////////////////////////

voidCMistyRainMazeView:

:

OnDraw(CDC*pDC)

{

CMistyRai

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2