2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  摘 要</b></p><p>  本次課程設(shè)計(jì)是通過(guò)編寫匯編語(yǔ)言程序,實(shí)現(xiàn)字符圖形的顯示,我們這組是每人用匯編語(yǔ)言程序?qū)崿F(xiàn)不同的字符顯示,我的是顯示字符——安全。具體實(shí)現(xiàn)方法可以在DOS環(huán)境下完成。編寫完程序后分析并理解每條程序的意思,并解釋主要程序的意思,最后調(diào)試出所要求的字符。在程序編寫前,我首先對(duì)自己顯示的圖形進(jìn)行了設(shè)計(jì),確定了每個(gè)數(shù)字相對(duì)于前一個(gè)

2、數(shù)字的位置,以便在編寫程序的時(shí)候正確定義字符的屬性,也為在顯示的時(shí)候能夠顯示較好的效果,打下了基礎(chǔ)。本次實(shí)驗(yàn)實(shí)驗(yàn)的編寫環(huán)境是MASM,編譯、鏈接也是在該環(huán)境下實(shí)現(xiàn)的。程序的運(yùn)行我使用的是DOS環(huán)境。通過(guò)參考網(wǎng)上的一些原程序,我發(fā)現(xiàn)要編寫好該程序,首先應(yīng)該對(duì)BIOS的中斷10熟悉,因此程序編寫前,我先認(rèn)真學(xué)習(xí)了該BIOS中斷的有關(guān)功能。萬(wàn)事開(kāi)頭難,一旦了解了設(shè)計(jì)此程序的原理,并在此基礎(chǔ)上掌握相關(guān)的技術(shù),其他的工作也就跟著展開(kāi)來(lái)。</

3、p><p>  本次課程設(shè)計(jì),是使用匯編作為開(kāi)發(fā)語(yǔ)言實(shí)現(xiàn)功能要求??偹苤?,匯編是一個(gè)低級(jí)語(yǔ)言,對(duì)硬件有很大的依賴性,在使用上也不及高級(jí)語(yǔ)言方便,但其在執(zhí)行效率上比高級(jí)語(yǔ)言有很大的優(yōu)勢(shì)。本次課程設(shè)計(jì),一方面讓我們?cè)俅问煜R編指令,再次對(duì)算法的設(shè)計(jì)有一定的要求。另一方面讓我們對(duì)較大匯編程序的編寫有一個(gè)清晰的過(guò)程,學(xué)習(xí)把一個(gè)教大問(wèn)題分解成若干個(gè)小問(wèn)題,即子程序是一個(gè)良好的編程習(xí)慣。掌握匯編指令,學(xué)習(xí)的理論知識(shí)應(yīng)用于解決實(shí)

4、際的問(wèn)題。</p><p>  關(guān)鍵詞:推箱子,休閑娛樂(lè),拓展思維</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è)計(jì)方案5</b></p><p>  2、程序設(shè)計(jì)說(shuō)明及代碼7</p><p&

11、gt;  2.1初始化模塊7</p><p>  2.2功能控制模塊(功能實(shí)現(xiàn))12</p><p>  2.3游戲數(shù)據(jù)模塊16</p><p>  2.4游戲設(shè)計(jì)模塊18</p><p>  2.4.1. 數(shù)據(jù)類的設(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è)計(jì)方案20</p><p>  3.1數(shù)據(jù)流程和功能介紹20</p><p>  3.2設(shè)計(jì)目的20</p><p>  3.3主流程界面設(shè)計(jì)20</p><p>  3.4游戲設(shè)計(jì)任務(wù)和功能21</p><p>  4.程序調(diào)試﹑記錄24</p><

13、p><b>  5.總結(jié)28</b></p><p><b>  參考文獻(xiàn)29</b></p><p><b>  致 謝30</b></p><p><b>  1、緒論</b></p><p>  1.1課題研究背景和意義</p&g

14、t;<p>  推箱子是一款來(lái)自日本的古老游戲,其設(shè)計(jì)目的是訓(xùn)練人的邏</p><p>  輯思維能力。游戲場(chǎng)景一般是設(shè)定在空間狹小的倉(cāng)庫(kù)中,要求把箱子擺放到指定位置。這就要求玩家巧妙的運(yùn)用有限的空間和通道,合理的安排箱子的位置和移動(dòng)次序才可能完成任務(wù)。隨著計(jì)算機(jī)游戲的發(fā)展,很多編程愛(ài)好者基于該游戲的思想開(kāi)發(fā)了出各種版本、各種類型的推箱子。這其中也包括很多手機(jī)版本的實(shí)現(xiàn),伴隨著手機(jī)與計(jì)算機(jī)的普及,很

15、快推箱子游戲便進(jìn)入了千家萬(wàn)戶。</p><p>  如今,游戲機(jī)風(fēng)行的程度,是第一臺(tái)電子游戲機(jī)的研制者諾蘭?布什納爾先生始料不及的。在全世界最大的城市,直至最小的村莊,從紐約最輝煌的游樂(lè)場(chǎng),到高加索最小的鄉(xiāng)鎮(zhèn)兒童娛樂(lè)點(diǎn),在千家萬(wàn)戶,正在進(jìn)行著千千萬(wàn)萬(wàn)這樣的“戰(zhàn)斗”,伴隨著無(wú)數(shù)成功與失敗,興奮與懊喪。游戲機(jī)帶來(lái)了一個(gè)全球性的瘋狂癥,其他任何娛樂(lè)與之相比都望塵莫及。然而,究竟是什么原因使游戲機(jī)如此風(fēng)行呢? 

16、在回顧了游戲機(jī)發(fā)展簡(jiǎn)史之后,我們不難悟出,技術(shù)進(jìn)步在游戲機(jī)發(fā)展過(guò)程中起到了極大的促進(jìn)作用。但是,技術(shù)進(jìn)步絕不是游戲機(jī)風(fēng)行的唯一因素。隨著終端設(shè)備開(kāi)發(fā)能力的加強(qiáng),作為娛樂(lè)終端的游戲機(jī)也得到了很大程度的發(fā)展。這也加速了游戲機(jī)在全球風(fēng)行程度,所以對(duì)于游戲機(jī)的研究和設(shè)計(jì)具有很重要的意義,這也是本課題研究的來(lái)源。</p><p>  1.2推箱子游戲發(fā)展現(xiàn)狀</p><p>  本文針對(duì)推箱子游戲機(jī)

17、的設(shè)計(jì)首先介紹了選題的要求,之后詳細(xì)敘述了軟件和硬件的設(shè)計(jì)過(guò)程。最后論文對(duì)設(shè)計(jì)進(jìn)行了總結(jié),對(duì)設(shè)計(jì)中可以進(jìn)一步改善的地方提出了建議。</p><p>  在時(shí)鐘脈沖的作用下,各個(gè)按鍵都能按照事先設(shè)定好的規(guī)則進(jìn)行游戲控制。確定鍵能使界面從初始化顯示切換到游戲界面顯示,上下左右鍵控制箱子的移動(dòng)方向,如果可以移動(dòng)則移動(dòng)方塊同時(shí)跟蹤人物的位置及刷新動(dòng)態(tài)數(shù)組的內(nèi)容。在游戲的同時(shí)程序會(huì)隨時(shí)記錄玩家所走的游戲步數(shù)、游戲時(shí)間,直至

18、本關(guān)通過(guò),在進(jìn)入下一關(guān)的同時(shí)更新地圖并刷新游戲步數(shù)和時(shí)間。選關(guān)鍵用于選擇游戲關(guān)數(shù),在游戲過(guò)程中這個(gè)鍵任何時(shí)候都有效,當(dāng)按下選關(guān)鍵后,游戲地圖返回第一關(guān),再次按下時(shí)游戲進(jìn)入二關(guān),這樣每按下一次鍵游戲關(guān)數(shù)加一,如果游戲到了第最后一關(guān)將自動(dòng)返回第一關(guān)</p><p><b>  1.3設(shè)計(jì)方案</b></p><p>  1.3.1. 模塊劃分</p><

19、;p><b>  本游戲分五個(gè)模塊</b></p><p>  (1)初始化模塊,對(duì)游戲界面進(jìn)行初始化操作,包括界面切換、控制聲音播放和游戲的暫停與恢復(fù),以及手機(jī)返回鍵的設(shè)置。</p><p> ?。?)功能實(shí)現(xiàn)模塊,主要是對(duì)游戲中各個(gè)環(huán)節(jié)進(jìn)行繪制,設(shè)計(jì)出系統(tǒng)地圖,記錄玩家所用步驟,對(duì)玩家觸屏的設(shè)定,針對(duì)不同的手機(jī)分辨率繪制界面,音樂(lè)功能調(diào)用,游戲中所有文字的提

20、示信息以及游戲中背景和文字顏色大小等設(shè)置的實(shí)現(xiàn)。</p><p> ?。?)游戲設(shè)計(jì)模塊,實(shí)現(xiàn)玩家控制小烏龜?shù)牟僮鳎怪軌虿僮飨渥拥礁鱾€(gè)位置,以完成游戲設(shè)定的任務(wù)。</p><p> ?。?)游戲數(shù)據(jù)模塊,主要是對(duì)玩家編輯的自定義地圖和玩家選擇系統(tǒng)設(shè)置狀態(tài)的保存,以及游戲數(shù)據(jù)合理性的判斷。</p><p> ?。?)功能控制模塊,控制游戲功能的實(shí)現(xiàn),包括創(chuàng)建菜單、

21、調(diào)用系統(tǒng)音樂(lè)、獲取當(dāng)前系統(tǒng)狀態(tài)、獲取游戲界面圖標(biāo)等參數(shù)、保存游戲。</p><p>  1.3.2 系統(tǒng)功能結(jié)構(gòu)圖</p><p>  圖1.1系統(tǒng)功能結(jié)構(gòu)圖</p><p>  2、程序設(shè)計(jì)說(shuō)明及代碼</p><p><b>  2.1初始化模塊</b></p><p> ?。?)設(shè)計(jì)游戲所需的

22、一個(gè)簡(jiǎn)單的窗口應(yīng)用程序,程序預(yù)處理部分包括加載頭文件、定義全局變量和定義數(shù)據(jù)結(jié)構(gòu),并對(duì)它們進(jìn)行初始化工作,游戲從第一關(guān)開(kāi)始,按上下左右方向鍵控制小人移動(dòng)來(lái)推動(dòng)箱子,可以在游戲中的任何時(shí)候按Esc鍵退出。如果游戲無(wú)成功希望,可以按空格鍵回到當(dāng)前任務(wù)的開(kāi)始狀態(tài);如果成功完成當(dāng)前關(guān),則進(jìn)入下一關(guān),如果當(dāng)前關(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功能控制模塊(功能實(shí)現(xiàn))&l

51、t;/p><p>  (2)小人移動(dòng)的方向有4個(gè),move()函數(shù)(處理小人移動(dòng)的函數(shù))對(duì)這4個(gè)方向移動(dòng)的處理都一致,只是調(diào)用函數(shù)時(shí)的參數(shù)有所不同。首先判斷小人移動(dòng)的方向,然后根據(jù)小人所處世的當(dāng)前狀態(tài)、下一步狀態(tài)或者下下一步狀態(tài)進(jìn)行適當(dāng)?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>  (3)函數(shù)實(shí)現(xiàn)的功能分別是人空地移動(dòng)箱子到空地、從目的地移動(dòng)箱子到空地、從空地移動(dòng)箱子到目的地和中從目的地移動(dòng)箱子到目的地。X、y

75、指明小人當(dāng)前所處的位置,字符a表示移動(dòng)的方向,有“u”、“d”、“l(fā)”和“r”4個(gè)值,分別表示向上、下、左、右移動(dòng)。這幾個(gè)函數(shù)的實(shí)現(xiàn)原理大致相似。對(duì)于前面兩個(gè)函數(shù),首先判斷移動(dòng)的方向,人小人所在的位置沿著移動(dòng)的方向移動(dòng)一步畫小人,移動(dòng)兩步畫箱子,并設(shè)置狀態(tài)為“b”;對(duì)于后面兩個(gè)參數(shù),首先判斷移動(dòng)的方向,從小人所在的位置沿著移動(dòng)方向移動(dòng)一步畫小人,移動(dòng)兩上在目的地畫箱子,并設(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è)計(jì)模塊</b></p><p>  2.4.1. 數(shù)據(jù)類的設(shè)計(jì)與實(shí)現(xiàn)</p><p>  該類主要用于對(duì)地圖數(shù)據(jù)的保存與提取,在保存時(shí),判斷玩家編輯的

84、地圖是否合理,如果不合理則提示相應(yīng)信息,只有合理的地圖才能保存。在提取地圖信息的時(shí)候也進(jìn)行一次檢查,如果編輯地圖不合理則載入默認(rèn)設(shè)置。關(guān)鍵代碼及說(shuō)明如下:</p><p>  通過(guò)public static boolean exportDataToFile(int[][] editDataArray)方法將地圖數(shù)據(jù)寫入到文件中;通過(guò)public static boolean checkUserFile()檢查用戶

85、編輯數(shù)據(jù)是否合理;通過(guò)public static int[][] importDataFromFile()從文件中讀取數(shù)據(jù)載入地圖。</p><p>  2.4.2設(shè)定數(shù)據(jù)結(jié)構(gòu)</p><p>  例如行列數(shù)必須在15*15之間,玩家繪制地圖時(shí),當(dāng)前所選游標(biāo)實(shí)現(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è)計(jì)方案</p><p>  3.1數(shù)據(jù)流程和功能介紹</p><p>  本設(shè)計(jì)基本實(shí)現(xiàn)了可以在PC平臺(tái)上運(yùn)行的推箱子游戲,本游戲分五個(gè)模塊:1、初始化模塊;2、功能實(shí)現(xiàn)模塊;3、游戲設(shè)計(jì)模塊;4、游戲數(shù)據(jù)模塊;5、功能控制模塊。</p><p>  本游戲是一款益智類游戲,所以操作十分簡(jiǎn)單。游戲中玩家可以用鍵盤的上、下、左、右鍵控制小人的移動(dòng)位置,也

91、可以直接觸摸手機(jī)屏幕完成相應(yīng)操作。游戲規(guī)則也十分簡(jiǎn)單,玩家在一個(gè)有限空間內(nèi),將木箱放到指定的位置。箱子只能推不能拉,而且一次只能推動(dòng)一個(gè)箱子,勝利條件是把所有箱子都推到目的地。</p><p><b>  3.2設(shè)計(jì)目的</b></p><p> ?。?)此次的設(shè)計(jì)是開(kāi)發(fā)一款可在PC平臺(tái)上運(yùn)行的推箱子游戲程序,可流暢運(yùn)行游戲,編輯地圖等</p><

92、p> ?。?)進(jìn)一步學(xué)習(xí)和掌握匯編語(yǔ)言程序的編寫和應(yīng)用的方法,通過(guò)較大規(guī)模程序的編寫,提高編寫匯編語(yǔ)言程序的水平和學(xué)習(xí)程序調(diào)試方法。</p><p><b>  。</b></p><p>  3.3主流程界面設(shè)計(jì)</p><p>  在策劃推箱子游戲時(shí),首要考慮到要設(shè)計(jì)一個(gè)優(yōu)美的游戲界面,操作起來(lái)更加人性化,即玩家可以用鍵盤的上、下、左

93、、右鍵控制小烏龜?shù)囊苿?dòng)位置,也可以直接觸摸手機(jī)屏幕完成相應(yīng)操作。在畫面方面也要更加清新,方便各個(gè)年齡段的玩家使用。我對(duì)這個(gè)游戲的定義是一個(gè)輕量級(jí)的益智游戲,不存在復(fù)雜的情節(jié),做的主要工作為設(shè)計(jì)游戲各關(guān)倉(cāng)庫(kù)的形狀、大小、可通過(guò)區(qū)域、各關(guān)中箱子的初始位置與目的地。當(dāng)然在正式開(kāi)始編寫程序時(shí),需要上網(wǎng)搜集了游戲中要用到的圖片、聲音等,收集一些有用的素材。</p><p>  圖2.1 界面設(shè)計(jì)圖</p>&

94、lt;p><b>  圖2.2數(shù)據(jù)流程圖</b></p><p>  3.4游戲設(shè)計(jì)任務(wù)和功能</p><p>  3.4.1. 基本要求</p><p>  (1)每關(guān)卡箱子數(shù)目不定;</p><p>  (2)主角和箱子只能呆在通道及目標(biāo)位置上移動(dòng),不能穿墻;</p><p> ?。?)

95、主角不能穿過(guò)箱子;</p><p> ?。?)箱子數(shù)量和目標(biāo)位置數(shù)量相等(但每個(gè)箱子并不和唯一的目標(biāo)位置一 一對(duì)應(yīng));</p><p>  (5)主角可以移動(dòng)和推動(dòng)木箱(響應(yīng)鍵盤方向鍵);</p><p> ?。?)主角只能往前推動(dòng)箱子,不能向后或者向側(cè)面拉箱子;</p><p> ?。?)主角不能同時(shí)推動(dòng)兩個(gè)箱子;</p>

96、<p> ?。?)箱子移動(dòng)方向正前方緊挨墻壁,不可推動(dòng);</p><p> ?。?)允許撤銷以及重做游戲步驟;</p><p> ?。?0)將所有箱子推到設(shè)定位置則通過(guò)本關(guān),自動(dòng)進(jìn)入下一關(guān)卡;</p><p> ?。?1)記錄每一關(guān)中玩家的移動(dòng)步數(shù);</p><p>  3.4.2. 地圖編輯器</p><p&g

97、t;  (1)可通過(guò)地圖編輯器生成地圖;</p><p>  (2)地圖由小正方塊拼接組成;</p><p>  (3)地圖中每一格可以是墻、通道、木箱、目標(biāo)位置;</p><p> ?。?)游戲主角所在位置同時(shí)必須是通道或者目標(biāo)位置;</p><p> ?。?)一張地圖中主角數(shù)目有且僅有一個(gè);</p><p> ?。?/p>

98、6)一張地圖中箱子數(shù)目必須與目標(biāo)位置數(shù)目相等;</p><p> ?。?)允許對(duì)正在編輯的地圖清除或者替換某一格中的內(nèi)容;</p><p> ?。?)地圖中一格不允許墻、通道、木箱、目標(biāo)位置中兩個(gè)及以上共存,最 后添加的類型為該格代表的類型;</p><p>  (9)通過(guò)地圖編輯器生成的地圖可以被游戲程序調(diào)用;</p><p>  

99、3.4.3. 擴(kuò)展功能</p><p> ?。?)保存自定義地圖,重啟程序后依然可以編輯和調(diào)用運(yùn)行該地圖;</p><p>  (2)屏幕分辨率自適應(yīng);</p><p> ?。?)資源文件支持簡(jiǎn)體中文和英文;</p><p> ?。?)菜單功能,玩家通過(guò)看目錄按對(duì)應(yīng)的鍵可以進(jìn)入對(duì)應(yīng)的功能菜單,其中1進(jìn)入游戲,2選擇游戲關(guān)卡,3游戲幫助指南 ,

100、4退出游戲。</p><p> ?。?) 游戲功能: 玩家可以通過(guò)操縱鍵盤中的上下左右鍵進(jìn)入游戲進(jìn)行各種操作來(lái)完成游戲。</p><p> ?。?)循環(huán)功能:當(dāng)玩家正在游戲的時(shí)候如果某一步走錯(cuò)了,導(dǎo)致游戲無(wú)法完成,可以隨時(shí)重新開(kāi)始游戲來(lái)完成關(guān)卡,游戲過(guò)程中可以隨時(shí)按Ctrl+V退出游戲。</p><p> ?。?)順序功能: 當(dāng)玩家完成了某一關(guān)之后,隨著進(jìn)入下一關(guān)門

101、可以按順序進(jìn)入下一關(guān),繼續(xù)開(kāi)始更有挑戰(zhàn)的關(guān)卡,如果該關(guān)是最后一關(guān),則顯示通關(guān)完成。</p><p><b>  4.程序調(diào)試﹑記錄</b></p><p>  程序調(diào)試,是將編制的程序投入實(shí)際運(yùn)行前,用手工或編譯程序等方法進(jìn)行測(cè)試,修正語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤的過(guò)程。這是保證游戲正常運(yùn)行的必不可少的步驟。編完計(jì)算機(jī)程序,得調(diào)試所寫程序是否正確,是否能滿足所要求的功能<

102、/p><p>  啟動(dòng)游戲后便可直接進(jìn)入游戲主界面,主界面上玩家可以自由選擇對(duì)游戲的操作。</p><p>  該游戲的運(yùn)行步驟與調(diào)試結(jié)果如下:</p><p>  1. 啟動(dòng)游戲后游戲主界面,效果如圖所示。</p><p><b>  圖3.1游戲啟動(dòng)圖</b></p><p>  2.當(dāng)你完成某一

103、關(guān)卡時(shí),彈出一對(duì)話框,點(diǎn)擊“確定”進(jìn)行下一關(guān)卡,</p><p>  點(diǎn)擊“取消”繼續(xù)該關(guān)卡。</p><p><b>  圖3.2通關(guān)圖</b></p><p>  3. 點(diǎn)擊“←,→”即可進(jìn)入玩家自己已經(jīng)編輯好的游戲中,界面設(shè)計(jì)和系統(tǒng)設(shè)置的關(guān)卡相同,過(guò)關(guān)之后,自動(dòng)進(jìn)入系統(tǒng)設(shè)置的第一關(guān)卡。效果如圖所示。</p><p>

104、;<b>  圖3.3選擇關(guān)卡圖</b></p><p>  4. 點(diǎn)擊“文件”,即可進(jìn)入玩家自行編譯游戲倉(cāng)庫(kù)中。玩家可以在該標(biāo)題欄中選擇關(guān)卡難度或退出該游戲。</p><p>  圖3.4自行編譯關(guān)卡圖</p><p>  5. 點(diǎn)擊“編譯”,即可進(jìn)入玩家自行編譯游戲倉(cāng)庫(kù)中。玩家可以在游戲的格中按照自己的意愿設(shè)計(jì)關(guān)卡(需要符合游戲自身規(guī)定)。

105、該界面共有9個(gè)選項(xiàng)鍵,分別是墻、路、目的地、箱子、小人、鎖定、刪除、保存、返回主菜單,玩家可以通過(guò)對(duì)應(yīng)的數(shù)字按鍵或直接觸控屏幕實(shí)現(xiàn)對(duì)應(yīng)功能。效果如圖所示。</p><p>  圖3.5 選擇功能圖</p><p>  6. 點(diǎn)擊游戲其他位置時(shí),則彈出如下圖所示的對(duì)話框,點(diǎn)擊“確定”恢復(fù)正常。</p><p><b>  圖3.6錯(cuò)誤恢復(fù)圖</b>

106、;</p><p>  7. 點(diǎn)擊“工具欄”,則可以調(diào)試游戲。該界面介紹了關(guān)于本游戲的一些修改方法。效果如圖所示。</p><p><b>  圖3.7調(diào)試游戲圖</b></p><p>  8. 點(diǎn)擊“退出”,則會(huì)退出游戲。</p><p><b>  圖3.8退出游戲圖</b></p>

107、;<p><b>  5.總結(jié)</b></p><p>  一周的匯編語(yǔ)言課程設(shè)計(jì)結(jié)束了,我的收獲很大。通過(guò)課程設(shè)計(jì)的編程和對(duì)編程過(guò)程中遇到的問(wèn)題的思考,有效的提高了我對(duì)匯編的認(rèn)識(shí)和理解,切實(shí)的提高了我的編程能力,補(bǔ)全了我的不足。通過(guò)這次課程設(shè)計(jì),我鞏固了所學(xué)知識(shí),能用匯編語(yǔ)言熟練地運(yùn)用順序、選擇、循環(huán)三大結(jié)構(gòu),進(jìn)一步掌握了各個(gè)指令的功能,特別是轉(zhuǎn)向指令,掌握了子程序的定義及調(diào)

108、用,以及正確地運(yùn)用DEBUG指令。在整個(gè)程序的編寫中,調(diào)試占了很大部分的時(shí)間。要想寫好匯編語(yǔ)言的程序,必須認(rèn)真對(duì)待代碼的每一個(gè)細(xì)節(jié),還必須熟練的掌握debug命令,這對(duì)程序的調(diào)試是非常重要的。通過(guò)這次實(shí)際動(dòng)手能力的培養(yǎng),我進(jìn)一步熟悉了匯編語(yǔ)言的結(jié)構(gòu)和使用方法,基本達(dá)到了能獨(dú)立閱讀、編制和調(diào)試一定規(guī)模的匯編語(yǔ)言程序的水平。</p><p>  本次匯編語(yǔ)言課程設(shè)計(jì)是利用我們平時(shí)所學(xué)的匯編知識(shí)編寫一個(gè)成績(jī)?cè)u(píng)定的小程序

109、,剛拿到題目的時(shí)候還有點(diǎn)擔(dān)憂。由于平時(shí)匯編語(yǔ)言的知識(shí)掌握的并不牢固,并且也沒(méi)有過(guò)像這樣的為期一周的匯編語(yǔ)言實(shí)踐課程。但當(dāng)靜下心來(lái)仔細(xì)把問(wèn)題讀懂和頭腦中有了大致思路的時(shí)候,這種擔(dān)憂就完全消失了。其實(shí)這次課程設(shè)計(jì)并不要求你把書上各種指令及其工能掌握的很好并且能熟練的運(yùn)用匯編語(yǔ)言編程,而恰恰是利用這次課程設(shè)計(jì)的機(jī)會(huì)來(lái)提高這方面的能力。這就是一個(gè)心態(tài)問(wèn)題,看你有沒(méi)有擺正心態(tài),看你有沒(méi)有面對(duì)挫折的勇氣,如果一開(kāi)始就沒(méi)擺正心態(tài),思維就會(huì)堵塞,后面就

110、更無(wú)法做下去了。這次課程設(shè)計(jì)讓我更加懂得以后在面臨困難與挫折的時(shí)候要有平和的心態(tài),要有冷靜的頭腦。</p><p>  通過(guò)本次匯編語(yǔ)言課程設(shè)計(jì),也讓我更加明白實(shí)踐的重要性,如果整天的學(xué)習(xí)課本上的理論知識(shí)而不拿來(lái)用那肯定是很煩的,況且匯編語(yǔ)言這門課本身學(xué)起來(lái)就很煩,尤其是要去理解各種指令的功能,還要學(xué)習(xí)相應(yīng)的硬件知識(shí)。再者,學(xué)習(xí)理論知識(shí)的目的還是要拿來(lái)運(yùn)用,通過(guò)實(shí)踐來(lái)鞏固所學(xué)的理論知識(shí)。并且通過(guò)這次課程設(shè)計(jì)實(shí)踐,

111、讓我一改往日的厭學(xué)情緒,尤其是當(dāng)程序運(yùn)行正確的時(shí)候,那種來(lái)自內(nèi)心的成就感,讓我更加有信心學(xué)好匯編語(yǔ)言了。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]錢曉捷.匯編語(yǔ)言程序設(shè)計(jì).北京:電子工業(yè)出版社,2012.6</p><p>  [2]沈美明、溫冬嬋等.IBM-PC匯編語(yǔ)言程序設(shè)計(jì).北京.清華大學(xué)出版社,2001.

112、8</p><p>  [3] 詹仕華等.匯編語(yǔ)言程序設(shè)計(jì).北京:中國(guó)電力出版社,2008.2 </p><p>  [4]詹仕華等.匯編語(yǔ)言程序設(shè)計(jì)習(xí)題解答及課程實(shí)驗(yàn)、設(shè)計(jì)輔導(dǎo).北京:中國(guó)電力出版社,2008.2 </p><p>  [5]王爽.匯編語(yǔ)言. 北京:清華大學(xué)出版社2003.5</p><p>  [6]曹加恒等編.《新一代匯

113、編語(yǔ)言課程設(shè)計(jì)》. 北京:高等教育出版社,2003.6[7]楊路明等編.《匯編語(yǔ)言程序設(shè)計(jì)》. 長(zhǎng)沙:中南大學(xué)出版社,2005.8</p><p><b>  致 謝</b></p><p>  本設(shè)計(jì)是在**導(dǎo)師教授的悉心指導(dǎo)下完成的,導(dǎo)師淵博的知識(shí),嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,一絲不茍的工作作風(fēng),平易近人的性格都是我學(xué)習(xí)的楷模。在論文的研究及整理期間,導(dǎo)師給了我很大的支

114、持和鼓勵(lì),才使得論文得以順利的完成,在此謹(jǐn)向?qū)煴硎局倚牡母兄x和崇高的敬意。同時(shí)感謝各位隊(duì)友的支持,他們給我們提供了必要的素材,提供了很大的方便,感謝同班同學(xué)的幫助,在作論文期間,他們不僅在學(xué)習(xí)上對(duì)我有很大的幫助,還在生活上提供方便。這一周來(lái),我和他們相處的是非常愉快的。同時(shí)還要感謝外班等同學(xué),他們也給了我很大的支持和幫助。最后,感謝各位評(píng)委能在百忙之中對(duì)我的論文進(jìn)行審察,由于本人知識(shí)有限,不足之處在所難免,還請(qǐng)各位評(píng)委指正。</

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論