📄 10.asm
字号:
.486
DISP MACRO Y,X,LONG,VAR,COLOR
MOV AX,1301H
MOV BX,COLOR
MOV CX,LONG
MOV DH,Y
MOV DL,X
MOV BP,OFFSET VAR
INT 10H
ENDM
OVER MACRO Y,X
MOV AH,02H
MOV BH,0
MOV DH,Y
MOV DL,X
INT 10H
MOV AH,08H
INT 10H
ENDM
MUSIC MACRO COM
MOV CM,COM
MOV DX,12H
MOV AX,34DEH
DIV CM
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
CALL DELAY
MOV AL,0
OUT 42H,AL
OUT 42H,AL
ENDM
DATAS SEGMENT USE16
MESG1 DB 'Please show seeds:(press 0-2)$'
MESG2 DB 'GAME OVER$'
MESG3 DB 'ENTER ESC TO EXIT OR N TO RESTART'
DB 0DH,0AH,' Your Score is: '
SHOW DW 2 DUP(?),'$'
MESG4 DB 'READY:E,UP:W,LEFT:A,RIGHT:D,DOWN:S,RESET:N,EXIT:ESC'
TABFB DW -1,330,330,330,262,330,393,196,0
TABFE DW -1,495,700,700,700,661,589,525,0
TABTB DB 4,1,2,2,1,1,2,3
TABTE DB 4,1,1,1,1,4,1,2,0,0,0
C1 DW 2DH
C2 DW 51H
C3 DW 0EH
C4 DW 11H
SEED DB ' '
L1 DB 201,40 DUP(205),187
L2 DB 186,40 DUP(' '),186
L3 DB 200,40 DUP(205),188
LL EQU $-L3
XX EQU (80-LL)/2
YY EQU 5
CD DB 6
CM DW ?
AD DB 10,20,15,25,9,50,13,59
DB 7,20,10,34,15,20,20,50
DB 19,59,18,59,17,59,16,59
SL DB 0
XXX DB ?
YYY DB ?
BUFX DB ?
BUFY DB ?
COUNT DW 0
SCORE DW 0
DATAS ENDS
CODES SEGMENT USE16
ASSUME CS:CODES,DS:DATAS,ES:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
MOV AX,3
INT 10H
;80*25-------------------------------
MOV CD,6
DISP YY,XX,LL,L1,C1
DISP YY+16,XX,LL,L3,C1
BJ:
DISP CD,XX,LL,L2,C1
INC CD
CMP CD,21
JNE BJ
MOV AH,01H
MOV CH,20H;CLEAR GUANGBIAO
INT 10H
DISP 24,14,51,MESG4,C3
;BEIJING------------------------------
OPEN:
IN AL,61H
OR AL,00000011B
OUT 61H,AL
MOV AL,-1
OUT 42H,AL
MOV AL,0
OUT 42H,AL
;OPEN SPEAKER-------------------------
MOV AH,02H
MOV BH,0
MOV DX,0101H
INT 10H
MOV AH,09H
MOV DX,OFFSET MESG1
INT 21H
;SHOW MESG1---------------------------
MOV SI,OFFSET TABFB
MOV DI,OFFSET TABTB
LASTB:
CMP WORD PTR [SI],0
JE REBEG
MOV DX,12H
MOV AX,34DEH
DIV WORD PTR [SI]
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
CALL SDELAY
ADD SI,2
INC DI
JMP LASTB
;BEGINNING MUSIC------------------------
REBEG:
XOR AH,AH
INT 16H
CMP AL,1BH
JE EXIT
CMP AL,'N'
JE START
CMP AL,'0'
JB REBEG
CMP AL,'2'
JA REBEG
SUB AL,30H
;CHUSHI--------------------------------
MOV SL,0
MOV SI,OFFSET AD
CMP AL,0
CHUSHI:
JE RESEED
ADD SI,8
DEC AL
JMP CHUSHI
RESEED:
DISP [SI],[SI]+1,1,SEED,C2
INC SI
INC SI
INC SL
CMP SL,4
JNE RESEED
SUB SI,8
SUB SL,4
;SHOW SEEDS-----------------------------
XOR AH,AH
RES:
INT 16H
CMP AL,1BH
JE EXIT
CMP AL,'N'
JE START
CMP AL,'E'
JNE RES
CLEAR:
DISP [SI],[SI]+1,1,SEED,C1
INC SI
INC SI
INC SL
CMP SL,4
JNE CLEAR
SUB SI,8
SUB SL,4
;CLEAR SEEDS------------------------------
MOV SCORE,0
MOV COUNT,0
MOV BUFX,3BH
MOV BUFY,14H
DISP 14H,3BH,1,SEED,C3
;READY~GO!---------------------------------
WALK:
CMP SCORE,200
JE STOP
MOV AH,01H
MOV CH,0
MOV CL,7
INT 10H
MOV AL,BUFY
MOV YYY,AL
MOV AL,BUFX
MOV XXX,AL
CMP YYY,6
JNE GOON
CMP XXX,20
JNE GOON
DISP 13,35,9,MESG2,C1
JMP STOP
GOON:
MOV AH,02H
MOV BH,0
MOV DH,YYY
MOV DL,XXX
INT 10H
;ZHI GUANGBIAO--------------------
XOR AH,AH
INT 16H
CMP AL,1BH
JE EXIT
CMP AL,'N'
JE START
CMP AL,'W'
JE ISW
CMP AL,'A'
JE ISA
CMP AL,'S'
JE ISS
CMP AL,'D'
JE ISD
JMP WALK
ISW:
DEC YYY
JMP CHECK
ISA:
DEC XXX
JMP CHECK
ISS:
INC YYY
JMP CHECK
ISD:
INC XXX
CHECK:
MOV AH,01H
MOV CH,20H;CLEAR GUANGBIAO
INT 10H
CMP XXX,19
JBE WALK
CMP XXX,3CH
JAE WALK
CMP YYY,5
JBE WALK
CMP YYY,21
JAE WALK
;OUT?---------------------------
OVER YYY,XXX
CMP AH,2DH
JNE WALK
MOV AL,YYY
MOV BUFY,AL
MOV AH,XXX
MOV BUFX,AH
INC COUNT
LP3:
CMP AX,WORD PTR [SI]
JE BINGO
INC SI
INC SI
INC SL
CMP SL,4
JNE LP3
SUB SI,8
SUB SL,4
;CHECK SEEDS----------------------
DISP YYY,XXX,1,SEED,C3
MUSIC 330
JMP WALK
BINGO:
ADD SCORE,50
DISP YYY,XXX,1,SEED,C4
MUSIC 525
JMP WALK
STOP:
MOV AH,02H
MOV BH,0
MOV DX,0101H
INT 10H
MOV AX,SCORE
XOR DX,DX
DIV COUNT
MOV DI,OFFSET SHOW
MOV SL,10
DIV SL
ADD AX,3030H
MOV [DI],AL
MOV [DI]+1,AH
MOV AH,09H
MOV DX,OFFSET MESG3
INT 21H
;SHOW SCORE-------------------------
MOV SI,OFFSET TABFE
MOV DI,OFFSET TABTE
LASTE:
CMP WORD PTR [SI],0
JE LP2
MOV DX,12H
MOV AX,34DEH
DIV WORD PTR [SI]
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
CALL SDELAY
ADD SI,2
INC DI
JMP LASTE
;ENDING MUSIC-------------------------
LP2:
XOR AH,AH
INT 16H
CMP AL,1BH
JE WINOUT
CMP AL,'N'
JNE LP2
CLOSE:
IN AL,61H
AND AL,11111100B
OUT 61H,AL
JMP START
EXIT:
DISP 13,35,9,MESG2,C1
WINOUT:
IN AL,61H
AND AL,11111100B
OUT 61H,AL
;CLOSE SPEAKER------------------------
XOR AH,AH
INT 16H
MOV AH,4CH
INT 21H
DELAY PROC
MOV EAX,0FFFFFFFH
YANCHI:
DEC EAX
JNZ YANCHI
RET
DELAY ENDP
SDELAY PROC
MOV EAX,0AFFFFFFH
MUL DWORD PTR [DI]
LPB: DEC EAX
JNZ LPB
MOV AL,0
OUT 42H,AL
OUT 42H,AL
MOV EAX,0AFFFFFFH
LPE: DEC EAX
JNZ LPE
RET
SDELAY ENDP
CODES ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -