?? game.txt
字號:
;**********************************************
;* Made by Lin Jiang *
;* 由于英語水平有限,注釋只好用中文了,在DOS *
;* 用EDIT的朋友就得麻煩麻煩了:) *
;**********************************************
;初始化程序界面的宏,共七個參數
;op1,op2:打印邊框的初始位置
;op3:要打印的字符的ASCII代碼
;op4:循環自增方向
;op5:打印次數 op6:標號
;op7:字符的顏色
;參數實在太多了,考慮了很久,我覺得還是寫成宏好些!
Init_game macro op1,op2,op3,op4,op5,op6,op7
mov cx,00h
mov dh,op1
mov dl,op2
op6:
mov ah,02h
mov bh,00h
int 10h
push cx
mov ah,09h
mov al,op3
mov bh,00h
mov bl,op7
mov cx,01h
int 10h
pop cx
inc cx
inc op4
cmp cx,op5
jne op6
endm
;清屏的宏, 四個參數,分別是左上角和右下角座標
;由于用得太多,也寫成宏
clear_screen macro op1,op2,op3,op4
mov ah,06h
mov al,00h
mov bh,07h
mov ch,op1
mov cl,op2
mov dh,op3
mov dl,op4
int 10h
mov ah,02h
mov bh,00h
mov dh,00h
mov dl,00h
int 10h
endm
;顯示菜單和信息提示的宏
;功能是先把光標置于要顯示位置,然后用DOS的
;9號中斷顯示字符串
menu macro op1,op2,op3
mov ah,02h
mov bh,00h
mov dh,op1
mov dl,op2
int 10h
mov ah,09h
lea dx,op3
int 21h
endm
data segment
;初始菜單內容
linjiang db "Made by lin jiang$"
meg db "Let us have a game!!Come on!!$"
meg1 db "**Select Menu**$"
meg2 db "Please select the game speed,ESC to quit.$"
meg3 db "1.Very slow Too easy,speed up!$"
meg4 db "2.Slow Everybody can deal.$"
meg5 db "3.Nomal I think you can deal!$"
meg6 db "4.Fast A challenge.Pay attention!$"
meg7 db "5.Very Fast Too hard,Have a try?$"
meg8 db "6.Fastest Are you crazy??$"
meg9 db "*Select the number among 1-6 and press ENTER to start!*$"
meg10 db "Game Speed Select:$"
;顯示功能鍵內容
hotkey db "When you are playing games:$"
hotkey1 db "ESC to return to menu$"
hotkey2 db "SPACE to pause the game$"
hotkey3 db "Press any key to play games......$"
hotkey4 db "Are you ready??$"
;顯示游戲失敗后的信息
failmeg db "The letter arrives the bottom, You are lost ! :($"
failmeg0 db "Press ENTER to go on......$"
failmeg1 db "Game is over!$"
failmeg2 db "Press ENTER to return menu and press ESC to exit!$"
failmeg3 db "Bye-Bye!Thank for your playing!!$"
failmeg4 db "Press any key to quit......$"
;時間延遲
speed dw 00d,1200d,700d,400d,350d,200d,20d
;字母數組
letters db "jwmilzoeucgpravskntxhdyqfb"
db "iytpkwnxlsvxrmofzhgaebudjq"
db "nwimzoexrphysfqtvdcgljukda"
;由于第二次運行游戲時內存中的內容已經改變,故重新初始化
;此處是一個備份,不會改變。
letters_bak db "jwmilzoeucgpravskntxhdyqfb"
db "iytpkwnxlsvxrmofzhgaebudjq"
db "nwimzoexrphysfqtvdcgljukda"
;一個對字母計數的計數器,當等于78的時候,清零。
letter_counter db 0
life_flag db 78 dup(0)
;位置狀態數組,1表示已經遍歷過了
;字母位置當前值
position_flag db 78 dup(0)
present_position db 1
data ends
stack segment para stack 'stack'
db 64 dup(0)
stack ends
code segment
main proc far
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
;選擇視頻模式
mov ah,03h
int 10h
;使用調色板設置游戲背景色
mov ax,1010h
mov bx,0
mov ch,0
mov cl,16
mov dh,0
int 10h
;由于第二次運行游戲時這些變量已經改變,故重賦值
mov letter_counter,00h
mov present_position,1
;opsition_flag數組清零
lea si,position_flag
mov ah,00h
mov cx,00h
init_postion_flag:
mov [si],ah
inc si
inc cx
cmp cx,78d
jne init_postion_flag
;字母數組letters恢復原值
lea di,letters
lea si,letters_bak
mov cx,00h
init_letters:
mov ah,[si]
mov [di],ah
inc si
inc di
inc cx
cmp cx,78d
jne init_letters
mov ah,00h
lea si,life_flag
mov cx,00h
init_life_flag:
mov [si],ah
inc si
inc cx
cmp cx,78d
jne init_life_flag
;主程序部分
;關閉光標
mov cx,00h
mov ah,01h
or ch,00010000b
int 10h
;清屏的宏展開
clear_screen 00d,00d,24d,79d
;初始化游戲界面的宏展開(游戲邊框)
Init_game 00d,00d,0ah,dl,80d,nextsign1,0011b
Init_game 24d,00d,0ah,dl,80d,nextsign2,0011b
Init_game 00d,00d,0ah,dh,25d,nextsign3,0011b
Init_game 00d,79d,0ah,dh,25d,nextsign4,0011b
;菜單信息的宏展開
menu 01d,15d,meg
menu 01h,61d,linjiang
menu 03d,20d,meg1
menu 05d,15d,meg2
menu 07d,15d,meg3
menu 09d,15d,meg4
menu 11d,15d,meg5
menu 13d,15d,meg6
menu 15d,15d,meg7
menu 17d,15d,meg8
menu 19d,15d,meg9
menu 22d,15d,meg10
;處理菜單輸入選擇的代碼段
input: mov ah,02h
mov bh,00h
mov dh,22d
mov dl,33d
int 10h
mov ah,0ah
mov al," "
mov bh,00h
mov cx,01h
int 10h
mov ah,01h
int 21h
;六種備選的速度值
retry: cmp al,"1"
je speed1
cmp al,"2"
je speed2
cmp al,"3"
je speed3
cmp al,"4"
je speed4
cmp al,"5"
je speed5
cmp al,"6"
je speed6
cmp al,1bh
je to_over0
jmp input
to_over0:jmp over
speed1: mov ah,01h ;速度1
int 21h
cmp al,0dh
jne otherkey
mov ax,speed+2
mov speed,ax
jmp begin
speed2: mov ah,01h ;速度2
int 21h
cmp al,0dh
jne otherkey
mov ax,speed+4
mov speed,ax
jmp begin
speed3: mov ah,01h ;速度3
int 21h
cmp al,0dh
jne otherkey
mov ax,speed+6
mov speed,ax
jmp begin
speed4: mov ah,01h ;速度4
int 21h
cmp al,0dh
jne otherkey
mov ax,speed+8
mov speed,ax
jmp begin
speed5: mov ah,01h ;速度5
int 21h
cmp al,0dh
jne otherkey
mov ax,speed+10
mov speed,ax
jmp begin
speed6: mov ah,01h ;速度6
int 21h
cmp al,0dh
jne otherkey
mov ax,speed+12
mov speed,ax
jmp begin
;處理重復輸入的代碼段
otherkey:
push ax
mov ah,02h
mov bh,00h
mov dh,22d
mov dl,34d
int 10h
mov ah,0ah
mov al," "
mov bh,00h
mov cx,01h
int 10h
mov ah,02h
mov bh,00h
mov dh,22d
mov dl,33d
int 10h
pop ax
mov dx,ax
mov ah,02h
int 21h
jmp retry
;輸入結束
begin:
clear_screen 01d,01d,23d,78d
;顯示熱鍵相關信息
menu 08d,20d,hotkey
menu 10d,20d,hotkey1
menu 12d,20d,hotkey2
menu 14d,20d,hotkey4
menu 16d,20d,hotkey3
mov ah,07h
int 21h
;清屏,開始游戲
clear_screen 01d,01d,23d,78d
Init_game 23d,01d,01h,dl,78d,nextsign5,1100b
;光標初始化
mov ah,02h
mov bh,00h
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -