天天看點

8086彙編雙人貪食蛇遊戲

突然找到4年前自己寫的純8086彙編語言雙人貪食蛇遊戲,絕對原創代碼純手打。分享給有需要參考的童鞋!

Download : http://download.csdn.net/detail/yarkey09/7415405

源碼:game1205.asm

可運作檔案:GAME1205.EXE ( Windows XP 32bit 環境下測試成功 )

字庫檔案:HZK24

位圖圖檔:256.bmp

主要涉及以下幾大難點:

1,8086彙編語言文法

2,BIOS/DOS系統中斷功能調用

3,中斷向量表修改與恢複(定時中斷)

4,BMP圖檔的解碼與顯示

5,漢字庫檔案的解碼與顯示

6,貪食蛇遊戲資料結構與算法實作

一,調用系統中斷切換為VGA256顯示模式

VIDEO           equ     0a000h      ;VGA256模式下的視訊存儲區段基址

setvga          macro
                push    ax
                mov     ah,00h
                mov     al,13h
                int     10h         ;進入VGA256圖形模式
                mov     ax,VIDEO    ;設定es為段基址
                mov     es,ax
                pop     ax
                endm
           

切換為VGA256顯示模式後,我們的螢幕分辨率為320*200,每個像素都對應記憶體的一個位元組空間。這是後面所有操作的基礎。所有的界面效果都是通過操作記憶體實作!

二,Bmp圖檔解碼與顯示

8086彙編雙人貪食蛇遊戲

Windows自帶畫圖工具便可建立一張320*200的Bmp圖檔。Bmp檔案格式包括:檔案頭區,調色闆資料區,檔案圖像區。

三,滑鼠上下鍵選擇 單打/雙打,按Enter鍵确定

8086彙編雙人貪食蛇遊戲

這裡主要完成漢字的顯示。可以網上找到 HZK24 漢字庫點陣檔案(24*24字模)。

漢字區位碼與漢字庫檔案偏移量的 換算式子:72 * ((left - 161)* 94 + right - 161)

;輸出中文單個字元函數
;主導為24*24字模
;參數:[si]:left,right,xxxx,yyyy,color

put_hz          proc    near

                push    ax
                push    bx
                push    cx
                push    dx
                push    si
                push    di

                ;為讀打開檔案
                mov     ah,3dh
                mov     al,0
                mov     dx,offset filename
                INT     21H
                mov     hzkfile,ax
                jc      putexit      ;如果打開檔案失敗,則退出

                ;計算檔案指針偏移量
                mov     al,[si]
                sub     al,161       ;left - 161
                mov     dx,94        ;(left - 161)* 94
                mov     ah,0
                mul     dx           ;結果存入dx:ax
                add     al,[si+1]    ;(left - 161)* 94 + right
                adc     ah,0
                adc     dx,0
                sub     ax,161       ;(left - 161)* 94 + right - 161
                sbb     dx,0
                mov     bx,dx        ;暫存入bx
		;
                mov     cx,WORDSIZE  ;24*24字模
                mul     cx           ;72 * ((left - 161)* 94 + right - 161)
                add     dx,bx
                xchg    ax,dx
                mov     cx,ax         ;cx:dx為檔案指針位移量

                ;檔案指針偏移
                mov     ah,42h
                mov     al,0          ;從檔案頭開始偏移
                mov     bx,hzkfile
                int     21h

                ;開始邊讀檔案邊輸出中文
                mov     hzkwidth,WORDWIDTH

nextrow:
                ;讀取字模的一行,一次讀3個位元組;讀取後,檔案指針自動向後移
                mov     ah,3fh
                mov     bx,hzkfile
                mov     cx,WIDTHBYTE    ;一行有3個位元組
                mov     dx,offset datatemp
                int     21h
		
                ;按照數組輸出一行
                mov     al,WIDTHBYTE    ;一行3個位元組
                mov     bx,offset datatemp

nextbyte:
                mov     ah,8            ;一個位元組有8位
                mov     dl,[bx]         ;datatemp
                mov     di,offset bit

nextbit:
                test    dl,[di]	        ;bit
                jz      nono
                call	disp            ;顯示出來

nono:
                inc     di
                dec     ah
                jnz     nextbit
                ;
                inc     bx
                dec     al
                jnz     nextbyte
                ;
                dec     hzkwidth
                jnz     nextrow
                ;
                ;關閉檔案
                mov     ah,3eh
                mov     bx,hzkfile
                int     21h

                pop     di
                pop     si
                pop     dx
                pop     cx
                pop     bx
                pop     ax
putexit:
                ret
           

四,不同等級代表貪食蛇的移動速度( 菜鳥級/入門級/提進階/大師級/骨灰級 )

8086彙編雙人貪食蛇遊戲

五,遊戲中兩蛇分别計分。撞牆或者相撞,會導緻Game Over。

按Enter鍵暫停遊戲,按Esc鍵退出遊戲

8086彙編雙人貪食蛇遊戲

---- end ----