[優(yōu)秀畢業(yè)設(shè)計精品] 方塊游戲設(shè)計 微機課程設(shè)計_第1頁
[優(yōu)秀畢業(yè)設(shè)計精品] 方塊游戲設(shè)計 微機課程設(shè)計_第2頁
[優(yōu)秀畢業(yè)設(shè)計精品] 方塊游戲設(shè)計 微機課程設(shè)計_第3頁
[優(yōu)秀畢業(yè)設(shè)計精品] 方塊游戲設(shè)計 微機課程設(shè)計_第4頁
[優(yōu)秀畢業(yè)設(shè)計精品] 方塊游戲設(shè)計 微機課程設(shè)計_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、前 言微機已經(jīng)成為人們生活中必不可少的一部分,掌握微機原理及其相關(guān)知識是我們電類專業(yè)的必備知識。8086 cpu曾是使用最廣泛的16為微處理器,它由執(zhí)行部件和總線接口部件組成。匯編語言是面向機器的程序設(shè)計語言。在匯編語言中,用助記符代替操作碼,用地址編號代替地址碼。匯編語言用比機器語言易于讀寫、調(diào)試和修改,同時具有機器語言的全部優(yōu)點。匯編語言用來編制系統(tǒng)軟件和過程軟件,其目標(biāo)程序占用內(nèi)存少,運行速度快,有著高級語言不可代替的用途。通過學(xué)習(xí)和使用匯編語言,能夠感知、體會、理解機器的邏輯功能,向上為理解各種軟件系統(tǒng)的理解,打下結(jié)束理論基礎(chǔ);向下為掌握硬件系統(tǒng)的原理,打下實踐應(yīng)用基礎(chǔ) 。 本次課程設(shè)

2、計題目是方塊游戲設(shè)計,其中很多涉及到dos調(diào)用的相關(guān)知識。dos功能調(diào)用通過軟件中斷調(diào)用的,在中斷調(diào)用前需要把功能號裝入ah寄存器中,把子功能號裝入到al中,除此之外,還需要在cpu的寄存器中提供專門的調(diào)用參數(shù)。調(diào)用之前,首先將調(diào)用參數(shù)裝入指定的寄存器,然后把功能號裝入ah中。按中斷號調(diào)用dos,檢查返回參數(shù)是否正確。 課程設(shè)計任務(wù)書 題 目: 方塊游戲軟件設(shè)計 初始條件:帶有編輯器、匯編程序、連接程序和調(diào)試程序的電腦一臺。要求完成的主要任務(wù): (包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)采用匯編語言設(shè)計一個方塊游戲軟件,實現(xiàn)將從屏幕上方下落的方塊用鍵盤控制移動,按下某鍵停止。

3、按q退出程序。(1) 設(shè)計任務(wù)及要求分析(2) 方案比較及認(rèn)證說明(3) 系統(tǒng)原理闡述(4) 軟件設(shè)計課題需要說明:軟件思想,流程圖,源程序及程序注釋(5) 調(diào)試記錄及結(jié)果分析(6) 總結(jié)(7) 參考資料(8) 附錄:芯片資料或程序清單,軟件演示屏幕拷貝圖或硬件實物圖時間安排:1月10日1月12日:收集資料,方案選擇1月13日1月16日:整體流程,程序細(xì)節(jié)1月17日1月20日:調(diào)試程序,報告撰寫1月21日: 交設(shè)計報告,程序演示,答辯 指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 目 錄1 課設(shè)任務(wù)及要求分析41.1問題描述41.2任務(wù)目標(biāo)41.3需求規(guī)定42 方案比較及認(rèn)證4

4、3 系統(tǒng)原理闡釋54.軟件設(shè)計54.1軟件思想54.2源程序及注釋95 調(diào)試記錄及結(jié)果分析96設(shè)計心得127 參考文獻12附錄一:源程序及注釋13附錄二 本科生課程設(shè)計成績評定表49方塊游戲設(shè)計1 課設(shè)任務(wù)及要求分析1.1問題描述 在windows環(huán)境下寫一個程序,能夠提供簡單的用戶圖形界面,啟動程序后進入該界面,用戶界面由一定數(shù)量的小方格組成的方塊構(gòu)成。當(dāng)游戲開始時,計算機將隨機抽取方塊的放到方格上。此游戲允許玩家旋轉(zhuǎn)方塊,左右移動,加速向下,滿行消除并計分。1.2任務(wù)目標(biāo)1在windows環(huán)境下建立一個簡單的用戶界面,顯示重新游戲、暫停、退出等鍵2游戲開始后,通過指定的功能鍵控制方塊,方塊

5、可以左右移動、落下、旋轉(zhuǎn)。3界面上要顯示分?jǐn)?shù)和游戲的難度,還要預(yù)先顯示下一個方塊。1.3需求規(guī)定表1 產(chǎn)品功能需求表功能1. 隨機產(chǎn)生經(jīng)典俄羅斯方塊圖形2. 設(shè)置難度級別,不同級別速度不同3. 方向鍵實現(xiàn)下落圖形的左移、右移、加速下落、變形等基本操作4. 正確判斷游戲結(jié)束5. 對游戲成績進行記分2 方案比較及認(rèn)證 方案一:直接在界面上顯示功能性控制鍵。 方案二:在菜單欄中顯示控制游戲的功能性鍵,并且能夠自定義背景顏色和游戲音樂。 方案比較:第一種方案簡潔。第二種方案體現(xiàn)游戲的個性化,顯示菜單欄很經(jīng)典,但實現(xiàn)起來比較復(fù)雜。 結(jié)論:由于第一種方案比較簡潔,能夠完成設(shè)計的功能要求,且比較容易實現(xiàn),相

6、對第二種方案的復(fù)雜,故選擇方案一。3 系統(tǒng)原理闡釋對俄羅斯方塊游戲項目計劃劃分為三個模塊,分別為初始化設(shè)置和窗口函數(shù)相關(guān)模塊、繪制方塊模塊、方塊移動模塊。其中繪制方塊模塊、方塊移動下落模塊是先決條件。在該模塊完成的基礎(chǔ)上,初始化設(shè)置和窗口函數(shù)相關(guān)模塊才能得以實現(xiàn)。編寫一個主程序和相關(guān)的子程序和宏定義,通過主程序調(diào)用控制不同功能能的子程序來實現(xiàn)游戲的運行。定義一些宏,包括printstring(顯示字符串)、string(在光標(biāo)位置顯示字符及其屬性)、clrscr(清屏)、closecur(不顯示光標(biāo))、gotoxy(設(shè)置光標(biāo)位子)、clrkey(清除鍵盤緩沖區(qū)、,并調(diào)用一種鍵盤屬性)、push

7、all(進棧保護現(xiàn)場)、popall(出?;謴?fù)現(xiàn)場)、block(在光標(biāo)位置顯示2次0dbh,屬性為attr)、 cprintf(在光標(biāo)位置顯示ch)、 random(定義隨機函數(shù),隨機產(chǎn)生磚塊)、printscore(顯示分?jǐn)?shù))。然后在做一些初始化定義。定義數(shù)據(jù)段,先定義方塊的形狀和一些標(biāo)志性變量,在定義一些顯示信息和音樂。定義堆棧段,開辟了100字的空間。定義代碼段,先清屏,對屏幕進行初始化設(shè)計,然后根據(jù)游戲的功能調(diào)用相應(yīng)的功能性子程序,使游戲能夠按所要求的順序運行。在調(diào)用子程序時注意相關(guān)寄存器先要進入堆棧進行保護,然后在子程序調(diào)用完之后出棧恢復(fù)斷點。相應(yīng)的功能鍵為:q/q(退出游戲),e

8、nd(暫停),home(重新游戲),(方塊旋轉(zhuǎn)),(方塊加速下落),(方塊左移),(方塊右移)。4.軟件設(shè)計4.1軟件思想主程序完成code與代碼段聯(lián)系, data與數(shù)據(jù)段聯(lián)系, data與拓展段聯(lián)系, stack與堆棧段聯(lián)系。然后清屏,不顯示光標(biāo)。最后通過調(diào)用一些子函數(shù)和宏來實現(xiàn)游戲的功能。在主程序中,調(diào)用的宏包括clrscr(清屏)、closecur(不顯示光標(biāo))、clrkey(清除鍵盤緩沖區(qū),并調(diào)用一種鍵盤屬性),調(diào)用的子程序包括game_screen (調(diào)用游戲屏)、new_game(游戲初始化)、score(計分)、moveable(判斷能否移動,產(chǎn)生移動標(biāo)志mable)、brick

9、_reach_bottom(磚塊到底之后執(zhí)行的操作)、music(音樂)。通過順序、判斷、循環(huán)三種基本結(jié)構(gòu)和子程序與宏來實現(xiàn)程序的正常運行。其中有的子程序包含更小的子程序和宏。在程序運行中,會頻繁的調(diào)用一些中斷,常用的中斷號有10h(顯示器i/o調(diào)用),16h(鍵盤i/o調(diào)用),1ah(時間調(diào)用),21h(寫輸入中斷)。調(diào)用方法如下:16h中斷調(diào)用有三個功能,功能號為02。(1)ah=0 本功能為從鍵盤讀字符到al寄存器中。(2)ah=1 本功能為讀鍵盤緩沖區(qū)字符到al寄存器中,并置zf標(biāo)志位。(3)ah=2 本功能為讀取特殊功能鍵的狀態(tài)。1ah中斷調(diào)用有二個功能。功能號為0和1。(1)ah=

10、0 本功能為讀取時鐘計數(shù)器的當(dāng)前值。(2)ah=1 本功能為設(shè)置時鐘計數(shù)器的當(dāng)前值。10h中斷調(diào)用共有16個功能。功能號為015。(1)設(shè)置顯示方式(0號功能)入口參數(shù):ah=0(功能號),al=設(shè)置方式(07)。出口參數(shù):無。(2)設(shè)置光標(biāo)類型(1號功能)入口參數(shù):ah=1(功能號),ch=光標(biāo)開始行,cl=光標(biāo)結(jié)束行。出口參數(shù):無。根據(jù)cx給出光標(biāo)的大小。(3)設(shè)置光標(biāo)位置(2號功能) 入口參數(shù):ah=2(功能號),bh=頁號,dh=行號,dl=列號。 出口參數(shù):無。根據(jù)dx確定了光標(biāo)位置。(4)讀當(dāng)前光標(biāo)位置(3號功能)入口參數(shù);ah=3(功能號),bh=頁號。出口參數(shù):dh=行號,dl

11、=列號,cx=光標(biāo)大小。(5)初始窗口或向上滾動(6號功能)入口參列號。bh=空白行的屬性。出口參數(shù):無。當(dāng)滾動后,底部為空白輸入行。(6)初始窗口或向下滾動(7號功能)入口參數(shù):ah=7,al=下滾行數(shù),cx=下滾窗口左上角的行、列號。dx=下滾窗口右下角的行、列號。bh=空白行的屬性。出口參數(shù):無。當(dāng)滾動后,頂部為空白輸入行。(7)讀當(dāng)前光標(biāo)位置的字符與屬性(8號功能)入口參數(shù):ah=08h,bh=頁號。出口參數(shù):al為讀出的字符,ah為字符屬性。(8)在當(dāng)前光標(biāo)位置寫字符和屬性(9號功能)入口參數(shù):ah=9,bh=頁號,al=字符的ascii碼,bl=字符屬性,cx=寫入字符數(shù)。出口參數(shù)

12、:無。(9)在當(dāng)前光標(biāo)位置寫字符(10號功能)入口參數(shù):ah=0ah,bh=頁號,al=字符的ascii碼,cx=寫入字符數(shù)。出口參數(shù):無。(10)設(shè)置彩色組或背景顏色(11號功能)入口參數(shù):ah=0bh,bh=0或1,bh為0時,設(shè)置背景顏色。當(dāng)bh=1時 ,可設(shè)置彩色組,即為顯示的像素點確定顏色組。出口參數(shù):無。背顏色與對應(yīng)值見表1.8。(11)寫像素(12號功能)入口參數(shù):ah=0ch,dx=行數(shù),cx=列數(shù),al=彩色值(al的d7為1,則彩色值與當(dāng)前點內(nèi)容作異或運算)。出口參數(shù):無。(12)讀像素(13號功能)入口參數(shù):ah=0dh,dx=行數(shù),cx=列數(shù)。出口參數(shù):al=彩色值。(

13、13)寫字符并移光標(biāo)位置(14號功能)入口參數(shù):ah=0eh,al=寫入字符,bh=頁號,bl=前景顏色(圖形方式)。出口參數(shù):無。主程序的流程如圖1所示讀控制鍵noyesno結(jié)束游戲初始化分?jǐn)?shù)初始化產(chǎn)生磚塊是否到底磚塊到底后的操作計分游戲是否結(jié)束調(diào)用音樂是否重新開始暫停返回dos調(diào)用游戲屏幕不顯示光標(biāo)清屏開始移動磚塊方向鍵yesnoyesnoq/qhome下落endyesnoyesnoyes 圖1 程序框圖4.2源程序及注釋見附錄一5 調(diào)試記錄及結(jié)果分析 調(diào)試中通過單步運行方式來觀察程序的走向,開是否是按設(shè)想的方向運行,若不是則,分析問題,修改源程序,使之符合。程序運行結(jié)果如下 圖2游戲開始

14、 圖3 方塊左移 圖4 方塊右移 圖5 方塊旋轉(zhuǎn) 圖6 游戲結(jié)束程序運行中能夠?qū)崿F(xiàn)設(shè)計所要求的功能,所以此設(shè)計比較成功。6設(shè)計心得微機原理課程設(shè)計結(jié)束了,我的收獲很大。通過課程設(shè)計的編程和對編程過程中遇到的問題的思考,有效的提高了我對匯編的認(rèn)識和理解,切實的提高了我的編程能力,補全了我的不足。通過這次課程設(shè)計,我鞏固所了學(xué)過的知識,能用匯編語言熟練地運用順序、選擇、循環(huán)三大結(jié)構(gòu),進一步掌握了各個指令的功能。此外,我對bios調(diào)用和dos調(diào)用有了更深刻的認(rèn)識。我嘗試的編寫了俄羅斯方塊游戲,這對于我們來說是個挺大的困難,但我們克服了,我最終完成了程序,實現(xiàn)了所有的功能,我很自豪。在整個程序的編寫中

15、,調(diào)試占了很大部分的時間。我認(rèn)為要想寫好匯編語言的程序,必須認(rèn)真對待代碼的每一個細(xì)節(jié),還必須熟練的掌握編譯和執(zhí)行的過程,這對程序的調(diào)試是非常重要的。通過這次實際動手能力的培養(yǎng),我進一步熟悉了匯編語言的結(jié)構(gòu)和使用方法,基本達到了能獨立閱讀、編制和調(diào)試一定規(guī)模的匯編語言程序的水平。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不

16、足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固。這次課程設(shè)計終于順利完成了,在設(shè)計中遇到了很多專業(yè)知識問題,最后在老師的辛勤指導(dǎo)下,終于游逆而解。同時,在老師的身上我們學(xué)也到很多實用的知識,在次我們表示感謝!同時,對給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝!7 參考文獻1周佩玲等.微機原理與接口技術(shù)(第二版).北京:電子工業(yè)出版社,20082劉樂善.微型計算機接口技術(shù)及應(yīng)用.武漢:華中科技大學(xué)出版社,20003姚燕南.微型計算機原理與接口技術(shù).北京:高等教育出版社,2004附錄一:源程序及注釋;*宏定義*printstring macro x,y,mess ;less b

17、l,cx ;*顯示字符串*push bpmov dh,ymov dl,xmov bh,0lea bp,messmov al,1mov ah,13hint 10hpop bpendmstring macro ch,len ;*在光標(biāo)位置顯示字符及其屬性*mov bh,0mov al,chmov cx,lenmov ah,9int 10hendmclrscr macro ;*清屏*mov ah,6mov bh,7mov cx,0mov dh,24mov dl,69int 10h endmclosecur macro ;*不顯示光標(biāo)*mov ah,1mov ch,20hint 10hendmgoto

18、xy macro x,y ;*設(shè)置光標(biāo)位子*mov dh,ymov dl,xmov bh,0mov ah,2int 10hendmclrkey macro ;*清除鍵盤緩沖區(qū),并調(diào)用一種鍵盤屬性*mov ah,0chint 21hendmpushall macro ;*進棧保護現(xiàn)場*push axpush bxpush cxpush dxendmpopall macro ;*出?;謴?fù)現(xiàn)場*pop dxpop cxpop bxpop axendmblock macro attr ;*在光標(biāo)位置顯示2次0dbh,屬性為attrpush cxmov ah,9mov al,0dbhmov bl,att

19、rmov cx,2int 10hpop cxendmcprintf macro ch ;*在光標(biāo)位置顯示ch*mov ah,9mov al,chmov cx,1int 10hendmrandom macro ;*定義隨機函數(shù),隨機產(chǎn)生磚塊 mov ah,0 int 1ahmov al,dlmov cl,7div clmov al,ahcbwendmprintscore macro x,y,scro ;*顯示分?jǐn)?shù)*push bxgotoxy x,ypop bxmov bx,scromov cx,10000dcall dec_divpush bxgotoxy x+1,ypop bxmov cx,1

20、000call dec_divpush bxgotoxy x+2,ypop bxmov cx,100call dec_divpush bxgotoxy x+3,ypop bxmov cx,10call dec_divpush bxgotoxy x+4,ypop bxmov cx,1call dec_divendm;*初始化定義*left equ 4b00hright equ 4d00hup equ 4800hdown equ 5000hhome equ 4700henda equ 4f00hempty equ 0brick equ 1wall equ 2move_down equ 0 ;磚塊下

21、移move_left equ 1 ;磚塊左移move_right equ 2 ;磚右移塊revolve equ 3 ;磚塊旋轉(zhuǎn)yes equ 1no equ 0;get equ 0;put equ 1;cal equ 2background equ 5 ;背景顏色bar_attr equ 6ah ;邊框顏色board_width equ 12 ;10 ;游戲方框?qū)挾萣oard_height equ 18 ;游方框戲高度board_left equ 16 ;游戲方框左邊位子board_top equ 3 ;游戲方框上邊位子board_attr equ 7eh ;游戲方框邊框顏色board_bac

22、k equ 7score_left equ 49 ;計分方框左邊位子score_top equ 11 ;計分方框上邊位子score_width equ 14 ;計分方框?qū)挾萻core_height equ 10 ;計分方框高度score_attr equ 46 ;計分方框邊框顏色score1 equ 1score2 equ 100next_left equ 49 ;next方框左邊位子next_top equ 2 ;next方框上邊位子next_width equ 14 ;next方框?qū)挾萵ext_height equ 6 ;next方框高度next_attr equ 7eh ;next方框邊

23、框顏色data segment;*定義磚塊*brick_set db 1,1,1,1,0,0 ;*正七* db 1,1,1,0,1,0 ;*丁子形* db 1,1,1,0,0,1 ;*反七* db 1,1,0,0,1,1 ;*正二* db 0,1,1,1,1,0 ;*反二* db 1,1,0,1,1,0 ;*方塊*array db (board_height+2)*(board_width+2) dup(0) row_down_offset db board_height dup(?)xp db ?yp db ?brick_no dw ? ;磚塊號down_speed dw ? ;下落速度ti

24、cket dw ?time_set dw ?down_offset db ? ;能消去的行數(shù)gover db ? ;游戲結(jié)束標(biāo)志over dw ?next_brick_no dw ? ;下一個磚塊號next_set dw 2reach_bottom dw nokey dw ? ;輸入的控制鍵current_score dw 0high_score dw 0level dw 200i db 0j db 0t dw 0x1 db 0x2 db 0x3 db 0x4 db 0y db 0mable dw ? ;磚塊是否能移動標(biāo)志mess1 db 0b3h, russian brick game ,0

25、b3hmess2 db help ,0b3h, q: exit game home: new game end: pause up: rotatemess3 db 0b3h,0b1h,0b1hmess4 db 0b1h,0b0hmess5 db 0b2h,0b1h,0b0hmess6 db 0b0h,0b1h,0b0hmess7 db high score:mess8 db speed:mess9 db score:mess10 db next brick:mess11 db try again?(y/n)mess12 db 0;*聲音*mus_freq dw 330,294,262,294,

26、3 dup(330) dw 3 dup(294),330,392,392 dw 330,294,262,294,4 dup(330) dw 294,294,330,294,262,-1mus_time dw 6 dup(25),50 dw 2 dup (25,25,50) dw 12 dup(25),100data ends;*堆棧段定義*stack segmentdw 100 dup(?) ;*初始化* tos label word stack ends;*代碼段*code segmentmain proc farassume cs:code,ds:data,es:data,ss:stack

27、start:mov ax,datamov ds,axmov es,axmov ax,stackmov ss,axmov sp,offset tosclrscr ;清屏closecur ;不顯示光標(biāo)mov al,1ch ;取中斷向量mov ah,35hint 21hpush espush bxpush ds ;設(shè)置中斷向量mov dx,offset new_intmov ax,seg new_intmov ds,axmov al,1chmov ah,25hint 21hpop ds while1:call game_screen ;調(diào)用游戲屏幕call new_game ;游戲初始化call s

28、core ;分?jǐn)?shù)初始化 do:call generate ;產(chǎn)生磚塊mov over,1mov reach_bottom,nowhile2:cmp over,1 jne rb0cmp reach_bottom,yes ;判斷是否到底je rb0 ;若到底,則跳至rb0jmp rb1 ;若沒到底,則跳至rb1rb0: jmp rbrb1:mov ah,1 ;*從鍵盤讀字符*int 16hjz key0mov ah,0int 16hmov key,ax ;將從鍵盤輸入的字符賦給keyjmp clkkey0:mov key,0 ;將key置0clk:clrkey ;*清除鍵盤緩沖區(qū),并調(diào)用一種鍵盤屬

29、性*switch: mov ax,key cmp al,q ;按q或者q鍵退出 je exit50 cmp al,q je exit50 cmp ax,homeje hom ;重新游戲cmp key,endaje en ;暫停游戲cmp ax,left ;判斷是否按下向左功能鍵je movleft ;磚塊左移cmp ax,right ;判斷是否按下向右功能鍵je movr ;磚塊右移cmp ax,down ;判斷是否按下向下功能鍵je movd ;磚塊下移cmp ax,up ;判斷是否按下旋轉(zhuǎn)功能鍵je revo ;磚塊旋轉(zhuǎn)mov ax,move_downpush axcall moveabl

30、e ;*判斷能否移動,產(chǎn)生移動標(biāo)志mable*mov ax,1sub ax,mablemov reach_bottom,axjmp tmexit50: jmp exit5revo: jmp movrevolvemovr: jmp movrightmovd: jmp movdownhom: ;按下home鍵mov cx,mess12-mess11 mov bl,74hprintstring board_left+6,board_top+3,mess11 ;顯示try again?(y/n)字符串mov ah,0int 16hcmp al,nje exit50call new_gamemov re

31、ach_bottom,yesmov current_score,0jmp while2en: ;按下end鍵mov ah,0int 16hmov time_set,8while20:jmp while2;*磚塊移動控制*movleft:mov ax,move_leftpush axcall moveable ;*判斷能否移動,產(chǎn)生移動標(biāo)志mable*cmp mable,yes jne while20mov ax,move_leftpush axcall movejmp while2movright: mov ax,move_rightpush axcall moveable ;*判斷能否移動,

32、產(chǎn)生移動標(biāo)志mable*cmp mable,yesjne while20mov ax,move_rightpush axcall movejmp while2movdown: mov ax,move_down push axcall moveable ;*判斷能否移動,產(chǎn)生移動標(biāo)志mable*cmp mable,yesjne rbmov ax,move_downpush axcall movejmp while2movrevolve: mov ax,revolvepush axcall moveable ;*判斷能否移動,產(chǎn)生移動標(biāo)志mable*cmp mable,yesjne while20

33、mov ax,revolvepush axcall movejmp while2tm: ;判斷磚塊是否到底cmp reach_bottom,1je rbf1:mov ah,1int 16hjnz f2mov ax,10sub ax,down_speedcmp time_set,axja f2cmp time_set,axjb f1mov ax,move_downpush axcall movemov time_set,0jmp while2f2: mov ax,10sub ax,down_speedcmp time_set,axjb whmov over,0 wh:jmp while2rb:

34、call brick_reach_bottom ;*磚塊到底之后執(zhí)行的操作* call score ;調(diào)用計分框子程序call game_over ;調(diào)用game_over子程序cmp gover,1 ;判斷游戲是否結(jié)束je renew ;若結(jié)束,跳至renewjmp do ;若沒結(jié)束,跳至dorenew: call musicjmp homexit5:pop dxpop dsmov al,1chmov ah,25hint 21hclrscr;opencurmov ah,4chint 21h retmain endp;*顯示下一塊*show_next proc nearpush bpmov b

35、p,sppush axpush bxpush cxpush dxcmp word ptr bp+6,6 ;*判斷是否為第六塊磚*jae stick ;是則跳到stick,畫出長條,否則直接調(diào)用磚塊*mov ch,0cl0:mov cl,0judge:mov al,3mul chadd al,clcbwmov bx,bp+6xchg ax,bxmov dl,6mul dladd bx,axcmp brick_setbx,0je cl1mov al,clshl al,1add al,next_left+5mov ah,chadd ah,next_topadd ah,4gotoxy al,ahmov

36、 bx,bp+4block blcl1:inc clcmp cl,3jb judgeinc chcmp ch,2jb cl0jmp exitstick:mov cl,0cir:mov al,clshl al,1add al,next_left+4gotoxy al,next_top+4mov bx,bp+4block blinc clcmp cl,4jb cirexit:pop dxpop cxpop bxpop axpop bpret 4show_next endp;*顯示背景*disp_ground proc nearpush axpush bxpush cxpush dxgotoxy 0

37、,0mov ah,09hmov bh,0mov bl,bar_attrmov al, mov cx,80int 10hmov ah,13hmov dh,0mov dl,24mov cx,mess2-mess1mov bh,0mov al,0mov bl,bar_attrlea bp,mess1int 10hmov dl,0dhmov ah,2int 21hmov dl,0ahint 21hmov i,1j0:mov j,0three:mov dh,imov al,3mul jmov dl,almov cx,mess4-mess3mov bh,0mov al,1mov bl,background

38、lea bp,mess3mov ah,13hint 10hinc jcmp j,27jb threeinc icmp i,24jb j0gotoxy 0,24mov ah,9mov bh,0mov bl,bar_attrmov al, mov cx,80int 10hmov ah,13hmov dh,24mov dl,1mov cx,mess3-mess2mov bh,0mov al,0mov bl,bar_attrlea bp,mess2int 10hpop dxpop cxpop bxpop axretdisp_ground endp;*顯示框架*disp_box proc nearpus

39、h bpmov bp,sppushallmov bx,bp+4mov dx,bp+12mov ax,bp+10mov dh,almov x1,dlpush dxinc dlmov x2,dlmov ax,bp+8mov t,axadd dl,almov x3,dlinc dlmov x4,dlmov y,dhpop dxmov bh,0mov ah,2int 10hcprintf 0c9hgotoxy x2,ystring 0cdh,tgotoxy x3,ycprintf 0bbhmov cx,bp+6body:push cxinc ygotoxy x1,ymov bx,bp+4cprintf

40、 0bahgotoxy x2,ystring ,tgotoxy x3,ycprintf 0bahpop cxloop bodyinc ymov bx,bp+4gotoxy x1,ycprintf 0c8hgotoxy x2,ystring 0cdh,tgotoxy x3,ycprintf 0bchexit0:popallpop bpret 10disp_box endp;*游戲運行屏幕*game_screen proc nearpushallmov ax,datamov ds,axmov es,axcall disp_ground ;*調(diào)用disp_ground顯示游戲運行時背景* ;*此段功

41、能為保存游戲運行框架的各個參數(shù)*mov ax,board_left push axmov ax,board_toppush axmov ax,board_width*2push axmov ax,board_heightpush axmov ax,7eh;board_attrpush axcall disp_box ;*調(diào)用參數(shù)使游戲框架顯示出來* ;此段功能為保存分?jǐn)?shù)框架各個參數(shù)*mov ax,score_leftpush axmov ax,score_toppush axmov ax,score_widthpush axmov ax,score_heightpush axmov ax,sc

42、ore_attrpush axcall disp_box ;*調(diào)用參數(shù)使分?jǐn)?shù)框架顯示出來* ;此段功能為保存顯示下一塊框架的各個參數(shù)*mov ax,next_leftpush axmov ax,next_toppush axmov ax,next_widthpush axmov ax,next_heightpush axmov ax,next_attrpush axcall disp_box ;*調(diào)用參數(shù)使顯示下一塊的框架顯示出來*mov bl,score_attrmov cx,mess8-mess7printstring score_left+2,score_top+1,mess7 ;在光標(biāo)

43、位置顯示字符串high scoremov cx,mess9-mess8printstring score_left+2,score_top+3,mess8 ;在光標(biāo)位置顯示字符串speedmov cx,mess10-mess9printstring score_left+2,score_top+5,mess9 ;在光標(biāo)位置顯示字符串scoremov bl,next_attrmov cx,mess11-mess10printstring next_left+2,next_top+1,mess10popallretgame_screen endp;*畫磚畫墻子函數(shù)*draw proc nearpu

44、sh bpmov bp,sppushallmov bx,bp+4 ;bp+4保存的是磚塊號加8后的顏色屬性* mov al,board_attr ;墻壁顏色屬性*and al,0f0h ;al為70hor bl,al ;轉(zhuǎn)化為顯示磚塊顏色,即使磚塊色與背景色不同mov si,bx cmp word ptr bp+6,brick je drawbrick ;*調(diào)用畫磚函數(shù)*;*畫墻* drawwall:mov i,0jsd:mov j,0g0: ;此段功能為從屏幕左上角至屏幕右下角mov ax,0mov al,2 mul jadd al,board_left+1mov cl,iadd cl,board_top+1gotoxy al,clmov ax,board_width+2mul iadd al,jmov bx,axmov di,bxmov cx,bp+6cmp arraybx,wall jb nextblock arraybxmov bx,dinext:cmp arraybx,emptyjne j1mov bx,sistring ,2j1:inc jcmp j,board_widthjb

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論