突然找到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圖檔解碼與顯示
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1zaE1UNWJTY5Z0VlZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TMyQjM0kTMyIDOyUDM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
Windows自帶畫圖工具便可建立一張320*200的Bmp圖檔。Bmp檔案格式包括:檔案頭區,調色闆資料區,檔案圖像區。
三,滑鼠上下鍵選擇 單打/雙打,按Enter鍵确定
這裡主要完成漢字的顯示。可以網上找到 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
四,不同等級代表貪食蛇的移動速度( 菜鳥級/入門級/提進階/大師級/骨灰級 )
五,遊戲中兩蛇分别計分。撞牆或者相撞,會導緻Game Over。
按Enter鍵暫停遊戲,按Esc鍵退出遊戲
---- end ----