久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4069|回復: 0
打印 上一主題 下一主題
收起左側

8086匯編雙人貪食蛇游戲

[復制鏈接]
跳轉到指定樓層
樓主
突然找到4年前自己寫的純8086匯編語言雙人貪食蛇游戲,絕對原創代碼純手打。分享給有需要參考的童鞋!
源碼:game1205.asm
可運行文件:GAME1205.EXE ( Windows XP 32bit 環境下測試成功 )

字庫文件:HZK24
位圖圖片:256.bmp


主要涉及以下幾大難點:
1,8086匯編語言語法
2,BIOS/DOS系統中斷功能調用
3,中斷向量表修改與恢復(定時中斷)
4,BMP圖片的解碼與顯示
5,漢字庫文件的解碼與顯示
6,貪食蛇游戲數據結構與算法實現
一,調用系統中斷切換為VGA256顯示模式
  1. VIDEO           equ     0a000h      ;VGA256模式下的視頻存儲區段基址

  2. setvga          macro
  3.                 push    ax
  4.                 mov     ah,00h
  5.                 mov     al,13h
  6.                 int     10h         ;進入VGA256圖形模式
  7.                 mov     ax,VIDEO    ;設置es為段基址
  8.                 mov     es,ax
  9.                 pop     ax
  10.                 endm
復制代碼


切換為VGA256顯示模式后,我們的屏幕分辨率為320*200,每個像素都對應內存的一個字節空間。這是后面所有操作的基礎。所有的界面效果都是通過操作內存實現!
二,Bmp圖片解碼與顯示

Windows自帶畫圖工具便可創建一張320*200的Bmp圖片。Bmp文件格式包括:文件頭區,調色板數據區,文件圖像區。
三,鼠標上下鍵選擇 單打/雙打,按Enter鍵確定

這里主要完成漢字的顯示。可以網上找到 HZK24 漢字庫點陣文件(24*24字模)。
漢字區位碼與漢字庫文件偏移量的 換算式子:72 * ((left - 161)* 94 + right - 161)
;輸出中文單個字符函數;主導為24*24字模;參數:[si]:left,right,xxxx,yyyy,color
  1. put_hz          proc    near

  2.                 push    ax
  3.                 push    bx
  4.                 push    cx
  5.                 push    dx
  6.                 push    si
  7.                 push    di

  8.                 ;為讀打開文件
  9.                 mov     ah,3dh
  10.                 mov     al,0
  11.                 mov     dx,offset filename
  12.                 INT     21H
  13.                 mov     hzkfile,ax
  14.                 jc      putexit      ;如果打開文件失敗,則退出

  15.                 ;計算文件指針偏移量
  16.                 mov     al,[si]
  17.                 sub     al,161       ;left - 161
  18.                 mov     dx,94        ;(left - 161)* 94
  19.                 mov     ah,0
  20.                 mul     dx           ;結果存入dx:ax
  21.                 add     al,[si+1]    ;(left - 161)* 94 + right
  22.                 adc     ah,0
  23.                 adc     dx,0
  24.                 sub     ax,161       ;(left - 161)* 94 + right - 161
  25.                 sbb     dx,0
  26.                 mov     bx,dx        ;暫存入bx
  27.                 ;
  28.                 mov     cx,WORDSIZE  ;24*24字模
  29.                 mul     cx           ;72 * ((left - 161)* 94 + right - 161)
  30.                 add     dx,bx
  31.                 xchg    ax,dx
  32.                 mov     cx,ax         ;cx:dx為文件指針位移量

  33.                 ;文件指針偏移
  34.                 mov     ah,42h
  35.                 mov     al,0          ;從文件頭開始偏移
  36.                 mov     bx,hzkfile
  37.                 int     21h

  38.                 ;開始邊讀文件邊輸出中文
  39.                 mov     hzkwidth,WORDWIDTH

  40. nextrow:
  41.                 ;讀取字模的一行,一次讀3個字節;讀取后,文件指針自動向后移
  42.                 mov     ah,3fh
  43.                 mov     bx,hzkfile
  44.                 mov     cx,WIDTHBYTE    ;一行有3個字節
  45.                 mov     dx,offset datatemp
  46.                 int     21h
  47.                
  48.                 ;按照數組輸出一行
  49.                 mov     al,WIDTHBYTE    ;一行3個字節
  50.                 mov     bx,offset datatemp

  51. nextbyte:
  52.                 mov     ah,8            ;一個字節有8位
  53.                 mov     dl,[bx]         ;datatemp
  54.                 mov     di,offset bit

  55. nextbit:
  56.                 test    dl,[di]                ;bit
  57.                 jz      nono
  58.                 call        disp            ;顯示出來

  59. nono:
  60.                 inc     di
  61.                 dec     ah
  62.                 jnz     nextbit
  63.                 ;
  64.                 inc     bx
  65.                 dec     al
  66.                 jnz     nextbyte
  67.                 ;
  68.                 dec     hzkwidth
  69.                 jnz     nextrow
  70.                 ;
  71.                 ;關閉文件
  72.                 mov     ah,3eh
  73.                 mov     bx,hzkfile
  74.                 int     21h

  75.                 pop     di
  76.                 pop     si
  77.                 pop     dx
  78.                 pop     cx
  79.                 pop     bx
  80.                 pop     ax
  81. putexit:
  82.                 ret
復制代碼

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

五,游戲中兩蛇分別計分。撞墻或者相撞,會導致Game Over。
按Enter鍵暫停游戲,按Esc鍵退出游戲

---- end ----

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品久久久97夜夜嗨 | 视频一区 国产精品 | 自拍偷拍中文字幕 | 久久精品一 | 亚洲一区二区在线播放 | 亚洲一区| 久久亚洲一区二区三区四区 | 精品久久久久久久久久久 | 97精品超碰一区二区三区 | 精品国产第一区二区三区 | 欧美日韩视频在线播放 | av看片网| 国产欧美久久精品 | 亚洲二区视频 | 亚洲国产一区二区视频 | 亚洲一区二区 | 日日干夜夜干 | 国产精品自产拍在线观看蜜 | 成人国产精品入口免费视频 | 日韩欧美国产精品一区二区三区 | 久综合| 99精品网 | 亚洲影视在线 | 国产成人一区二区三区 | 成人性生交大片免费看r链接 | 久久亚洲欧美日韩精品专区 | 久久久久国产精品 | 国内久久 | 午夜黄色影院 | 国产精品网址 | 久久亚洲一区 | 亚洲精品欧美一区二区三区 | 日韩欧美在线不卡 | 热re99久久精品国99热观看 | 亚洲精品一级 | 国产精品资源在线 | 久久99精品久久久久子伦 | 中文字幕色站 | 成人午夜精品一区二区三区 | 亚洲高清在线观看 | 亚洲成人精 |