⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 贪吃蛇.asm

📁 汇编作的贪侈蛇 界面虽然不好 但很是实用的
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 MOV DI,SI
 ADD SI,3
 MOV AX,NUM
 DEC AX
 MOV BX,3
 MUL BX
 MOV CX,AX
 CLD
FORM201:
 LODSB
 STOSB
LOOP FORM201
 DEC DI
 MOV BYTE PTR [DI],2
 DEC SI
 MOV BYTE PTR [SI],2
 DEC SI
 DEC SI
 INC BYTE PTR [SI]
 MOV DH,[SI]
 MOV DL,[SI+1]
 MOV BL,01010101B
 CALL DISPCELL
 MOV BL,1
 CALL CLEAR0
 RET
FORM20 ENDP 

FORM21 PROC NEAR
 MOV SI,OFFSET PADMSG1
 MOV CH,[SI]
 MOV CL,[SI+1]
 MOV AX,NUM
 DEC AX
 MOV BX,3
 MUL BX
 ADD SI,AX
 MOV BH,[SI]
 MOV BL,[SI+1]
 ADD BH,1
 CMP BH,CH
 JNZ FORM211
 CMP BL,CL
 JNZ FORM211
 CALL FORM20
 JMP F21EXIT1
FORM211:
 MOV CON,1
F21EXIT1:
 RET
FORM21 ENDP

FORM23 PROC NEAR
 MOV BL,0
 CALL CLEAR0
 MOV SI,OFFSET PADMSG1
 MOV AX,NUM
 MOV BX,3
 MUL BX
 ADD SI,AX
 MOV AL,[SI-3]
 INC AL
 MOV [SI],AL
 MOV AL,[SI-2]
 MOV [SI+1],AL
 MOV BYTE PTR [SI-1],2
 MOV BYTE PTR [SI+2],2
 INC NUM
 MOV DH,[SI]
 MOV DL,[SI+1]
 MOV BL,01010101B
 CALL DISPCELL
 MOV BL,1
 CALL CLEAR0
 INC SCORE[4]
 MOV CX,05H
 MOV SI,04H
FORM231: CMP SCORE[SI],'9'
 JNG FORM232
 INC SCORE[SI-1]
 SUB SCORE[SI],0AH
FORM232: DEC SI
 LOOP FORM231
 CALL DISPSCORE
 CALL RANDOM
 RET
FORM23 ENDP
 
CHECK4 PROC NEAR
 MOV AL,CH
 SUB AL,4
 MOV BL,22
 MUL BL
 MOV SI,0
 ADD SI,AX
 SHR CL,1
 SUB CL,2
 MOV CH,0
 ADD SI,CX
 CMP FORM[SI],0
 JNZ CHECK41
 CALL FORM40
 JMP C4EXIT1
CHECK41:
 CMP FORM[SI],1
 JNZ CHECK42
 CALL FORM41
 JMP C4EXIT1
CHECK42:
 CMP FORM[SI],3
 JNZ CHECK43
 CALL FORM43
 JMP C4EXIT1
CHECK43:
 MOV CON,1
C4EXIT1:
 RET
CHECK4 ENDP

FORM40 PROC NEAR
 MOV BL,0
 CALL CLEAR0
 MOV SI,OFFSET PADMSG1
 MOV DH,[SI]
 MOV DL,[SI+1]
 CALL DISPCELL
 MOV DI,SI
 ADD  SI,3
 MOV AX,NUM
 DEC AX
 MOV BX,3
 MUL BX
 MOV CX,AX
 CLD
FORM401:
 LODSB
 STOSB
LOOP FORM401
 DEC DI
 MOV BYTE PTR [DI],4
 DEC SI
 MOV BYTE PTR [SI],4
 DEC SI
 DEC SI
 DEC BYTE PTR [SI]
 MOV DH,[SI]
 MOV DL,[SI+1]
 MOV BL,01010101B
 CALL DISPCELL
 MOV BL,1
 CALL CLEAR0
 RET
FORM40 ENDP

FORM41 PROC NEAR
 MOV SI,OFFSET PADMSG1
 MOV CH,[SI]
 MOV CL,[SI+1]
 MOV AX,NUM
 DEC AX
 MOV BX,3
 MUL BX
 ADD SI,AX
 MOV BH,[SI]
 MOV BL,[SI+1]
 SUB BH,1
 CMP BH,CH
 JNZ FORM411
 CMP BL,CL
 JNZ FORM411
 CALL FORM40
 JMP F41EXIT1
FORM411:
 MOV CON,1
F41EXIT1:
 RET
FORM41 ENDP

FORM43 PROC NEAR
 MOV BL,0
 CALL CLEAR0
 MOV SI,OFFSET PADMSG1
 MOV AX,NUM
 MOV BX,3
 MUL BX
 ADD SI,AX
 MOV AL,[SI-3]
 DEC AL
 MOV [SI],AL
 MOV AL,[SI-2]
 MOV [SI+1],AL
 MOV BYTE PTR [SI-1],4
 MOV BYTE PTR [SI+2],4
 INC NUM
 MOV DH,[SI]
 MOV DL,[SI+1]
 MOV BL,01010101B
 CALL DISPCELL
 MOV BL,1
 CALL CLEAR0
 INC SCORE[4]
 MOV CX,05H
 MOV SI,04H
FORM431: CMP SCORE[SI],'9'
 JNG FORM432
 INC SCORE[SI-1]
 SUB SCORE[SI],0AH
FORM432: DEC SI
 LOOP FORM431
 CALL DISPSCORE
 CALL RANDOM
 RET
FORM43 ENDP

CLEAR0 PROC NEAR
 MOV SI,OFFSET PADMSG1
 MOV CX,NUM
CLEAR01: 
 PUSH BX
 MOV DI,OFFSET FORM
 MOV AL,[SI]
 SUB AL,3
 MOV BL,22
 MUL BL
 ADD DI,AX
 MOV AL,[SI+1]
 SHR AL,1
 SUB AL,2
 MOV AH,0
 ADD DI,AX
 POP BX
 MOV [DI],BL
 ADD SI,3
LOOP CLEAR01
 RET
CLEAR0 ENDP

BLANK PROC NEAR
 MOV SI,0
 MOV AX,NUM
 DEC AX
 MOV BX,3
 MUL BX
 ADD SI,AX
 MOV CH,PADMSG1[SI]
 MOV CL,PADMSG1[SI+1]
 CMP PADMSG1[SI+2],1
 JNZ BLANK1
 CALL CHECK1
 JMP BEXIT1
BLANK1:
 CMP PADMSG1[SI+2],2
 JNZ BLANK2
 CALL  CHECK2
 JMP BEXIT1
BLANK2:
 CMP PADMSG1[SI+2],3
 JNZ BLANK3
 CALL CHECK3
 JMP BEXIT1
BLANK3:
 CALL CHECK4
BEXIT1:
 RET
BLANK ENDP

DELAY PROC NEAR
 PUSH CX
        MOV     CX,00FFH
LOOP20: LOOP    LOOP20 
 POP CX
 RET
DELAY ENDP
 
DISPSCORE PROC NEAR
 MOV AX,DATA
 MOV ES,AX
 MOV BP,OFFSET SCORE
 MOV CX,05H
        MOV     DX,0643H
 MOV BH,0H
 MOV AL,0H
 MOV BL,00110100B
 MOV AH,13H
 INT 10H
 RET
DISPSCORE ENDP 

DISPPAD PROC NEAR   ;BX BH=PAGE BL=COLOR
MOV SI,OFFSET PADMSG1
MOV CX,NUM
MOV BH,0

DISPPAD1:
MOV DH,[SI]
MOV DL,[SI+1]
CALL DISPCELL
ADD SI,3
LOOP DISPPAD1 

 RET
DISPPAD ENDP 

DISPCELL PROC NEAR;DH=ROW DL=COL BH=PAGE BL=COLOR
 PUSH AX
 PUSH BX
 PUSH CX
 PUSH DX
 PUSH DI
 PUSH SI
 MOV BP,OFFSET PADMSG
 MOV CX,02H
 MOV AX,1300H
 INT  10H
 CMP BL,0H
 JE SKIP20
 ;CALC ROW
 MOV AH,0H
 MOV AL,DH
        MOV     CL,16
 MUL CL
 MOV SI,AX
 ;CALC COL
 MOV AH,0H
 MOV AL,DL
 MOV CL,8
 MUL CL
 MOV DI,AX
 ;DRAW
 MOV AX,0C00H
 MOV DX,SI
        ADD     DX,15
 MOV CX,16
LOOP21: ADD CX,DI
 DEC CX
 INT 10H
 INC CX
 SUB CX,DI
 LOOP LOOP21
 
        MOV     DX,SI
        MOV     CX,15
        ADD     DI,15
LOOP22: PUSH    CX
        MOV     CX,DI
        INT     10H
        INC     DX
        POP     CX
        LOOP    LOOP22 

        SUB     DI,2
        DEC     DX
        MOV     CX,13
LOOP23: PUSH    CX
        DEC     DX
        MOV     CX,DI
        INT     10H
        SUB     CX,12
        MOV     AL,07H
        INT     10H
        MOV     AL,00H
        POP     CX
        LOOP    LOOP23 

        MOV     AX,0C07H
 MOV DX,SI
        ADD     DX,1
        MOV     CX,12
        SUB     DI,12
LOOP24: ADD     CX,DI
 INT 10H
 SUB CX,DI
        LOOP    LOOP24
 
SKIP20: POP SI
 POP DI
 POP DX
 POP CX
 POP BX
 POP AX
 RET
DISPCELL ENDP
 
CLS PROC NEAR
 MOV CX,0
 MOV DH,24
 MOV DL,79
 MOV BH,0
 MOV AX,600H
 INT 10H
 RET
CLS ENDP 

RANDOM PROC NEAR
RANDOM1:
 IN AX,40H
 INC AH
 INC AL
 AND AH,15
 MOV DH,AH
 AND AL,15
 MOV DL,AL
 IN AX,40H
 INC AH
 INC AL
 AND AH,3
 ADD DH,AH
 AND AL,3
 ADD DL,AL
 IN AX,40H
 INC AH
 INC AL
 AND AH,1
 ADD DH,AH
 AND AL,1
 ADD DL,AL
 
 MOV SI,0
 MOV AL,DH
 INC AL
 MOV BL,22
 MUL BL
 ADD SI,AX
 MOV AL,DL
 INC AL
 MOV AH,0
 ADD SI,AX
 CMP FORM[SI],0
 JNZ RANDOM1
 
 MOV FORM[SI],3
 ADD DH,4
 SHL DL,1
 ADD DL,6
 MOV BL,01011001B
 MOV BH,0
 CALL  DISPCELL
 RET
RANDOM ENDP
 


INITGAME PROC NEAR
 CALL CLS
 ;DRAW   TEXTFRAME
 MOV AX,DATA
 MOV ES,AX
        MOV     CX,10
 MOV BP,OFFSET SCOREMSG1
        MOV     DX,053CH
LOOP72: PUSH CX
        MOV     CX,13
 MOV AL,0H
 MOV BH,0H
        MOV     BL,01011010B
 MOV AH,13H
 INT 10H
        ADD     BP,13
 INC DH
 POP CX
 LOOP LOOP72
 
 ;DRAW BOARDFRAME
 MOV BP,OFFSET PADMSG
        MOV     CX,0044
        MOV     DX,0304H
 MOV BH,0H
 MOV AL,0H
 MOV BL,00110100B
 MOV AH,13H
 INT 10H
        MOV     DX,1804H
 INT 10H 

 MOV CX,20
        MOV     DX,0304H
LOOP4: MOV SI,CX
 MOV CX,02
 INC DH
 INT 10H
 MOV CX,SI
 LOOP LOOP4 

 MOV CX,20
        MOV     DX,032EH
INITGAME1: MOV SI,CX
 MOV CX,02
 INC DH
 INT 10H
 MOV CX,SI
 LOOP INITGAME1
 ;FORMAT SCORE
 MOV DI,OFFSET SCORE
 MOV AL,'0'
 MOV CX,05H
 REP STOSB
 
MOV CON,0
MOV NUM,4
MOV DI,OFFSET PADMSG1
MOV CX,1200
MOV AX,0
CLD
REP STOSB
MOV SI,OFFSET FORM
MOV CX,484
IN1:
 MOV AL,[SI]
 CMP AL,1
 JNZ IN2
 MOV BYTE PTR [SI],0
 JMP IN3
IN2:
 CMP AL,3
 JNZ IN3
 MOV BYTE PTR [SI],0
IN3:
 INC SI
 LOOP IN1

MOV SI,OFFSET FORM
ADD SI,46
MOV BYTE PTR [SI],1
INC SI
MOV BYTE PTR [SI],1
INC SI
MOV BYTE PTR[SI],1
INC SI
MOV BYTE PTR [SI],1

MOV SI,OFFSET PADMSG1
MOV AL,5
MOV [SI],AL
INC SI
MOV AL,8
MOV [SI],AL
INC SI
MOV AL,1
MOV [SI],AL
INC SI

MOV AL,5
MOV [SI],AL
INC SI
MOV AL,10
MOV [SI],AL
INC SI
MOV AL,1
MOV [SI],AL
INC SI

MOV AL,5
MOV [SI],AL
INC SI
MOV AL,12
MOV [SI],AL
INC SI
MOV AL,1
MOV [SI],AL
INC SI

MOV AL,5
MOV [SI],AL
INC SI
MOV AL,14
MOV [SI],AL
INC SI
MOV AL,1
MOV [SI],AL

MOV BL,01010101B
CALL DISPPAD
 RET
INITGAME ENDP 

CODE ENDS
 END START 

  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -