版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 摘 要</b></p><p> 本次課程設(shè)計是通過編寫匯編語言程序,實現(xiàn)字符圖形的顯示,我們這組是每人用匯編語言程序?qū)崿F(xiàn)不同的字符顯示,我的是顯示字符——安全。具體實現(xiàn)方法可以在DOS環(huán)境下完成。編寫完程序后分析并理解每條程序的意思,并解釋主要程序的意思,最后調(diào)試出所要求的字符。在程序編寫前,我首先對自己顯示的圖形進行了設(shè)計,確定了每個數(shù)字相對于前一個
2、數(shù)字的位置,以便在編寫程序的時候正確定義字符的屬性,也為在顯示的時候能夠顯示較好的效果,打下了基礎(chǔ)。本次實驗實驗的編寫環(huán)境是MASM,編譯、鏈接也是在該環(huán)境下實現(xiàn)的。程序的運行我使用的是DOS環(huán)境。通過參考網(wǎng)上的一些原程序,我發(fā)現(xiàn)要編寫好該程序,首先應(yīng)該對BIOS的中斷10熟悉,因此程序編寫前,我先認真學習了該BIOS中斷的有關(guān)功能。萬事開頭難,一旦了解了設(shè)計此程序的原理,并在此基礎(chǔ)上掌握相關(guān)的技術(shù),其他的工作也就跟著展開來。</
3、p><p> 本次課程設(shè)計,是使用匯編作為開發(fā)語言實現(xiàn)功能要求??偹苤瑓R編是一個低級語言,對硬件有很大的依賴性,在使用上也不及高級語言方便,但其在執(zhí)行效率上比高級語言有很大的優(yōu)勢。本次課程設(shè)計,一方面讓我們再次熟悉匯編指令,再次對算法的設(shè)計有一定的要求。另一方面讓我們對較大匯編程序的編寫有一個清晰的過程,學習把一個教大問題分解成若干個小問題,即子程序是一個良好的編程習慣。掌握匯編指令,學習的理論知識應(yīng)用于解決實
4、際的問題。</p><p> 關(guān)鍵詞:推箱子,休閑娛樂,拓展思維</p><p><b> Abstract</b></p><p> This course is designed by write assembly language program to realize the character graphic display, e
5、ach of our group is in assembly language program to realize the different characters, according to my is the character - security. Concrete implementation method can be done in the DOS environment. After writing the prog
6、ram analysis and understand the meaning of each program, and explain the meaning of the main program, the final debugging the required characters. Before I write, I first has car</p><p> The curriculum desi
7、gn, assembly as a development language realization is the use of functional requirements. Known, the assembly is a low-level language, have great dependence on hardware, also as a high-level language in use is convenient
8、, but its on the execution efficiency than a high-level language has a great advantage. The curriculum design, on the one hand, let us be familiar with assembly instruction again and again to the design of algorithm has
9、certain requirements. On the other hand l</p><p> Key words: Sokoban game, recreation, creative thinking</p><p><b> 目 錄</b></p><p><b> 摘 要1</b></p&
10、gt;<p><b> 1、緒論4</b></p><p> 1.1課題研究背景和意義4</p><p> 1.2推箱子游戲發(fā)展現(xiàn)狀4</p><p><b> 1.3設(shè)計方案5</b></p><p> 2、程序設(shè)計說明及代碼7</p><p&
11、gt; 2.1初始化模塊7</p><p> 2.2功能控制模塊(功能實現(xiàn))12</p><p> 2.3游戲數(shù)據(jù)模塊16</p><p> 2.4游戲設(shè)計模塊18</p><p> 2.4.1. 數(shù)據(jù)類的設(shè)計與實現(xiàn)18</p><p> 2.4.2設(shè)定數(shù)據(jù)結(jié)構(gòu)18</p><
12、;p> 3、游戲數(shù)據(jù)流程和設(shè)計方案20</p><p> 3.1數(shù)據(jù)流程和功能介紹20</p><p> 3.2設(shè)計目的20</p><p> 3.3主流程界面設(shè)計20</p><p> 3.4游戲設(shè)計任務(wù)和功能21</p><p> 4.程序調(diào)試﹑記錄24</p><
13、p><b> 5.總結(jié)28</b></p><p><b> 參考文獻29</b></p><p><b> 致 謝30</b></p><p><b> 1、緒論</b></p><p> 1.1課題研究背景和意義</p&g
14、t;<p> 推箱子是一款來自日本的古老游戲,其設(shè)計目的是訓練人的邏</p><p> 輯思維能力。游戲場景一般是設(shè)定在空間狹小的倉庫中,要求把箱子擺放到指定位置。這就要求玩家巧妙的運用有限的空間和通道,合理的安排箱子的位置和移動次序才可能完成任務(wù)。隨著計算機游戲的發(fā)展,很多編程愛好者基于該游戲的思想開發(fā)了出各種版本、各種類型的推箱子。這其中也包括很多手機版本的實現(xiàn),伴隨著手機與計算機的普及,很
15、快推箱子游戲便進入了千家萬戶。</p><p> 如今,游戲機風行的程度,是第一臺電子游戲機的研制者諾蘭?布什納爾先生始料不及的。在全世界最大的城市,直至最小的村莊,從紐約最輝煌的游樂場,到高加索最小的鄉(xiāng)鎮(zhèn)兒童娛樂點,在千家萬戶,正在進行著千千萬萬這樣的“戰(zhàn)斗”,伴隨著無數(shù)成功與失敗,興奮與懊喪。游戲機帶來了一個全球性的瘋狂癥,其他任何娛樂與之相比都望塵莫及。然而,究竟是什么原因使游戲機如此風行呢?
16、在回顧了游戲機發(fā)展簡史之后,我們不難悟出,技術(shù)進步在游戲機發(fā)展過程中起到了極大的促進作用。但是,技術(shù)進步絕不是游戲機風行的唯一因素。隨著終端設(shè)備開發(fā)能力的加強,作為娛樂終端的游戲機也得到了很大程度的發(fā)展。這也加速了游戲機在全球風行程度,所以對于游戲機的研究和設(shè)計具有很重要的意義,這也是本課題研究的來源。</p><p> 1.2推箱子游戲發(fā)展現(xiàn)狀</p><p> 本文針對推箱子游戲機
17、的設(shè)計首先介紹了選題的要求,之后詳細敘述了軟件和硬件的設(shè)計過程。最后論文對設(shè)計進行了總結(jié),對設(shè)計中可以進一步改善的地方提出了建議。</p><p> 在時鐘脈沖的作用下,各個按鍵都能按照事先設(shè)定好的規(guī)則進行游戲控制。確定鍵能使界面從初始化顯示切換到游戲界面顯示,上下左右鍵控制箱子的移動方向,如果可以移動則移動方塊同時跟蹤人物的位置及刷新動態(tài)數(shù)組的內(nèi)容。在游戲的同時程序會隨時記錄玩家所走的游戲步數(shù)、游戲時間,直至
18、本關(guān)通過,在進入下一關(guān)的同時更新地圖并刷新游戲步數(shù)和時間。選關(guān)鍵用于選擇游戲關(guān)數(shù),在游戲過程中這個鍵任何時候都有效,當按下選關(guān)鍵后,游戲地圖返回第一關(guān),再次按下時游戲進入二關(guān),這樣每按下一次鍵游戲關(guān)數(shù)加一,如果游戲到了第最后一關(guān)將自動返回第一關(guān)</p><p><b> 1.3設(shè)計方案</b></p><p> 1.3.1. 模塊劃分</p><
19、;p><b> 本游戲分五個模塊</b></p><p> ?。?)初始化模塊,對游戲界面進行初始化操作,包括界面切換、控制聲音播放和游戲的暫停與恢復(fù),以及手機返回鍵的設(shè)置。</p><p> ?。?)功能實現(xiàn)模塊,主要是對游戲中各個環(huán)節(jié)進行繪制,設(shè)計出系統(tǒng)地圖,記錄玩家所用步驟,對玩家觸屏的設(shè)定,針對不同的手機分辨率繪制界面,音樂功能調(diào)用,游戲中所有文字的提
20、示信息以及游戲中背景和文字顏色大小等設(shè)置的實現(xiàn)。</p><p> (3)游戲設(shè)計模塊,實現(xiàn)玩家控制小烏龜?shù)牟僮?,使之能夠操作箱子到各個位置,以完成游戲設(shè)定的任務(wù)。</p><p> ?。?)游戲數(shù)據(jù)模塊,主要是對玩家編輯的自定義地圖和玩家選擇系統(tǒng)設(shè)置狀態(tài)的保存,以及游戲數(shù)據(jù)合理性的判斷。</p><p> ?。?)功能控制模塊,控制游戲功能的實現(xiàn),包括創(chuàng)建菜單、
21、調(diào)用系統(tǒng)音樂、獲取當前系統(tǒng)狀態(tài)、獲取游戲界面圖標等參數(shù)、保存游戲。</p><p> 1.3.2 系統(tǒng)功能結(jié)構(gòu)圖</p><p> 圖1.1系統(tǒng)功能結(jié)構(gòu)圖</p><p> 2、程序設(shè)計說明及代碼</p><p><b> 2.1初始化模塊</b></p><p> ?。?)設(shè)計游戲所需的
22、一個簡單的窗口應(yīng)用程序,程序預(yù)處理部分包括加載頭文件、定義全局變量和定義數(shù)據(jù)結(jié)構(gòu),并對它們進行初始化工作,游戲從第一關(guān)開始,按上下左右方向鍵控制小人移動來推動箱子,可以在游戲中的任何時候按Esc鍵退出。如果游戲無成功希望,可以按空格鍵回到當前任務(wù)的開始狀態(tài);如果成功完成當前關(guān),則進入下一關(guān),如果當前關(guān)是最后一關(guān),則顯示通關(guān)信息,提示游戲結(jié)束。</p><p><b> 【程序如下】:</b>
23、;</p><p><b> .386</b></p><p> .model flat,stdcall</p><p> option casemap:none</p><p> include CBox.inc</p><p> include StoreHouse.inc</
24、p><p><b> .const </b></p><p> MAP_TOP equ 32</p><p> MAP_LEFT equ 1</p><p> xBmBack dd 0</p><p> xBmWall dd 30</p>&l
25、t;p> xBmRoad dd 60</p><p> xBmBox1 dd 90</p><p> xBmBox2 dd 120</p><p> xBmObject dd 150 </p><p> xBmMan dd 180</p><p> szCapti
26、on db 'RedBox',0</p><p> szLoadError db 'Load Resource Error! ',0</p><p> szAlreadyMaxGate db 'Already Max Gate!',0</p><p> szOutOfRange d
27、b 'Out of Range!',0</p><p> szSuccessMsg db 'Your are success!!!',13,10,'Are you want to next gate?',0</p><p> FmtStr db 'val = %d',0</p><p> Fm
28、tGate db ' - No.%d',0</p><p><b> .data?</b></p><p> bmToolbar dd ?</p><p> BackDc dd ?</p><p> hBitMap dd ?</p><p> szErrorMessag
29、e db 256 dup (?)</p><p> Map db 14D*12D dup (?) ; 14 x 12 Grid</p><p> ManXPos dd ?</p><p> ManYPos dd ? </p><p> CurrGate dd ?</p><p> CurrS
30、tep dd ?</p><p><b> .code</b></p><p><b> start:</b></p><p> invoke GetModuleHandle,NULL</p><p> mov hInstance,eax</p><p> i
31、nvoke GetCommandLine</p><p> mov CommandLine,eax</p><p> invoke InitCommonControls</p><p> invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT</p><p> invoke E
32、xitProcess,eax</p><p> WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD</p><p> LOCALwc:WNDCLASSEX</p><p> LOCALmsg:MSG</p><p> movw
33、c.cbSize,SIZEOF WNDCLASSEX</p><p> movwc.style,CS_HREDRAW or CS_VREDRAW</p><p> movwc.lpfnWndProc,OFFSET WndProc</p><p> movwc.cbClsExtra,NULL</p><p> movwc
34、.cbWndExtra,DLGWINDOWEXTRA</p><p> pushhInst</p><p> popwc.hInstance</p><p> movwc.hbrBackground,COLOR_BTNFACE+1</p><p> movwc.lpszMenuName,OFFSET MenuName&l
35、t;/p><p> movwc.lpszClassName,OFFSET ClassName</p><p> invoke LoadIcon,NULL,IDI_APPLICATION</p><p> movwc.hIcon,eax</p><p> movwc.hIconSm,eax</p><p>
36、; invoke LoadCursor,NULL,IDC_ARROW</p><p> movwc.hCursor,eax</p><p> invoke RegisterClassEx,addr wc</p><p> invoke CreateDialogParam,hInstance,addr DlgName,NULL,addr WndProc,N
37、ULL</p><p> invoke ShowWindow,hWnd,SW_SHOWNORMAL</p><p> invoke UpdateWindow,hWnd</p><p> .while TRUE</p><p> invoke GetMessage,addr msg,NULL,0,0</p><p&g
38、t; .BREAK .if !eax</p><p> invoke TranslateMessage,addr msg</p><p> invoke DispatchMessage,addr msg</p><p><b> .endw</b></p><p> moveax,msg.wParam<
39、;/p><p><b> ret</b></p><p> WinMain endp</p><p> WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM</p><p> LOCAL ps :PAINTSTRUCT</p><
40、p> LOCAL Dc:HDC</p><p> moveax,uMsg</p><p> .if eax == WM_KEYDOWN</p><p> invoke KeyDownProc,wParam</p><p> .elseif eax==WM_INITDIALOG</p><p><
41、;b> pushhWin</b></p><p><b> pophWnd</b></p><p> invoke GetDlgItem,hWin,IDC_TBRMAIN</p><p> invoke DoToolBar,hInstance,eax</p><p> invoke Lo
42、adRes</p><p> .if eax == FALSE </p><p> invoke MessageBox,hWin,Addr szErrorMessage,\</p><p> Addr szLoadError,MB_ICONERROR</p><p><b> .endif</b></p&g
43、t;<p> invoke InitStBar</p><p> invoke SelectGate,1</p><p> .elseif eax==WM_COMMAND</p><p> moveax,wParam</p><p> andeax,0FFFFh</p><p> .i
44、f eax==IDM_FILE_EXIT</p><p> invoke SendMessage,hWin,WM_CLOSE,0,0</p><p> .elseif eax==IDM_HELP_ABOUT</p><p> invoke ShellAbout,hWin,addr AppName,addr AboutMsg,NULL</p>&l
45、t;p> .elseif eax == IDC_TBB_NEW</p><p> invoke SelectGate,CurrGate</p><p> .elseif eax == IDC_TBB_PREV</p><p> mov eax, CurrGate</p><p><b> dec eax</b&
46、gt;</p><p> invoke SelectGate,eax</p><p> .elseif eax == IDC_TBB_NEXT</p><p> invoke NextGate</p><p> .elseif eax == IDC_TBB_ABOUT</p><p> invoke Shel
47、lAbout,hWnd,Addr AppName,Addr AboutMsg,NULL </p><p><b> .endif</b></p><p> .elseif eax==WM_PAINT</p><p> invoke BeginPaint,hWin,Addr ps</p><p&g
48、t; mov Dc,eax</p><p> invoke WMPaint,Dc</p><p> invoke EndPaint,hWin,Addr ps</p><p> .elseif eax==WM_CLOSE</p><p> invoke DestroyWindow,hWin</p><p>
49、.elseif uMsg==WM_DESTROY</p><p> invoke FreeRes</p><p> invoke PostQuitMessage,NULL</p><p><b> .else</b></p><p> invoke DefWindowProc,hWin,uMsg,wParam,l
50、Param</p><p><b> ret</b></p><p><b> .endif</b></p><p> xor eax,eax</p><p><b> ret</b></p><p> 2.2功能控制模塊(功能實現(xiàn))&l
51、t;/p><p> (2)小人移動的方向有4個,move()函數(shù)(處理小人移動的函數(shù))對這4個方向移動的處理都一致,只是調(diào)用函數(shù)時的參數(shù)有所不同。首先判斷小人移動的方向,然后根據(jù)小人所處世的當前狀態(tài)、下一步狀態(tài)或者下下一步狀態(tài)進行適當?shù)奶幚怼?lt;/p><p> KeyDownProc endp</p><p> ManMove proc vKey :DWORD&l
52、t;/p><p> LOCAL NewX:DWORD</p><p> LOCAL NewY:DWORD</p><p> LOCAL NewX2 :DWORD</p><p> LOCAL NewY2 :DWORD</p><p> LOCAL M1 :byte</p><p> LO
53、CAL M2 :byte</p><p> LOCAL nPos1 :DWORD</p><p> LOCAL nPos2 :DWORD</p><p><b> push esi</b></p><p> mov eax,ManXPos</p><p> mov NewX,eax<
54、;/p><p> mov NewX2,eax</p><p> mov eax,ManYPos</p><p> mov NewY,eax</p><p> mov NewY2,eax</p><p> mov eax ,vKey </p><p> .if eax == VK_UP&l
55、t;/p><p><b> dec NewY</b></p><p><b> dec NewY2</b></p><p><b> dec NewY2</b></p><p> .elseif eax == VK_DOWN</p><p><
56、b> inc NewY</b></p><p><b> inc NewY2</b></p><p><b> inc NewY2</b></p><p> .elseif eax == VK_LEFT</p><p><b> dec NewX</b&g
57、t;</p><p><b> dec NewX2</b></p><p><b> dec NewX2</b></p><p> .elseif eax == VK_RIGHT</p><p><b> inc NewX</b></p><p>
58、;<b> inc NewX2</b></p><p><b> inc NewX2</b></p><p><b> .else</b></p><p><b> ret </b></p><p><b> .endif <
59、/b></p><p> mov esi ,offset Map</p><p> ; Pos = y*14 + x</p><p><b> ; Get M1</b></p><p> mov eax,NewY</p><p> mov ebx,14D</p>&l
60、t;p><b> mul bx</b></p><p> add eax,NewX</p><p> mov ebx,eax</p><p> mov nPos1,eax</p><p> mov al ,[esi][ebx]</p><p><b> mov M1,a
61、l</b></p><p><b> ; Get M2</b></p><p> mov eax,NewY2</p><p> mov ebx,14D</p><p><b> mul bx</b></p><p> add eax,NewX2</
62、p><p> mov ebx,eax</p><p> mov nPos2,eax</p><p> mov al ,[esi][ebx]</p><p><b> mov M2,al</b></p><p><b> mov al,M1</b></p>
63、<p> .if (al == MAP_ROAD || al == MAP_OBJECT )</p><p><b> push NewX</b></p><p> pop ManXPos</p><p><b> push NewY</b></p><p> pop ManYP
64、os</p><p> .elseif al == MAP_BOX1 ; push box</p><p> mov al ,M2</p><p> .if al == MAP_ROAD ; push ok</p><p> mov ebx,nPos2</p><p> mov al,MAP_BOX1<
65、/p><p> mov [esi][ebx],al</p><p> mov ebx,nPos1</p><p> mov al,MAP_ROAD</p><p> mov [esi][ebx],al</p><p><b> push NewX</b></p><p&g
66、t; pop ManXPos</p><p><b> push NewY</b></p><p> pop ManYPos</p><p> .elseif al == MAP_OBJECT</p><p> mov ebx,nPos2</p><p> mov al,MAP_BOX
67、2</p><p> mov [esi][ebx],al</p><p> mov ebx,nPos1</p><p> mov al,MAP_ROAD</p><p> mov [esi][ebx],al</p><p><b> push NewX</b></p>&l
68、t;p> pop ManXPos</p><p><b> push NewY</b></p><p> pop ManYPos </p><p><b> .endif</b></p><p> .elseif al == MAP_BOX2</p><p&
69、gt;<b> mov al,M2</b></p><p> .if al == MAP_ROAD</p><p> mov ebx,nPos2</p><p> mov al,MAP_BOX1</p><p> mov [esi][ebx],al</p><p> mov ebx,n
70、Pos1</p><p> mov al,MAP_OBJECT</p><p> mov [esi][ebx],al</p><p><b> push NewX</b></p><p> pop ManXPos</p><p><b> push NewY</b>
71、</p><p> pop ManYPos</p><p> .elseif al == MAP_OBJECT </p><p> mov ebx,nPos2</p><p> mov al,MAP_BOX2</p><p> mov [esi][ebx],al</p><p> m
72、ov ebx,nPos1</p><p> mov al,MAP_OBJECT</p><p> mov [esi][ebx],al</p><p><b> push NewX</b></p><p> pop ManXPos</p><p><b> push NewY&l
73、t;/b></p><p> pop ManYPos</p><p> .endif </p><p><b> .else</b></p><p><b> .endif</b></p><p> invoke Repaint</p>&
74、lt;p><b> pop esi</b></p><p><b> ret</b></p><p><b> 2.3游戲數(shù)據(jù)模塊</b></p><p> ?。?)函數(shù)實現(xiàn)的功能分別是人空地移動箱子到空地、從目的地移動箱子到空地、從空地移動箱子到目的地和中從目的地移動箱子到目的地。X、y
75、指明小人當前所處的位置,字符a表示移動的方向,有“u”、“d”、“l(fā)”和“r”4個值,分別表示向上、下、左、右移動。這幾個函數(shù)的實現(xiàn)原理大致相似。對于前面兩個函數(shù),首先判斷移動的方向,人小人所在的位置沿著移動的方向移動一步畫小人,移動兩步畫箱子,并設(shè)置狀態(tài)為“b”;對于后面兩個參數(shù),首先判斷移動的方向,從小人所在的位置沿著移動方向移動一步畫小人,移動兩上在目的地畫箱子,并設(shè)置狀態(tài)為“i”,表明箱子在目的地上。</p>&l
76、t;p> ManMove endp</p><p> XYtoPos proc x:DWORD,y:DWORD</p><p> ; pos = y *14 + x Zero-Based</p><p> mov eax, y</p><p> mov ebx, 14D</p><p><b>
77、; mul bx</b></p><p> add eax ,x</p><p><b> ret</b></p><p> XYtoPos endp</p><p> Repaint proc </p><p> LOCAL R:RECT</p><p
78、> invoke GetClientRect,hWnd,Addr R</p><p> invoke InvalidateRect,hWnd,Addr R,0</p><p><b> ret</b></p><p> Repaint endp</p><p> Check proc </p>
79、<p> ; Check Success and return true or false</p><p> LOCAL Result :DWORD</p><p><b> push esi</b></p><p> push TRUE </p><p> pop Result</p&g
80、t;<p> lea esi,Map</p><p> mov ecx, 14D*12D</p><p> mov ebx ,0</p><p><b> @@1:</b></p><p> mov al ,[esi][ebx]</p><p><b> inc
81、 ebx</b></p><p> cmp al,MAP_OBJECT</p><p><b> jz @@2</b></p><p><b> dec ecx</b></p><p><b> jnz @@1</b></p><p>
82、; jmp @@ExitCheck</p><p><b> @@2:</b></p><p> push FALSE </p><p> pop Result</p><p> @@ExitCheck:</p><p> mov eax,Result</p><p
83、><b> pop esi</b></p><p><b> ret</b></p><p><b> 2.4游戲設(shè)計模塊</b></p><p> 2.4.1. 數(shù)據(jù)類的設(shè)計與實現(xiàn)</p><p> 該類主要用于對地圖數(shù)據(jù)的保存與提取,在保存時,判斷玩家編輯的
84、地圖是否合理,如果不合理則提示相應(yīng)信息,只有合理的地圖才能保存。在提取地圖信息的時候也進行一次檢查,如果編輯地圖不合理則載入默認設(shè)置。關(guān)鍵代碼及說明如下:</p><p> 通過public static boolean exportDataToFile(int[][] editDataArray)方法將地圖數(shù)據(jù)寫入到文件中;通過public static boolean checkUserFile()檢查用戶
85、編輯數(shù)據(jù)是否合理;通過public static int[][] importDataFromFile()從文件中讀取數(shù)據(jù)載入地圖。</p><p> 2.4.2設(shè)定數(shù)據(jù)結(jié)構(gòu)</p><p> 例如行列數(shù)必須在15*15之間,玩家繪制地圖時,當前所選游標實現(xiàn)添加、刪除、替代等功能,判斷玩家是否完成任務(wù)。</p><p> Check endp</p>
86、;<p> InitStBar proc</p><p> LOCAL StbarHandle :DWORD </p><p> invoke GetDlgItem,hWnd,IDC_SBR1</p><p> mov StbarHandle,eax</p><p> invoke SendMessage,Stb
87、arHandle,SB_SIMPLE,1,0</p><p> ;invoke SendMessage,StbarHandle,SB_SETPARTS,1,150 </p><p><b> ret</b></p><p> InitStBar endp</p><p> ShowMessage proc Val
88、:DWORD</p><p><b> push eax </b></p><p> invoke wsprintf,Addr szErrorMessage,Addr FmtStr,Val</p><p> invoke MessageBox,hWnd,Addr szErrorMessage,Addr szCaption,MB_ICONI
89、NFORMATION</p><p><b> pop eax</b></p><p><b> ret</b></p><p> ShowMessage endp</p><p><b> end start</b></p><p> 3、游
90、戲數(shù)據(jù)流程和設(shè)計方案</p><p> 3.1數(shù)據(jù)流程和功能介紹</p><p> 本設(shè)計基本實現(xiàn)了可以在PC平臺上運行的推箱子游戲,本游戲分五個模塊:1、初始化模塊;2、功能實現(xiàn)模塊;3、游戲設(shè)計模塊;4、游戲數(shù)據(jù)模塊;5、功能控制模塊。</p><p> 本游戲是一款益智類游戲,所以操作十分簡單。游戲中玩家可以用鍵盤的上、下、左、右鍵控制小人的移動位置,也
91、可以直接觸摸手機屏幕完成相應(yīng)操作。游戲規(guī)則也十分簡單,玩家在一個有限空間內(nèi),將木箱放到指定的位置。箱子只能推不能拉,而且一次只能推動一個箱子,勝利條件是把所有箱子都推到目的地。</p><p><b> 3.2設(shè)計目的</b></p><p> ?。?)此次的設(shè)計是開發(fā)一款可在PC平臺上運行的推箱子游戲程序,可流暢運行游戲,編輯地圖等</p><
92、p> ?。?)進一步學習和掌握匯編語言程序的編寫和應(yīng)用的方法,通過較大規(guī)模程序的編寫,提高編寫匯編語言程序的水平和學習程序調(diào)試方法。</p><p><b> 。</b></p><p> 3.3主流程界面設(shè)計</p><p> 在策劃推箱子游戲時,首要考慮到要設(shè)計一個優(yōu)美的游戲界面,操作起來更加人性化,即玩家可以用鍵盤的上、下、左
93、、右鍵控制小烏龜?shù)囊苿游恢茫部梢灾苯佑|摸手機屏幕完成相應(yīng)操作。在畫面方面也要更加清新,方便各個年齡段的玩家使用。我對這個游戲的定義是一個輕量級的益智游戲,不存在復(fù)雜的情節(jié),做的主要工作為設(shè)計游戲各關(guān)倉庫的形狀、大小、可通過區(qū)域、各關(guān)中箱子的初始位置與目的地。當然在正式開始編寫程序時,需要上網(wǎng)搜集了游戲中要用到的圖片、聲音等,收集一些有用的素材。</p><p> 圖2.1 界面設(shè)計圖</p>&
94、lt;p><b> 圖2.2數(shù)據(jù)流程圖</b></p><p> 3.4游戲設(shè)計任務(wù)和功能</p><p> 3.4.1. 基本要求</p><p> (1)每關(guān)卡箱子數(shù)目不定;</p><p> ?。?)主角和箱子只能呆在通道及目標位置上移動,不能穿墻;</p><p> ?。?)
95、主角不能穿過箱子;</p><p> ?。?)箱子數(shù)量和目標位置數(shù)量相等(但每個箱子并不和唯一的目標位置一 一對應(yīng));</p><p> ?。?)主角可以移動和推動木箱(響應(yīng)鍵盤方向鍵);</p><p> ?。?)主角只能往前推動箱子,不能向后或者向側(cè)面拉箱子;</p><p> ?。?)主角不能同時推動兩個箱子;</p>
96、<p> (8)箱子移動方向正前方緊挨墻壁,不可推動;</p><p> ?。?)允許撤銷以及重做游戲步驟;</p><p> (10)將所有箱子推到設(shè)定位置則通過本關(guān),自動進入下一關(guān)卡;</p><p> ?。?1)記錄每一關(guān)中玩家的移動步數(shù);</p><p> 3.4.2. 地圖編輯器</p><p&g
97、t; (1)可通過地圖編輯器生成地圖;</p><p> ?。?)地圖由小正方塊拼接組成;</p><p> ?。?)地圖中每一格可以是墻、通道、木箱、目標位置;</p><p> (4)游戲主角所在位置同時必須是通道或者目標位置;</p><p> ?。?)一張地圖中主角數(shù)目有且僅有一個;</p><p> ?。?/p>
98、6)一張地圖中箱子數(shù)目必須與目標位置數(shù)目相等;</p><p> ?。?)允許對正在編輯的地圖清除或者替換某一格中的內(nèi)容;</p><p> ?。?)地圖中一格不允許墻、通道、木箱、目標位置中兩個及以上共存,最 后添加的類型為該格代表的類型;</p><p> ?。?)通過地圖編輯器生成的地圖可以被游戲程序調(diào)用;</p><p>
99、3.4.3. 擴展功能</p><p> ?。?)保存自定義地圖,重啟程序后依然可以編輯和調(diào)用運行該地圖;</p><p> (2)屏幕分辨率自適應(yīng);</p><p> ?。?)資源文件支持簡體中文和英文;</p><p> ?。?)菜單功能,玩家通過看目錄按對應(yīng)的鍵可以進入對應(yīng)的功能菜單,其中1進入游戲,2選擇游戲關(guān)卡,3游戲幫助指南 ,
100、4退出游戲。</p><p> ?。?) 游戲功能: 玩家可以通過操縱鍵盤中的上下左右鍵進入游戲進行各種操作來完成游戲。</p><p> ?。?)循環(huán)功能:當玩家正在游戲的時候如果某一步走錯了,導(dǎo)致游戲無法完成,可以隨時重新開始游戲來完成關(guān)卡,游戲過程中可以隨時按Ctrl+V退出游戲。</p><p> ?。?)順序功能: 當玩家完成了某一關(guān)之后,隨著進入下一關(guān)門
101、可以按順序進入下一關(guān),繼續(xù)開始更有挑戰(zhàn)的關(guān)卡,如果該關(guān)是最后一關(guān),則顯示通關(guān)完成。</p><p><b> 4.程序調(diào)試﹑記錄</b></p><p> 程序調(diào)試,是將編制的程序投入實際運行前,用手工或編譯程序等方法進行測試,修正語法錯誤和邏輯錯誤的過程。這是保證游戲正常運行的必不可少的步驟。編完計算機程序,得調(diào)試所寫程序是否正確,是否能滿足所要求的功能<
102、/p><p> 啟動游戲后便可直接進入游戲主界面,主界面上玩家可以自由選擇對游戲的操作。</p><p> 該游戲的運行步驟與調(diào)試結(jié)果如下:</p><p> 1. 啟動游戲后游戲主界面,效果如圖所示。</p><p><b> 圖3.1游戲啟動圖</b></p><p> 2.當你完成某一
103、關(guān)卡時,彈出一對話框,點擊“確定”進行下一關(guān)卡,</p><p> 點擊“取消”繼續(xù)該關(guān)卡。</p><p><b> 圖3.2通關(guān)圖</b></p><p> 3. 點擊“←,→”即可進入玩家自己已經(jīng)編輯好的游戲中,界面設(shè)計和系統(tǒng)設(shè)置的關(guān)卡相同,過關(guān)之后,自動進入系統(tǒng)設(shè)置的第一關(guān)卡。效果如圖所示。</p><p>
104、;<b> 圖3.3選擇關(guān)卡圖</b></p><p> 4. 點擊“文件”,即可進入玩家自行編譯游戲倉庫中。玩家可以在該標題欄中選擇關(guān)卡難度或退出該游戲。</p><p> 圖3.4自行編譯關(guān)卡圖</p><p> 5. 點擊“編譯”,即可進入玩家自行編譯游戲倉庫中。玩家可以在游戲的格中按照自己的意愿設(shè)計關(guān)卡(需要符合游戲自身規(guī)定)。
105、該界面共有9個選項鍵,分別是墻、路、目的地、箱子、小人、鎖定、刪除、保存、返回主菜單,玩家可以通過對應(yīng)的數(shù)字按鍵或直接觸控屏幕實現(xiàn)對應(yīng)功能。效果如圖所示。</p><p> 圖3.5 選擇功能圖</p><p> 6. 點擊游戲其他位置時,則彈出如下圖所示的對話框,點擊“確定”恢復(fù)正常。</p><p><b> 圖3.6錯誤恢復(fù)圖</b>
106、;</p><p> 7. 點擊“工具欄”,則可以調(diào)試游戲。該界面介紹了關(guān)于本游戲的一些修改方法。效果如圖所示。</p><p><b> 圖3.7調(diào)試游戲圖</b></p><p> 8. 點擊“退出”,則會退出游戲。</p><p><b> 圖3.8退出游戲圖</b></p>
107、;<p><b> 5.總結(jié)</b></p><p> 一周的匯編語言課程設(shè)計結(jié)束了,我的收獲很大。通過課程設(shè)計的編程和對編程過程中遇到的問題的思考,有效的提高了我對匯編的認識和理解,切實的提高了我的編程能力,補全了我的不足。通過這次課程設(shè)計,我鞏固了所學知識,能用匯編語言熟練地運用順序、選擇、循環(huán)三大結(jié)構(gòu),進一步掌握了各個指令的功能,特別是轉(zhuǎn)向指令,掌握了子程序的定義及調(diào)
108、用,以及正確地運用DEBUG指令。在整個程序的編寫中,調(diào)試占了很大部分的時間。要想寫好匯編語言的程序,必須認真對待代碼的每一個細節(jié),還必須熟練的掌握debug命令,這對程序的調(diào)試是非常重要的。通過這次實際動手能力的培養(yǎng),我進一步熟悉了匯編語言的結(jié)構(gòu)和使用方法,基本達到了能獨立閱讀、編制和調(diào)試一定規(guī)模的匯編語言程序的水平。</p><p> 本次匯編語言課程設(shè)計是利用我們平時所學的匯編知識編寫一個成績評定的小程序
109、,剛拿到題目的時候還有點擔憂。由于平時匯編語言的知識掌握的并不牢固,并且也沒有過像這樣的為期一周的匯編語言實踐課程。但當靜下心來仔細把問題讀懂和頭腦中有了大致思路的時候,這種擔憂就完全消失了。其實這次課程設(shè)計并不要求你把書上各種指令及其工能掌握的很好并且能熟練的運用匯編語言編程,而恰恰是利用這次課程設(shè)計的機會來提高這方面的能力。這就是一個心態(tài)問題,看你有沒有擺正心態(tài),看你有沒有面對挫折的勇氣,如果一開始就沒擺正心態(tài),思維就會堵塞,后面就
110、更無法做下去了。這次課程設(shè)計讓我更加懂得以后在面臨困難與挫折的時候要有平和的心態(tài),要有冷靜的頭腦。</p><p> 通過本次匯編語言課程設(shè)計,也讓我更加明白實踐的重要性,如果整天的學習課本上的理論知識而不拿來用那肯定是很煩的,況且匯編語言這門課本身學起來就很煩,尤其是要去理解各種指令的功能,還要學習相應(yīng)的硬件知識。再者,學習理論知識的目的還是要拿來運用,通過實踐來鞏固所學的理論知識。并且通過這次課程設(shè)計實踐,
111、讓我一改往日的厭學情緒,尤其是當程序運行正確的時候,那種來自內(nèi)心的成就感,讓我更加有信心學好匯編語言了。</p><p><b> 參考文獻</b></p><p> [1]錢曉捷.匯編語言程序設(shè)計.北京:電子工業(yè)出版社,2012.6</p><p> [2]沈美明、溫冬嬋等.IBM-PC匯編語言程序設(shè)計.北京.清華大學出版社,2001.
112、8</p><p> [3] 詹仕華等.匯編語言程序設(shè)計.北京:中國電力出版社,2008.2 </p><p> [4]詹仕華等.匯編語言程序設(shè)計習題解答及課程實驗、設(shè)計輔導(dǎo).北京:中國電力出版社,2008.2 </p><p> [5]王爽.匯編語言. 北京:清華大學出版社2003.5</p><p> [6]曹加恒等編.《新一代匯
113、編語言課程設(shè)計》. 北京:高等教育出版社,2003.6[7]楊路明等編.《匯編語言程序設(shè)計》. 長沙:中南大學出版社,2005.8</p><p><b> 致 謝</b></p><p> 本設(shè)計是在**導(dǎo)師教授的悉心指導(dǎo)下完成的,導(dǎo)師淵博的知識,嚴謹?shù)闹螌W態(tài)度,一絲不茍的工作作風,平易近人的性格都是我學習的楷模。在論文的研究及整理期間,導(dǎo)師給了我很大的支
114、持和鼓勵,才使得論文得以順利的完成,在此謹向?qū)煴硎局倚牡母兄x和崇高的敬意。同時感謝各位隊友的支持,他們給我們提供了必要的素材,提供了很大的方便,感謝同班同學的幫助,在作論文期間,他們不僅在學習上對我有很大的幫助,還在生活上提供方便。這一周來,我和他們相處的是非常愉快的。同時還要感謝外班等同學,他們也給了我很大的支持和幫助。最后,感謝各位評委能在百忙之中對我的論文進行審察,由于本人知識有限,不足之處在所難免,還請各位評委指正。</
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 匯編語言課程設(shè)計
- 匯編語言課程設(shè)計
- c語言課程設(shè)計--推箱子游戲
- c語言課程設(shè)計--推箱子游戲
- 匯編語言課程設(shè)計報告
- 匯編語言課程設(shè)計報告
- 匯編語言課程設(shè)計安排
- 匯編語言課程設(shè)計報告
- 匯編語言課程設(shè)計報告a
- 《c語言程序設(shè)計》課程設(shè)計推箱子
- 匯編語言課程設(shè)計----電子鬧鐘
- 打字游戲-匯編語言課程設(shè)計
- 匯編語言程序設(shè)計-課程設(shè)計
- 匯編語言程序設(shè)計課程設(shè)計
- 匯編語言動畫設(shè)計課程設(shè)計
- 推箱子游戲課程設(shè)計
- 微機原理與匯編語言課程設(shè)計
- 匯編語言課程設(shè)計磁盤文件管理
- 匯編語言課程設(shè)計_提取系統(tǒng)時間
- 匯編語言課程設(shè)計《定時顯示系統(tǒng)》
評論
0/150
提交評論