匯編貪吃蛇課程設(shè)計附源碼(共38頁)_第1頁
匯編貪吃蛇課程設(shè)計附源碼(共38頁)_第2頁
匯編貪吃蛇課程設(shè)計附源碼(共38頁)_第3頁
匯編貪吃蛇課程設(shè)計附源碼(共38頁)_第4頁
匯編貪吃蛇課程設(shè)計附源碼(共38頁)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上目錄1程序簡介貪吃蛇游戲是一個經(jīng)典小游戲,在封閉的圍墻里面,通過鍵盤的上下左右控制蛇的方向,尋找隨機(jī)出現(xiàn)的食物。蛇頭撞到食物,則食物被吃掉,蛇身體長度+1,同時記100分,蛇的身子越吃越長,身子越長玩的難度就越大,如果蛇在移動中撞到墻或身體交叉蛇頭撞倒自己身體游戲結(jié)束。2程序設(shè)計2.1程序分析程序初始化:加載在數(shù)據(jù)段定義好相關(guān)的提示信息以及儲存蛇身的數(shù)組,主要是如何開始游戲的提示信息蛇的移動:程序的關(guān)鍵是表示蛇的圖形以及蛇的移動。一開始用4個小矩形表示蛇的身體,每吃一個食物,身體增加一個矩形,移動時必須從蛇頭開始,所以蛇不能向相反方向移動,蛇頭的前進(jìn)方向也就是蛇的方向

2、,蛇尾不能改作蛇頭。設(shè)置一個等待時間,如果不按任何按鍵,蛇在當(dāng)前方向上前進(jìn)。按了有效的方向鍵后,先確定蛇頭的位置然后蛇身體隨著蛇頭移動,圖形的實現(xiàn)是從蛇頭的新位置開始畫出蛇,這時由于沒有清屏的原因,原來蛇的位置和新蛇的位置相差一個單位,所以看起來蛇會多一節(jié)身體。食物的產(chǎn)生:通過一系列運算產(chǎn)生在要求范圍內(nèi)的的隨機(jī)數(shù),此時的隨機(jī)數(shù)便是隨即點,可以通過產(chǎn)生的隨即點的坐標(biāo)畫出隨即點,也就是食物了。蛇吃食物: 蛇頭的位置可以與隨即點的位置坐標(biāo)判斷,如果此時兩點的坐標(biāo)是相同的,那么該食物被蛇吃掉,蛇的長度+1。判斷游戲結(jié)束的條件: 當(dāng)蛇的頭部位置坐標(biāo)與邊界坐標(biāo)重合或者蛇頭的位置與自身相重合,游戲結(jié)束 暫停

3、: 游戲過程中,按空格鍵可以使游戲暫停,在按空格鍵進(jìn)入被暫停的游戲2.2游戲流程 由程序分析知,該游戲是用方向鍵實現(xiàn)貪吃蛇的移動,游戲大概流程分為:游戲初始化(描繪圍墻、蛇體、食物等及其顏色),游戲過程(通過四個方向鍵控制蛇頭帶動身體移動),游戲結(jié)束(顯示總分并判斷是否重新游戲)。2.3程序流程圖 2.4數(shù)據(jù)定義及重要函數(shù) 數(shù)據(jù)定義及鍵盤掃描碼 數(shù)據(jù)定義: Len db ? ;蛇的長度Body dw 200 dup(0) ;蛇的身體位置Direction dw 256Score db 'Score00000' ;得分snake_color db 0ah ;蛇顏色food_col

4、or db 0ch ;食物色speed db 0 ;速度gameover db 0 ;游戲結(jié)束標(biāo)記Point db 0 ;得分?jǐn)?shù)foodX dw ? ;食物坐標(biāo)foodY dw ?seed dw 2 ;隨即數(shù)種子 鍵盤掃描碼:LEFT EQU 4BhRIGHT EQU 4DhUP EQU 48hDOWN EQU 50hQUIT EQU 01hSPACE EQU 39h main函數(shù) 主函數(shù)首先加載定義好的數(shù)據(jù),設(shè)置圖形模式大小,調(diào)用顯示開始提示信息的函數(shù),中斷等待用戶按鍵輸入,判斷退出或開始游戲。進(jìn)入游戲,重新設(shè)置圖形模式,調(diào)用rec,clear_area,getfood,run_sanke函

5、數(shù)分別打印邊框,初始化蛇,隨機(jī)食物,開始運動蛇。當(dāng)蛇死亡時,中斷,等待用戶輸入,根據(jù)用戶的輸入繼續(xù)游戲或退出程序。 main proc farmov ax , datamov ds , axstart:mov ah , 00mov al , 12hint 10h ;設(shè)置圖形模式640*480call show_start_msg ;顯示開始提示信息call show_titlemov ah , 00hint 16h ;等待按鍵cmp ah , QUIT jz dos ;ESC則退出,否則進(jìn)入游戲game_start:mov ah , 00 ;設(shè)置圖形模式320*200,游戲在此模式下運行mov

6、 al , 13hint 10h mov cl , 7 ;邊框顏色mov si , 59mov bx , 19Init_snake ;初始化蛇call getfood ;得到第一個食物call run_snake ;開始運動蛇mov dx , 1010h ;設(shè)置光標(biāo)call SetGb ;設(shè)置光標(biāo)位置mov bl , white ;顯示死亡信息lea bp , msg3mov cx , 13call Msg ;顯示字符串mov dx , 1605hmov bl , white ;顯示提示信息lea bp , msg5mov cx , 29call Msgexit_loop:mov ah , 0

7、0hint 16h ;等待按鍵cmp ah , QUITjz startcmp ah , SPACEjz game_startjmp exit_loop ;返回開始dos:mov ah , 00mov al , 03int 10h ;設(shè)置文本模式mov ah , 4chint 21h ;退出到DOSmain endp Run_snake函數(shù) 蛇一開始默認(rèn)向右運動,當(dāng)按下空格鍵時游戲暫停,再按空格鍵游戲開始。用INT 10H的1號功能檢測是否有按鍵輸入,改變蛇頭前進(jìn)的方向,沒有保持當(dāng)前的前進(jìn)方向。在蛇運動過程中,不斷檢查是否撞墻或蛇頭觸碰到蛇身,如果是,跳轉(zhuǎn)到stop,提示重新或退出。

8、當(dāng)檢查到食物坐標(biāo)和蛇頭坐標(biāo)一致時,食物被吃,蛇身長度+1,保存當(dāng)前前進(jìn)方向。run_snake procpush axpush bxpush cxpush dxpush sipush dimov dx, 0005hcall SetGbmov bl,whitelea bp,msg6mov cx,30call Msgloop1:call Delaymov al,1cmp al,gameoverjz stopmov bx , offset Bodymov cx,0mov cl,Lenadd bx,cxadd bx,cxsub bx,2A1:mov ax,bx mov bx+2,axsub bx,2l

9、oop A1addhead: mov bx , offset Body ;增加新頭部并改寫數(shù)據(jù)mov ax , bxmov dx , Directionadd ah , dh ;坐標(biāo)加方向add al , dl ;坐標(biāo)加方向mov bx , ax ;存入頭部mov dx,0 ;為check_die準(zhǔn)備參數(shù)si,dimov dl , ahmov si , dxmov dl , almov di , dxcall check_die ;檢查死亡mov al,1cmp al,gameoverjz stop call check_eat ;檢查吃cmp cx,1jz A2 mov bx , offse

10、t Bodymov ax,0add Len,1mov al , Lenadd bx , ax ;取到蛇尾add bx , axsub bx , 2mov ax , bxmov cx,0mov bx,cxmov dx,0mov dl , ahmov si , dxmov dl , almov di , dxsub Len,1call clearcutmov bx , offset Bodymov ax, bxmov dx,0mov dl , ahmov si , dxmov dl , almov di , dxcall cutsnakejmp A3A2:add Len,1mov bx , off

11、set Bodymov ax, bxmov dx,0mov dl , ahmov si , dxmov dl , almov di , dxcall cutsnake ;畫新頭部call getfoodA3:call show_pointcall check_key ;檢查按鍵jmp loop1 ;蛇運動循環(huán)DATAS SEGMENTstop:pop dipop sipop dxpop cxpop bxpop axretrun_snake endp getfood函數(shù) 設(shè)置了一個隨機(jī)數(shù)坐標(biāo)x最大值50,調(diào)用Rand函數(shù)獲取隨機(jī)x軸坐標(biāo),同理可得隨機(jī)y軸坐標(biāo),該坐標(biāo)就是食物的隨機(jī)坐標(biāo)。調(diào)用cut

12、food函數(shù),將隨機(jī)食物在顯示屏輸出getfood procpush axpush bxpush cxpush dxpush sipush diM1:mov si,50 ;置隨機(jī)數(shù)范圍(最大值+1)call Rand ;產(chǎn)生隨機(jī)數(shù)mov foodx,ax ;賦予食物坐標(biāo)xmov si,50 ;置隨機(jī)數(shù)范圍(最大值+1)call Rand ;產(chǎn)生隨機(jī)數(shù)mov foody,ax ;賦予食物坐標(biāo)ymov si,foodxmov di,foodymov ax,di ;取坐標(biāo)值mul cut_y ;乘象素值add ax,topline mov dx,axpush dxmov ax,si ;取坐標(biāo)值mul

13、 cut_x ;乘象素值add ax,leftline mov cx,axpop dxmov ah,0dhmov bh,0int 10hcmp al,snake_colorjz M1call cutfood ;畫食物pop dipop sipop dxpop cxpop bxpop axretgetfood endp Check_key函數(shù)響應(yīng)鍵盤輸入,控制蛇的移動以及控制游戲退出 Check_key procpush axpush bxpush cxpush dxpush sipush dimov ah , 01hint 16hjz check_nokey ;如果沒有按鍵就繼續(xù)mov ah

14、, 0 ;取得掃描碼 int 16hpush ax cmp ah , SPACEjnz S2S1:mov ah,0int 16hcmp ah, SPACEjnz S1S2:pop axcmp ah , LEFT ;往左移動jz check_LEFTcmp ah , RIGHT ;往右邊移動jz check_RIGHTcmp ah , UP ;往上移動jz check_UPcmp ah , DOWN ;往下移動jz check_DOWNcmp ah , QUIT ;結(jié)束游戲jz check_QUITjmp check_nokeycheck_LEFT:mov ah , -1 ;(-1,0)mov

15、al , 0mov bx , ax ;檢查是否反向add bx , Directionjz check_nokeymov Direction , axjmp check_nokeycheck_RIGHT:mov ah , 1 ;(1,0)mov al , 0mov bx , ax ;檢查是否反向add bx , Directionjz check_nokeymov Direction , axjmp check_nokeycheck_UP:mov ah , 0 ;(0,-1)mov al , -1mov bx , Direction ;檢查是否反向sub bl , 1jz check_noke

16、y mov Direction , axjmp check_nokeycheck_DOWN:mov ah , 0 ;(0,1)mov al , 1 mov bx , Direction ;檢查是否反向add bl , 1jz check_nokeymov Direction , axjmp check_nokeycheck_QUIT:jmp check_exitcheck_exit: ;按下ESC鍵的情況mov gameover,1check_nokey:mov ah,0chmov al,0int 21hpop dipop sipop dxpop cxpop bxpop axretCheck_

17、key endp3系統(tǒng)測試及改進(jìn)3.1程序測試打開程序,顯示歡迎界面,提醒用戶輸入,按任意鍵進(jìn)入程序,游戲開始時,貪吃蛇默認(rèn)向右移動,使用鍵盤的上下左右控制貪吃蛇的前進(jìn)的方向,最下方的Score實時更新分?jǐn)?shù),游戲過程中空格鍵可以暫停和繼續(xù)、每吃一個食物,Socre+100,蛇身長度+1當(dāng)蛇頭撞墻之后,彈出信息Game is over!程序中斷,提示并等待用戶操作,當(dāng)按ESC鍵時退回主界面,按空格鍵重新開始游戲,此時分?jǐn)?shù)歸零,蛇身長度也恢復(fù)到開始時的默認(rèn)值如圖,當(dāng)蛇頭撞上蛇身時,等同蛇頭撞上墻壁3.2系統(tǒng)改進(jìn)(1)游戲制作的精細(xì)度和畫面的質(zhì)量有待提高,改善蛇和食物的樣子(2)聯(lián)機(jī),可以多臺機(jī)器聯(lián)

18、機(jī)比賽,(3)可以記錄歷史最好成績(4)某些食物具有特效,比如縮短蛇身的長度,可以穿墻(5)可以改變游戲的速度,(6)長時間游戲提醒玩家休息(7)實現(xiàn)背景音樂(8)可以選擇不同形狀的蛇身,改變蛇的顏色(9)可以保存當(dāng)前游戲,玩家下次可以繼續(xù)當(dāng)前游戲4源碼.model small.stack 200.dataLen db ? ;蛇的長度Body dw 200 dup(0) ;蛇的身體位置Direction dw 256Score db 'Score00000' ;得分snake_color db 0ah ;蛇顏色food_color db 0ch ;食物色speed db 0 ;

19、速度gameover db 0 ;游戲結(jié)束標(biāo)記Point db 0 ;得分?jǐn)?shù)foodX dw ? ;食物坐標(biāo)foodY dw ?seed dw 2 ;隨即數(shù)種子;* ;顯示方面的參數(shù)topline dw 20 ;上邊界leftline dw 60 ;左邊界cut_x dw 4 ;每格寬cut_y dw 3 ;每格長max_x dw 49 ;最大格數(shù)(橫)max_y dw 49 ;最大格數(shù)(縱)msg1 db 'Greedy Snakes'msg2 db 'by:xiaobin'msg3 db 'Game is over!'msg4 db '

20、;Press any key for start! Esc for exit'msg5 db 'ESC for back, Space for retry'msg6 db 'press space for pause/continue'msg7 db ' 'title1 db 6 dup(20h), 5 dup(0dch), 5 dup(20h) ,5 dup(0dch), 5 dup(20h) title2 db 6 dup(20h), 0dbh,3 dup(20h),0dbh,5 dup(20h),0dbh,3 dup(20h),0d

21、bh ,5 dup(20h) title3 db 6 dup(20h), 0dbh,3 dup(20h),0dbh,5 dup(20h) ,0dbh,3 dup(20h),0dbh,5 dup(20h)title4 db 7 dup(0dfh), 3 dup(20h),7 dup(0dfh), 3 dup(20h),5 dup(0dfh),0fdhyello db 0eh green db 02h white db 0fh blue db 01h;* ;鍵盤掃描碼LEFT EQU 4BhRIGHT EQU 4DhUP EQU 48hDOWN EQU 50hQUIT EQU 01hSPACE E

22、QU 39h.codemain proc farmov ax , datamov ds , axstart:mov ah , 00mov al , 12hint 10h ;設(shè)置圖形模式640*480call show_start_msg ;顯示開始提示信息call show_titlemov ah , 00hint 16h ;等待按鍵cmp ah , QUIT jz does ;ESC則退出,否則進(jìn)入游戲game_start:mov ah , 00 ;設(shè)置圖形模式320*200,游戲在此模式下運行mov al , 13hint 10h mov cl , 7 ;邊框顏色mov si , 59mo

23、v bx , 19mov di , 260mov dx , 170call rec ;打印邊框call clear_area ;游戲區(qū)域清空(效果)call Init_snake ;初始化蛇call getfood ;得到第一個食物call run_snake ;開始運動蛇exit:mov dx , 1010h ;設(shè)置光標(biāo)call SetGb ;設(shè)置光標(biāo)位置mov bl , white ;顯示死亡信息lea bp , msg3mov cx , 13call Msg ;顯示字符串mov dx , 1605hmov bl , white ;顯示提示信息lea bp , msg5mov cx , 2

24、9call Msgexit_loop:mov ah , 00hint 16h ;等待按鍵cmp ah , QUITjz startcmp ah , SPACEjz game_startjmp exit_loop ;返回開始does:mov ah , 00mov al , 03int 10h ;設(shè)置文本模式mov ah , 4chint 21h ;退出到DOSmain endp;*;函數(shù)名: SetGb;功能: 設(shè)置光標(biāo)位置;傳遞參數(shù): dh/dl 行/列;*SetGb proc nearpush axpush bxmov bh , 0mov ah , 02hint 10hpop bxpop a

25、x retSetGb endp;*;函數(shù)名: Msg;功能: 輸出字符串;傳遞參數(shù): ; bl 顏色號(BL RGB IRGB); bp 字符串偏移地址; cx 字符串長度; dh/dl 行/列;*Msg proc near push axpush bxpush espush dspop es ;將數(shù)據(jù)段ds送esmov al , 0mov ah , 13hmov bh , 0 int 10hpop espop bxpop axret Msg endp;*;函數(shù)名: show_title;功能: 顯示開始提示信息;*show_title proc nearpush axpush bxpush

26、cxpush dxmov dl,10hmov cx,10hyidong:push cxdec dlmov dh,0fhcall SetGbmov al,020hmov ah,0ehint 10hinc dlmov dh,0chcall SetGbmov bl,yellolea bp,title1mov cx,26call Msgmov dh,0dhcall SetGbmov bl,yellolea bp,title2mov cx,26call Msgmov dh,0ehcall SetGbmov bl,yellolea bp,title3mov cx,26call Msgmov dh,0fhc

27、all SetGbmov bl,yellolea bp,title4mov cx,26call Msgcall delayinc dlpop cxcall show_start_msgloop yidongmov ah,0chmov al,0int 21hpop dxpop cxpop bxpop ax retshow_title endp;*;函數(shù)名: show_start_msg;功能: 顯示開始提示信息;*show_start_msg proc nearpush axpush bxpush cxpush dxmov dx,1426hcall SetGbmov bl,0a1hlea bp,

28、msg1mov cx,12call Msgmov dx , 190bhcall SetGb ;設(shè)置光標(biāo)mov bl,08hlea bp,msg2 ;顯示作者信息mov cx,11call Msg ;顯示字符串mov dx , 1619h ;設(shè)置光標(biāo)call SetGbmov bl , whitelea bp , msg4 ;顯示提示信息mov cx , 37call Msg ;顯示字符串pop dxpop cxpop bxpop ax retshow_start_msg endp;*;函數(shù)名: cutsnake;功能: 顯示蛇的一格;傳遞參數(shù): ; si/di 游戲空間列/游戲空間行(50*5

29、0);*cutsnake proc nearpush axpush bxpush cxpush dxpush sipush dimov cl, snake_color ;置顏色mov ax,di ;取坐標(biāo)值mul cut_y ;乘象素值add ax,topline ;加上邊界mov bx , ax add ax , 2 mov dx , axpush bxpush dxmov ax,si ;取坐標(biāo)值mul cut_x ;乘象素值add ax,leftline ;加上邊界mov si , axadd ax , 3mov di , axpop dxpop bxcall Rec ;Rec的參數(shù)是cl

30、顏色 si左邊 bx上邊 di右邊 dx下邊pop dipop sipop dxpop cxpop bxpop ax retcutsnake endp;*;函數(shù)名: cutfood;功能: 顯示食物;傳遞參數(shù): ; si/di 游戲空間列/游戲空間行(50*50);函數(shù)返回: 空;*cutfood proc nearpush axpush bxpush cxpush dxpush sipush dimov cl , food_color ;置顏色mov ax,di ;取坐標(biāo)值mul cut_y ;乘象素值add ax,topline ;加上邊界mov bx , axadd ax , 2mov

31、dx , axpush bx push dxmov ax,si ;取坐標(biāo)值mul cut_x ;乘象素值add ax,leftline ;加上邊界mov si , axadd ax , 3mov di , axpop dxpop bxcall Rec ;Rec的參數(shù)是cl顏色 si左邊 bx上邊 di右邊 dx下邊pop dipop sipop dxpop cxpop bxpop ax retcutfood endp;*;函數(shù)名: clearcut;功能: 清除格;傳遞參數(shù): ; si/di 游戲空間列/游戲空間行(50*50);函數(shù)返回: 空;*clearcut proc nearpush

32、axpush bxpush cxpush dxpush sipush dimov cl , 0 ;置顏色(黑)mov ax,di ;取坐標(biāo)值mul cut_y ;乘象素值add ax,topline ;加上邊界mov bx , axadd ax , 2mov dx , axpush bxpush dxmov ax,si ;取坐標(biāo)值mul cut_x ;乘象素值add ax,leftline ;加上邊界mov si , axadd ax , 3mov di , axpop dxpop bxcall Rec ;Rec的參數(shù)是cl顏色 si左邊 bx上邊 di右邊 dx下邊pop dipop sip

33、op dxpop cxpop bxpop ax retclearcut endp;*;函數(shù)名: Rand;功能: 產(chǎn)生指定范圍大小的隨機(jī)數(shù);傳遞參數(shù): si 數(shù)字的范圍最大值+1;函數(shù)返回: ax 返回隨機(jī)數(shù)的值;*Rand procpush bxpush cxpush dxpush simov ah,2chint 21hmov ax,dxmov dx,0mov bx,si ;指定隨機(jī)數(shù)的范圍div bx mov ax,dxpop sipop dxpop cxpop bx retRand endp;*;函數(shù)名: getfood;功能: 產(chǎn)生新食物,即隨機(jī)產(chǎn)生一組49*49的坐標(biāo) ;函數(shù)返回:

34、foodx與foody的值;*getfood procpush axpush bxpush cxpush dxpush sipush diM1:mov si,50 ;置隨機(jī)數(shù)范圍(最大值+1)call Rand ;產(chǎn)生隨機(jī)數(shù)mov foodx,ax ;賦予食物坐標(biāo)xmov si,50 ;置隨機(jī)數(shù)范圍(最大值+1)call Rand ;產(chǎn)生隨機(jī)數(shù)mov foody,ax ;賦予食物坐標(biāo)ymov si,foodxmov di,foodymov ax,di ;取坐標(biāo)值mul cut_y ;乘象素值add ax,topline mov dx,axpush dxmov ax,si ;取坐標(biāo)值mul cu

35、t_x ;乘象素值add ax,leftline mov cx,axpop dxmov ah,0dhmov bh,0int 10hcmp al,snake_colorjz M1call cutfood ;畫食物pop dipop sipop dxpop cxpop bxpop axretgetfood endp;*;函數(shù)名: Delay;功能: 延時;*Delay procpush axpush bxpush cx push dx mov cx,33144waitf:in al,61hand al,10hcmp al,ahje waitfmov ah,alloop waitfpop dxpop

36、 cxpop bxpop axretDelay endp;*;函數(shù)名: Check_key;功能: 處理鍵盤響應(yīng) ;函數(shù)返回: Direction的值,gameover的值(按ESC時);*Check_key procpush axpush bxpush cxpush dxpush sipush dimov ah , 01hint 16hjz check_nokey ;如果沒有按鍵就繼續(xù)mov ah , 0 ;取得掃描碼 int 16hpush ax cmp ah , SPACEjnz S2S1:mov ah,0int 16hcmp ah, SPACEjnz S1S2:pop axcmp ah

37、 , LEFT ;往左移動jz check_LEFTcmp ah , RIGHT ;往右邊移動jz check_RIGHTcmp ah , UP ;往上移動jz check_UPcmp ah , DOWN ;往下移動jz check_DOWNcmp ah , QUIT ;結(jié)束游戲jz check_QUITjmp check_nokeycheck_LEFT:mov ah , -1 ;(-1,0)mov al , 0mov bx , ax ;檢查是否反向add bx , Directionjz check_nokeymov Direction , axjmp check_nokeycheck_RI

38、GHT:mov ah , 1 ;(1,0)mov al , 0mov bx , ax ;檢查是否反向add bx , Directionjz check_nokeymov Direction , axjmp check_nokeycheck_UP:mov ah , 0 ;(0,-1)mov al , -1mov bx , Direction ;檢查是否反向sub bl , 1jz check_nokey mov Direction , axjmp check_nokeycheck_DOWN:mov ah , 0 ;(0,1)mov al , 1 mov bx , Direction ;檢查是否

39、反向add bl , 1jz check_nokeymov Direction , axjmp check_nokeycheck_QUIT:jmp check_exitcheck_exit: ;按下ESC鍵的情況mov gameover,1check_nokey:mov ah,0chmov al,0int 21hpop dipop sipop dxpop cxpop bxpop axretCheck_key endp;*;函數(shù)名: Check_die;功能: 處理死亡的響應(yīng);傳遞參數(shù): SI,DI為當(dāng)前蛇頭部的坐標(biāo) ;函數(shù)返回: 蛇參數(shù)的值;*Check_die procpush axpush

40、 bxpush cxpush dxpush sipush dicmp si , 50 ;檢查是否到達(dá)邊界jz deadcmp si , 255jz deadcmp di , 50jz deadcmp di , 255jz deadmov ax,si ;檢查是否接觸蛇身mov dh,al ;DX中獲得當(dāng)前坐標(biāo)mov ax,dimov dl,almov cx,0mov cl, Lensub cl,1 mov bx,offset Bodycheck_die_loop:add bx , 2mov ax , bxcmp ax , dx ;取出蛇身信息進(jìn)行比較jz dead ;觸及蛇身即死亡loop ch

41、eck_die_loopjmp nextdead:mov gameover,1 ;死亡即賦gameover值1next:pop dipop sipop dxpop cxpop bxpop axretCheck_die endp;*;函數(shù)名: Check_eat;功能: 處理吃到食物的響應(yīng);傳遞參數(shù): SI,DI為當(dāng)前蛇頭部的坐標(biāo) ;函數(shù)返回: cx;*Check_eat procpush axpush bxpush dxpush sipush dimov cx,0mov ax , foodxmov bx , foodycmp ax , sijz ok1jmp check_eat_outok1:

42、 ;橫坐標(biāo)相等cmp bx , dijz ok2jmp check_eat_outok2: ;縱坐標(biāo)也相等 add point,1 ;加分mov cx,1check_eat_out:pop dipop sipop dxpop bxpop axretCheck_eat endp;*;函數(shù)名: Run_snake;功能: 蛇運動;*run_snake procpush axpush bxpush cxpush dxpush sipush dimov dx, 0005hcall SetGbmov bl,whitelea bp,msg6mov cx,30call Msgloop1:call Delaymov al,1cmp al,gameoverjz stopmov bx , offset Bodymov cx,0mov cl,Lenadd bx,cxadd bx,cxsub bx,2A1:mov ax,bx mov bx+2,axsub bx,2loop A1addhead: mov bx , offset Body ;增加新頭部并改寫數(shù)據(jù)mov ax , bxmov dx , Dir

溫馨提示

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

評論

0/150

提交評論