【vc++精品源码栏目提醒】:以下是网学会员为您推荐的vc++精品源码-暑假实习MFC实现迷宫自寻路径 - 编程语言,希望本篇文章对您学习有所帮助。
数据结构与 VC 编程实习 实习报告 学生姓名:说道 专业班级: 指导教师: 2012 年 7 月 7 日 实习题目 迷宫一、任务描述及要求 任意确定一个迷宫的规模和形态,用非递归的方法走出迷宫,并输出至少一条通路的路径。
(75 分)基本要求: 迷宫的存储结构由学生自行选择。
合理设计窗口界面,首先创建一个迷宫,迷宫的元素可以预先设计好,也可以通过界面建立或修改,建立后的迷宫在窗口界面上显示出来;通过单击“开始”按钮,显示从入口到出口的行进路线,迷宫的显示尽量美观逼真。
功能菜单或按钮自行设计,以合理为目的。
(20 分)扩展要求: 动态显示在迷宫中的行进、回溯路线。
二、概要设计1.抽象数据类型链式栈。
2.整个程序包含功能模块及模块间的调用关系 设置模块 编辑模块 自动演示模块 初始化模块 自动演示线程回调三、详细设计1.虚拟实现 即数据结构的 C语言描述 template // 栈节点定义struct stackNode T data stackNode link stackNodestackNode ptr NULLlink ptr //仅初始化指针成员的初始函数. stackNodeconst T dstackNodeptrNULLdatadlinkptr //初始化数据与指针成员的构造函数. stackNodetemplate //栈类定义class stackprivate: stackNode top // 栈顶元素public: stack:topNULL void makeempty // 置 栈空 virtual stackstack::makeempty //析构函数 void pushT x //入栈 bool popT x // 出栈 int getSizeconst // 获得栈元素个数 bool gettopT x const // 获得栈顶元素 bool Isempty const return topNULLtrue:false //判栈空2.抽象数据类型中定义的操作算法实现 用伪代码描述(见源代码)3.函数之间的调用关系 。
工程名为:MistyRainMaze(烟雨迷宫)CMistyRainMazeView OnSetting OnAutoPlay AutoPlayProc InitGame DrawBlock 链式栈的封装操作四、调试分析1.程序在调试过程中出现的问题及解决方法 由于之前准备充分,程序编写过程中没有遇到多少问题,很快就解决了。
CSDN、pudn 及百度文库是解决问题的快捷通道,Visual Assist X 是避免不必要错误产生的根本之道。
2.算法的时间复杂度分析 Omn可以考虑用 A或 B算法进行改进。
五、测试结果 根据一组提供的测试数据得到什么样的结果六、心得体会七、实现工程 首先新建一个基于单文档的工程 MistyRainMaze,在第四步中注意 View 类的基类选择 CScrollView,然后在MistyRainMazeView.h 的 CMistyRainMazeView 类前面加入宏定义及线程回调声明。
include stack.hif _MSC_VER 1000pragma onceendif // _MSC_VER 1000struct AutoPlayPARAM int 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 UINT m_nRowSpace//迷宫行距 UINT m_nColSpace//迷宫列距typedef enum tagCurrorState CURROR_STAND//标准光标 CURROR_BLOCK//画墙时的光标 CURROR_START//画起点光标 CURROR_END//画终点光标 CURROR_EREASE//擦出光标CurrorState// //数组中 0 代表通路 1 代表墙 2 代表起点 3 代表终点// typedef enum tagPositionState// // BACKGROUNDBLOCKSTARTEND// PositionState//typedef struct tagitems int row int col int diritems//定义位置偏移typedef struct tagoffset int row int coloffset//偏移数组static DWORD WINAPI AutoPlayProc LPVOID lpParameter // thread data // 自动演示线程回调函数添加图像资源及光标资源标好 ID 号。
为 CMistyRainMazeView 类添加成员变量及函数private: int m_nMaze//迷宫数组 UINT m_nMazeRowSize//迷宫行规模 UINT m_nMazeColSize//迷宫列规模 UINT m_nRowSpace//迷宫行距 UINT m_nColSpace//迷宫列距 CPoint m_ptStart//图像左上角坐标 BOOL m_bStop//初始停止标志为 FALSE CBitmap 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_hThreadAuotPlayvoid DrawBlockint xint yCDC pDCint nState1 // Operationspublic: void InitGame//初始化迷宫,每次重新设置需调用CMistyRainMazeView::CMistyRainMazeView // TODO: add construction code here m_nRowSpace16//初始化行距 16 m_nColSpace16// m_nMazeRowSize20//初始化迷宫 20×20 m_nMazeColSize20// m_ptStart.x0//左上角暂定 0,0,以后会调整 m_ptStart.y0// m_ntimedelay50//初始化延迟 100 毫秒 m_nRowStart1////初始化起点和终点 m_nColStart1// m_nRowEndm_nMazeRowSize-2// m_nColEndm_nMazeColSize-2// m_currorstateCURROR_STAND//初始化标准光标 m_bitmap0.LoadBitmapIDB_BLOCK//墙的图像m_bitmap1.LoadBitmapIDB_START//起点的图像m_bitmap2.LoadBitmapIDB_BACKGROUND//背景图像m_bitmap3.LoadBitmapIDB_END//终点图像//从资源加载图像及光标m_hcursor0HCURSORLoadImageAfxGetResourceHandle MAKEINTRESOURCEIDC_STANDARD IMAGE_CURSOR 15 15 LR_DEFAULTSIZEm_hcursor1HCURSORLoadImageAfxGetResourceHandle MAKEINTRESOURCEIDC_BLOCK IMAGE_CURSOR 15 15 LR_DEFAULTSIZEm_hcursor2HCURSORLoadImageAfxGetResourceHandle MAKEINTRESOURCEIDC_START IMAGE_CURSOR 15 15 LR_DEFAULTSIZEm_hcursor3HCURSORLoadImageAfxGetResourceHandle MAKEINTRESOURCEIDC_END IMAGE_CURSOR 15 15 LR_DEFAULTSIZE m_hcursor4HCURSORLoadImageAfxGetResourceHandle MAKEINTRESOURCEIDC_EREASE IMAGE_CURSOR 15 15 LR_DEFAULTSIZE m_bStopFALSE srand unsignedtime NULL InitGameCMistyRainMazeView::CMistyRainMazeView ifm_nMazeNULL forint i0i
上一篇:
基于 T264 的编码器在 DM642PCI平台上的实现
下一篇:
SPR联接疲劳失效的研究