高級語言課程設(shè)計——迷宮實驗報告_第1頁
高級語言課程設(shè)計——迷宮實驗報告_第2頁
高級語言課程設(shè)計——迷宮實驗報告_第3頁
高級語言課程設(shè)計——迷宮實驗報告_第4頁
高級語言課程設(shè)計——迷宮實驗報告_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、.山東中醫(yī)藥大學理工學院課 程 設(shè) 計 報 告課程名稱: 高級語言課程設(shè)計 課程代碼: 07300561 設(shè)計內(nèi)容: 迷宮 二0一二 年 12 月 15 日;29目 錄1.系統(tǒng)簡介32.設(shè)計分析32.1需要分析32.2功能設(shè)計組織圖32.3 界面介紹33.詳細內(nèi)部實現(xiàn)介紹33.1類.h33.2成員函數(shù)33.2 主函數(shù).cpp34.按鈕和圖標功能實現(xiàn)過程35.系統(tǒng)總結(jié)35.1系統(tǒng)缺點 3 5.2系統(tǒng)有點3一系統(tǒng)簡介 軟件類型:應(yīng)用軟件運行平臺:MFC界面設(shè)計目的:通過課程設(shè)計,鞏固所學理論知識,培養(yǎng)綜合運用所學知識解決實際問題的能力。能根據(jù)實際問題的具體情況結(jié)合數(shù)據(jù)結(jié)構(gòu)課程中的基本理論和基本方法

2、,正確分析出數(shù)據(jù)的邏輯結(jié)構(gòu),合理選擇相應(yīng)的存儲結(jié)構(gòu),并能設(shè)計出解決實際問題的有效算法。系統(tǒng)特色:具有高度的容錯機制,不會因小的失誤造成死循環(huán)??梢詫Τ绦蜻\行時進行開始與暫停的控制。錯誤報警機制可以提醒用戶進行正確的操作。界面友好簡潔游戲者可以快速進入游戲狀態(tài)。 二 .設(shè)計分析一需要分析 1.本程序中,在迷宮中求出從入口到出口的路徑。一個簡單的求解方法是:從入口出發(fā),沿某一方向進行探索,若能走通,則繼續(xù)向前走;若不能走通則返回再繼續(xù)查找路徑,直到走完整個過程為止。2.計算機解迷宮時,算法中應(yīng)用“棧”的思想。3.程序執(zhí)行的命令包括:(1).構(gòu)造迷宮數(shù)組??梢詫⒚詫m定義成一個二維數(shù)組,其中元素值為1

3、表示有障礙物,元素值為0表示沒有障礙。為了表示四周的圍墻,二維數(shù)組四周的數(shù)組元素均為1,如圖所示,其中雙邊矩形表示迷宮,前進的方向有4個,分別是上、下、左、右。入口(1,1)0 1 2 3 4 5 6 7 8 911111111111001101111000111101000001011101111000011001100110111111111111111111111(2).構(gòu)造路徑4. 測試數(shù)據(jù)迷宮的測試數(shù)據(jù)如下:左上角(1,1)為入口,右下角(18,18)為出口。void CreateMaze() /創(chuàng)建迷宮 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; 二功能設(shè)計組織圖 入棧操作的實現(xiàn)開

7、始: 創(chuàng)建結(jié)點Struct node判斷結(jié)點建指針是否為NULL是 否進行結(jié)點指針與頭指針head交換,具體操作如下:new_node->next=head; head=new_node; 進行復(fù)制操作,然后置結(jié)點地址域為NULL,操作如下:new_node->x=a; new_node->y=b; new_node->direction=d; new_node->next=NULL;入棧成功結(jié)束三界面介紹本程序采用了可視化的界面編程,以便將界面設(shè)計的更加友好,但是能力有限,只實現(xiàn)了簡單功能較少的界面。 在迷宮游戲中,涉及到路徑搜尋時必須設(shè)定物體的一些走出迷宮的法

8、則,必須確定物體可以搜索迷宮中的每一塊兒區(qū)域來找出路口,若走出迷宮的法則設(shè)計部完整,那么物體就可能在同一地方兜圈子,永遠找不到路口。 此外,為了讓物體走出迷宮后能正確知道走出迷宮的路徑必須給物體一張地圖記錄所走的路徑,這張圖就是棧結(jié)構(gòu)。 界面截圖 三 .詳細內(nèi)部實現(xiàn)介紹 一 類.h主要使用的類有:1、CMainFrame類主要用于主框架的構(gòu)造。2、CMaze_DFSDoc類用于聲明主函數(shù)中所要調(diào)用的函數(shù)。3、CMaze_DFSView類用于迷宮圖的繪制。4、DMaze類迷宮圖的創(chuàng)建和壓棧的思想記錄結(jié)點坐標。二 成員函數(shù)1、 框架構(gòu)造函數(shù):PreCreateWindow()和PreCreateW

9、indow()通過像素的值來確定框架的長高,調(diào)用函數(shù)GetSystemMetrics()。函數(shù)實現(xiàn):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、入棧出棧從操作函數(shù)的實現(xiàn):(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、 迷宮創(chuàng)建函數(shù)CreateMaze():void CreateMaze()/創(chuàng)建迷宮 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、函數(shù).cpp主函數(shù)的功能實現(xiàn):#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)/現(xiàn)在位置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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論