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

上传人:油条 文档编号:117008366 上传时间:2019-11-18 格式:DOC 页数:76 大小:417KB
返回 下载 相关 举报
暑假实习MFC实现迷宫自寻路径_第1页
第1页 / 共76页
暑假实习MFC实现迷宫自寻路径_第2页
第2页 / 共76页
暑假实习MFC实现迷宫自寻路径_第3页
第3页 / 共76页
暑假实习MFC实现迷宫自寻路径_第4页
第4页 / 共76页
暑假实习MFC实现迷宫自寻路径_第5页
第5页 / 共76页
点击查看更多>>
资源描述

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

1、<p> 数据结构与VC编程实习实习报告 学生姓名:说道 专业班级: 指导教师: 2012年7月7&#160;日实习题目迷宫一、任务描述及要求任意确定一个迷宫的规模和形态,用非递归的方法走出迷宫,并输出至少一条通路的路径。基本要求:(75分)迷宫的存储结构由学生自行选择。合理设计窗口界面,首先创建一个迷宫,迷宫的元素可以预先设计好,也可以通过界面建立或修改,建立后的迷宫在窗口界面上显示出来;通过单击“开始”按钮,显示从入口到出口的行进路线,迷宫的显示尽量美观逼真。功能菜单或按钮自行设计,以合理为目的。扩展要求:(20分)动态显示在迷宫中的行进、回溯路线。二、概要设计1抽象数据

2、类型链式栈。自动演示模块编辑模块设置模块2整个程序包含功能模块及模块间的调用关系自动演示线程回调初始化模块三、详细设计1虚拟实现即数据结构的C+语言描述template&lt;class T&gt;/栈节点定义struct stackNodeT data;stackNode&lt;T&gt; *link;stackNode(stackNode&lt;T&gt; *ptr = NULL)link = ptr;/仅初始化指针成员的初始函数.stackNode(const T&amp; d,stackNode&lt;T&gt;

3、*ptr=NULL)data=d;link=ptr; /初始化数据与指针成员的构造函数.stackNode();template&lt;class T&gt;/栈类定义class stack private: stackNode&lt;T&gt; *top;/栈顶元素public:stack():top(NULL);void makeempty();/置栈空virtual stack()stack&lt;T&gt;:makeempty();/析构函数void push(T &amp;x);/入栈bool pop(T &amp;x)

4、;/出栈int getSize()const;/获得栈元素个数bool gettop(T &amp;x) const;/获得栈顶元素bool Isempty() const return top=NULL?true:false;/判栈空;2抽象数据类型中定义的操作算法实现用伪代码描述(见源代码)3函数之间的调用关系工程名为:MistyRainMaze(烟雨迷宫)。OnAutoPlay()OnSetting()CMistyRainMazeView()AutoPlayProc()InitGame()链式栈的封装操作DrawBlock()四、调试分析1程序在调试过程中出现的问题及解决方法由于

5、之前准备充分,程序编写过程中没有遇到多少问题,很快就解决了。CSDN、pudn及百度文库是解决问题的快捷通道,Visual Assist X是避免不必要错误产生的根本之道。2算法的时间复杂度分析O(m*n),可以考虑用A*或B*算法进行改进。五、测试结果根据一组提供的测试数据得到什么样的结果六、心得体会七、实现工程首先新建一个基于单文档的工程MistyRainMaze,在第四步中注意View类的基类选择CScrollView,然后在MistyRainMazeView.h的CMistyRainMazeView类前面加入宏定义及线程回调声明。#include &quot;stack.h&a

6、mp;quot;#if _MSC_VER &gt; 1000#pragma once#endif / _MSC_VER &gt; 1000struct AutoPlayPARAMint *m_nMaze;/迷宫数组UINT m_nMazeRowSize;/迷宫行规模UINT m_nMazeColSize;/迷宫列规模int m_nRowStart;/起点位置int m_nColStart;/int m_nRowEnd;/终点位置int m_nColEnd;/CPoint m_ptStart;/图像左上角坐标int m_ntimedelay;/演示延迟时间CDC *pDC;UIN

7、T m_nRowSpace;/迷宫行距UINT m_nColSpace;/迷宫列距;typedef enum tagCurrorStateCURROR_STAND,/标准光标CURROR_BLOCK,/画墙时的光标CURROR_START,/画起点光标CURROR_END,/画终点光标CURROR_EREASE/擦出光标CurrorState;/ /数组中0代表通路1代表墙2代表起点3代表终点/ typedef enum tagPositionState/ / BACKGROUND,BLOCK,START,END/ PositionState;/ typedef struct tagitems

8、int row;int col;int dir;items;/定义位置偏移typedef struct tagoffsetint row;int col;offset;/偏移数组static DWORD WINAPI AutoPlayProc( LPVOID lpParameter / thread data);/ 自动演示线程回调函数添加图像资源及光标资源,标好ID号。为CMistyRainMazeView类添加成员变量及函数private:int *m_nMaze;/迷宫数组UINT m_nMazeRowSize;/迷宫行规模UINT m_nMazeColSize;/迷宫列规模UINT m

9、_nRowSpace;/迷宫行距UINT m_nColSpace;/迷宫列距CPoint m_ptStart;/图像左上角坐标BOOL m_bStop;/初始停止标志为FALSECBitmap m_bitmap4;/加载图像HCURSOR m_hcursor5;/加载光标int m_ntimedelay;/演示延迟时间CurrorState m_currorstate;/光标状态指示int m_nRowStart;/起点位置int m_nColStart;/int m_nRowEnd;/终点位置int m_nColEnd;/HANDLE m_hThreadAuotPlay;void DrawB

10、lock(int x,int y,CDC* pDC,int nState=1);/ Operationspublic:void InitGame();/初始化迷宫,每次重新设置需调用CMistyRainMazeView:CMistyRainMazeView()/ TODO: add construction code herem_nRowSpace=16;/初始化行距16m_nColSpace=16;/m_nMazeRowSize=20;/初始化迷宫20&#215;20m_nMazeColSize=20;/m_ptStart.x=0;/左上角暂定0,0,以后会调整m_ptStart.y

11、=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_bitmap0.LoadBitmap(IDB_BLOCK);/墙的图像m_bitmap1.LoadBitmap(IDB_START);/起点的图像m_bitmap2.LoadBitmap(IDB_BACKGROUND);/背景图像m_bitmap3.LoadBitmap(ID

12、B_END);/终点图像/从资源加载图像及光标m_hcursor0=(HCURSOR)LoadImage(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_STANDARD),IMAGE_CURSOR,15, 15, LR_DEFAULTSIZE);m_hcursor1=(HCURSOR)LoadImage(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_BLOCK),IMAGE_CURSOR,15, 15, LR_DEFAULTSIZE);m_hcursor2=(HCURSOR)LoadImage(AfxGetReso

13、urceHandle(),MAKEINTRESOURCE(IDC_START),IMAGE_CURSOR,15, 15, LR_DEFAULTSIZE);m_hcursor3=(HCURSOR)LoadImage(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_END),IMAGE_CURSOR,15, 15, LR_DEFAULTSIZE);m_hcursor4=(HCURSOR)LoadImage(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_EREASE),IMAGE_CURSOR,15, 15, LR_DEF

14、AULTSIZE);m_bStop=FALSE;srand( (unsigned)time( NULL ) );InitGame();CMistyRainMazeView:CMistyRainMazeView()if(m_nMaze!=NULL)for(int i=0;i&lt;m_nMazeRowSize;i+)delete m_nMazei;/释放内存空间if(m_hThreadAuotPlay) CloseHandle(m_hThreadAuotPlay);/实现InitGame(),每次初始化迷宫用void CMistyRainMazeView:InitGame()m_nMaze=new int*m_nMazeRowSize;/分配空间for(int i=0;i&lt;m_nMazeRowSize;i+)m_nMazei=new intm_nMazeColSize;for(</p>

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号