|
突然找到4年前自己寫的純8086匯編語言雙人貪食蛇游戲,絕對(duì)原創(chuàng)代碼純手打。分享給有需要參考的童鞋!
源碼:game1205.asm
可運(yùn)行文件:GAME1205.EXE ( Windows XP 32bit 環(huán)境下測(cè)試成功 )
字庫(kù)文件:HZK24
位圖圖片:256.bmp
主要涉及以下幾大難點(diǎn):
1,8086匯編語言語法
2,BIOS/DOS系統(tǒng)中斷功能調(diào)用
3,中斷向量表修改與恢復(fù)(定時(shí)中斷)
4,BMP圖片的解碼與顯示
5,漢字庫(kù)文件的解碼與顯示
6,貪食蛇游戲數(shù)據(jù)結(jié)構(gòu)與算法實(shí)現(xiàn)
一,調(diào)用系統(tǒng)中斷切換為VGA256顯示模式
- VIDEO equ 0a000h ;VGA256模式下的視頻存儲(chǔ)區(qū)段基址
- setvga macro
- push ax
- mov ah,00h
- mov al,13h
- int 10h ;進(jìn)入VGA256圖形模式
- mov ax,VIDEO ;設(shè)置es為段基址
- mov es,ax
- pop ax
- endm
復(fù)制代碼
切換為VGA256顯示模式后,我們的屏幕分辨率為320*200,每個(gè)像素都對(duì)應(yīng)內(nèi)存的一個(gè)字節(jié)空間。這是后面所有操作的基礎(chǔ)。所有的界面效果都是通過操作內(nèi)存實(shí)現(xiàn)!
二,Bmp圖片解碼與顯示
Windows自帶畫圖工具便可創(chuàng)建一張320*200的Bmp圖片。Bmp文件格式包括:文件頭區(qū),調(diào)色板數(shù)據(jù)區(qū),文件圖像區(qū)。
三,鼠標(biāo)上下鍵選擇 單打/雙打,按Enter鍵確定
這里主要完成漢字的顯示?梢跃W(wǎng)上找到 HZK24 漢字庫(kù)點(diǎn)陣文件(24*24字模)。
漢字區(qū)位碼與漢字庫(kù)文件偏移量的 換算式子:72 * ((left - 161)* 94 + right - 161)
;輸出中文單個(gè)字符函數(shù);主導(dǎo)為24*24字模;參數(shù):[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 ;如果打開文件失敗,則退出
- ;計(jì)算文件指針偏移量
- mov al,[si]
- sub al,161 ;left - 161
- mov dx,94 ;(left - 161)* 94
- mov ah,0
- mul dx ;結(jié)果存入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個(gè)字節(jié);讀取后,文件指針自動(dòng)向后移
- mov ah,3fh
- mov bx,hzkfile
- mov cx,WIDTHBYTE ;一行有3個(gè)字節(jié)
- mov dx,offset datatemp
- int 21h
-
- ;按照數(shù)組輸出一行
- mov al,WIDTHBYTE ;一行3個(gè)字節(jié)
- mov bx,offset datatemp
- nextbyte:
- mov ah,8 ;一個(gè)字節(jié)有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
- ;
- ;關(guān)閉文件
- mov ah,3eh
- mov bx,hzkfile
- int 21h
- pop di
- pop si
- pop dx
- pop cx
- pop bx
- pop ax
- putexit:
- ret
復(fù)制代碼
四,不同等級(jí)代表貪食蛇的移動(dòng)速度( 菜鳥級(jí)/入門級(jí)/提高級(jí)/大師級(jí)/骨灰級(jí) )
五,游戲中兩蛇分別計(jì)分。撞墻或者相撞,會(huì)導(dǎo)致Game Over。
按Enter鍵暫停游戲,按Esc鍵退出游戲
---- end ----
|
評(píng)分
-
查看全部評(píng)分
|