高级语言课程设计——迷宫实验报告_第1页
高级语言课程设计——迷宫实验报告_第2页
高级语言课程设计——迷宫实验报告_第3页
高级语言课程设计——迷宫实验报告_第4页
高级语言课程设计——迷宫实验报告_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.山东中医药大学理工学院课 程 设 计 报 告课程名称: 高级语言课程设计 课程代码: 07300561 设计内容: 迷宫 二0一二 年 12 月 15 日;29目 录1.系统简介32.设计分析32.1需要分析32.2功能设计组织图32.3 界面介绍33.详细内部实现介绍33.1类.h33.2成员函数33.2 主函数.cpp34.按钮和图标功能实现过程35.系统总结35.1系统缺点 3 5.2系统有点3一系统简介 软件类型:应用软件运行平台:MFC界面设计目的:通过课程设计,巩固所学理论知识,培养综合运用所学知识解决实际问题的能力。能根据实际问题的具体情况结合数据结构课程中的基本理论和基本方法

2、,正确分析出数据的逻辑结构,合理选择相应的存储结构,并能设计出解决实际问题的有效算法。系统特色:具有高度的容错机制,不会因小的失误造成死循环。可以对程序运行时进行开始与暂停的控制。错误报警机制可以提醒用户进行正确的操作。界面友好简洁游戏者可以快速进入游戏状态。 二 .设计分析一需要分析 1.本程序中,在迷宫中求出从入口到出口的路径。一个简单的求解方法是:从入口出发,沿某一方向进行探索,若能走通,则继续向前走;若不能走通则返回再继续查找路径,直到走完整个过程为止。2.计算机解迷宫时,算法中应用“栈”的思想。3.程序执行的命令包括:(1).构造迷宫数组。可以将迷宫定义成一个二维数组,其中元素值为1

3、表示有障碍物,元素值为0表示没有障碍。为了表示四周的围墙,二维数组四周的数组元素均为1,如图所示,其中双边矩形表示迷宫,前进的方向有4个,分别是上、下、左、右。入口(1,1)0 1 2 3 4 5 6 7 8 911111111111001101111000111101000001011101111000011001100110111111111111111111111(2).构造路径4. 测试数据迷宫的测试数据如下:左上角(1,1)为入口,右下角(18,18)为出口。void CreateMaze() /创建迷宫 int cmaze2020=1,1,1,1,1,1,1,1,1,1,1,1,1

4、,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1

5、,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

6、,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,; memcpy(maze,cmaze,sizeof(maze); maze1 1=0;/入口 mazeMAX_X-2MAX_Y-2=0; /出口 maze01=NOW; mazeMAX_X-1MAX_Y-2=0; 二功能设计组织图 入栈操作的实现开

7、始: 创建结点Struct node判断结点建指针是否为NULL是 否进行结点指针与头指针head交换,具体操作如下:new_node->next=head; head=new_node; 进行复制操作,然后置结点地址域为NULL,操作如下:new_node->x=a; new_node->y=b; new_node->direction=d; new_node->next=NULL;入栈成功结束三界面介绍本程序采用了可视化的界面编程,以便将界面设计的更加友好,但是能力有限,只实现了简单功能较少的界面。 在迷宫游戏中,涉及到路径搜寻时必须设定物体的一些走出迷宫的法

8、则,必须确定物体可以搜索迷宫中的每一块儿区域来找出路口,若走出迷宫的法则设计部完整,那么物体就可能在同一地方兜圈子,永远找不到路口。 此外,为了让物体走出迷宫后能正确知道走出迷宫的路径必须给物体一张地图记录所走的路径,这张图就是栈结构。 界面截图 三 .详细内部实现介绍 一 类.h主要使用的类有:1、CMainFrame类主要用于主框架的构造。2、CMaze_DFSDoc类用于声明主函数中所要调用的函数。3、CMaze_DFSView类用于迷宫图的绘制。4、DMaze类迷宫图的创建和压栈的思想记录结点坐标。二 成员函数1、 框架构造函数:PreCreateWindow()和PreCreateW

9、indow()通过像素的值来确定框架的长高,调用函数GetSystemMetrics()。函数实现:BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)if( !CFrameWnd:PreCreateWindow(cs) )return FALSE;int GAME_WIDTH=450;int GAME_HEIGHT=470;cs.x= (:GetSystemMetrics(SM_CXSCREEN) - GAME_WIDTH)/2;cs.y= (:GetSystemMetrics(SM_CYSCREEN) - GAME_HEIGHT- :G

10、etSystemMetrics(SM_CYCAPTION)/2;cs.cx = GAME_WIDTH;cs.cy = GAME_HEIGHT+:GetSystemMetrics(SM_CYCAPTION)+:GetSystemMetrics(SM_CYMENU);cs.style &= (WS_CAPTION|WS_MINIMIZEBOX);/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn TRUE;int CMainFrame:OnCreate(LPCREATE

11、STRUCT lpCreateStruct)if (CFrameWnd:OnCreate(lpCreateStruct) = -1)return -1;if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)TRACE0("Failed to create toolbarn&

12、quot;);return -1; / fail to createif (!m_wndStatusBar.Create(this) |!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)TRACE0("Failed to create status barn");return -1; / fail to create/ TODO: Delete these three lines if you don't want the toolbar to/ be dockablem

13、_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);return 0;2、入栈出栈从操作函数的实现:(1)、入栈操作:void push(int a,int b,char d) node* new_node; new_node=new node; if(new_node!=NULL) new_node->x=a; new_node->y=b; new_node->direction=d; new_node->ne

14、xt=NULL; if(head=NULL) head=new_node; else new_node->next=head; head=new_node; (2)、出栈操作 node* pop(int& a,int& b)/出栈时带回栈顶元素坐标 if(head!=NULL) node* p=head; head=head->next; a=p->x; b=p->y; delete p; return head; 3、 迷宫创建函数CreateMaze():void CreateMaze()/创建迷宫 int cmaze2020=1,1,1,1,1,1

15、,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1

16、,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1

17、,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,; memcpy(maze,cmaze,sizeof(maze); maze1 1=0;/入口 mazeMAX_X-2MAX_Y-2=0;/出口 maze01=NOW; mazeMAX_X-1MAX_Y-2=0; ;三 主

18、函数.cpp主函数的功能实现:#include "stdafx.h"#include "Maze_DFS.h"#include "Maze_DFSDoc.h"#include "Maze_DFSView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifIMPLEMENT_DYNCREATE(CMaze_DFSView, CView)BEGIN_MESSAGE_MAP(CMaze_DFSV

19、iew, CView)ON_WM_TIMER()ON_WM_DESTROY()ON_COMMAND(IDM_START, OnStart)ON_COMMAND(IDM_PAUSE, OnPause)ON_COMMAND(ID_MAKER, OnMaker)ON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()C

20、Maze_DFSView:CMaze_DFSView()/ TODO: add construction code hereCMaze_DFSView:CMaze_DFSView()BOOL CMaze_DFSView:PreCreateWindow(CREATESTRUCT& cs)return CView:PreCreateWindow(cs);int x=1,y=1,tag=0;void CMaze_DFSView:OnDraw(CDC* pDC)CMaze_DFSDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CDC memDC;mem

21、DC.CreateCompatibleDC(NULL);for(int i=0;i<MAX_X;i+)for(int j=0;j<MAX_Y;j+)if(pDoc->dmaze.mazeij=STONE)/墙壁CBrush newBrush(RGB(200,100,200);pDC->SelectObject(newBrush);pDC->Rectangle(j*20,i*20,j*20+20,i*20+20);if(pDoc->dmaze.mazeij=NOWAY)/无路可走memDC.SelectObject(pDoc->noway_Bmp);pD

22、C->BitBlt(j*20, i*20, pDoc->noway_nWidth, pDoc->noway_nHeight, &memDC,0, 0, SRCCOPY);if(pDoc->dmaze.mazeij=DOWN)/下memDC.SelectObject(pDoc->down_Bmp);pDC->BitBlt(j*20, i*20, pDoc->down_nWidth, pDoc->down_nHeight, &memDC,0, 0, SRCCOPY);if(pDoc->dmaze.mazeij=RIGHT)/右m

23、emDC.SelectObject(pDoc->right_Bmp);pDC->BitBlt(j*20, i*20, pDoc->right_nWidth, pDoc->right_nHeight, &memDC,0, 0, SRCCOPY);if(pDoc->dmaze.mazeij=LEFT)/左memDC.SelectObject(pDoc->left_Bmp);pDC->BitBlt(j*20, i*20, pDoc->left_nWidth, pDoc->left_nHeight, &memDC,0, 0, SRC

24、COPY);if(pDoc->dmaze.mazeij=UP)/上memDC.SelectObject(pDoc->up_Bmp);pDC->BitBlt(j*20, i*20, pDoc->up_nWidth, pDoc->up_nHeight, &memDC,0, 0, SRCCOPY);if(pDoc->dmaze.mazeij=NOW)/现在位置memDC.SelectObject(pDoc->now_Bmp);pDC->BitBlt(j*20,i*20,pDoc->now_nWidth,pDoc->now_nHeig

25、ht,&memDC,0,0,SRCCOPY);SetTimer(1,200,NULL);BOOL CMaze_DFSView:OnPreparePrinting(CPrintInfo* pInfo)return DoPreparePrinting(pInfo);void CMaze_DFSView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CMaze_DFSView:OnEndPrinting(CDC* /*pDC*/,

26、 CPrintInfo* /*pInfo*/)#ifdef _DEBUGvoid CMaze_DFSView:AssertValid() constCView:AssertValid();void CMaze_DFSView:Dump(CDumpContext& dc) constCView:Dump(dc);CMaze_DFSDoc* CMaze_DFSView:GetDocument() / non-debug version is inlineASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMaze_DFSDoc);return (C

27、Maze_DFSDoc*)m_pDocument;#endif /_DEBUGvoid CMaze_DFSView:OnTimer(UINT nIDEvent) CMaze_DFSDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(nIDEvent=1&&tag=0)pDoc->dmaze.mazexy=NOWAY;if(pDoc->dmaze.mazex+1y=NOTHING)pDoc->dmaze.push(x,y,'D');pDoc->dmaze.mazexy=DOWN;x=x+1;pDo

28、c->dmaze.mazexy=NOW;if(x=MAX_X-1)&&(y=MAX_Y-2)tag=1;InvalidateRect(NULL,FALSE);return;if(pDoc->dmaze.mazexy-1=NOTHING)pDoc->dmaze.push(x,y,'L');pDoc->dmaze.mazexy=LEFT;y=y-1;pDoc->dmaze.mazexy=NOW;if(x=MAX_X-1)&&(y=MAX_Y-2)tag=1;InvalidateRect(NULL,FALSE);retur

29、n;if(pDoc->dmaze.mazex-1y=NOTHING)pDoc->dmaze.push(x,y,'U');pDoc->dmaze.mazexy=UP;x=x-1;pDoc->dmaze.mazexy=NOW;if(x=MAX_X-1)&&(y=MAX_Y-2)tag=1;InvalidateRect(NULL,FALSE);return;if(pDoc->dmaze.mazexy+1=NOTHING)pDoc->dmaze.push(x,y,'R');pDoc->dmaze.mazexy=RIGHT;y=y+1;pDoc->dmaze.mazexy=NOW;if(x=MAX_X-1)&&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论