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

📄 贪吃蛇.asm

📁 汇编作的贪侈蛇 界面虽然不好 但很是实用的
💻 ASM
📖 第 1 页 / 共 2 页
字号:
DATA    SEGMENT
 SEGMENT1C DW 0
 OFF1C DW 0 
 SCORE DB 5 DUP('0'),'$'
 PADMSG DB 44 DUP(219)
 TMPMSG DB 25 DUP(?)
 STARTMSG1 DB 0DH,0AH,'SELECT SPEED.',0DH,0AH,'$'
 STARTMSG2 DB 20H,20H,'1. FAST',0DH,0AH,'$'
 STARTMSG3 DB 20H,20H,'2. MIDDLE',0DH,0AH,'$'
 STARTMSG4 DB 20H,20H,'3. SLOW',0DH,0AH,'$'
 STARTMSG5 DB 20H,20H,'0. EXIT',0DH,0AH,'$'
 ENDMSG  DB 0DH,0AH,'GOOD BYE!',0DH,0AH,'$'
 SCOREMSG1       DB      201,11 DUP(205),187
 SCOREMSG2       DB      186,'SCORE:     ',186
 SCOREMSG3       DB      204,11 DUP(205),185
 SCOREMSG4       DB      186,'LEFT  : A  ',186
 SCOREMSG5       DB      186,'RIGHT : D  ',186
 SCOREMSG6       DB      186,'UP    : W  ',186
 SCOREMSG7       DB      186,'DOWN  : S  ',186
 SCOREMSG8       DB      186,'-----------',186
 SCOREMSG9       DB      186,'EXIT  : ESC',186
 SCOREMSG10      DB      200,11 DUP(205),188
 SPEED DB 0
 TIM DB 0
 CON DB ?
 NUM DW ?
 PADMSG1 DB 400 DUP(?,?,?)
 FORM DB 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
      DB 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
DATA ENDS 

STACK SEGMENT STACK
 DB 200 DUP(?)
STACK ENDS 

CODE SEGMENT
 ASSUME  CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:  MOV AX,DATA
 MOV DS,AX
 PUSH DS
 ;GET INT 1C ADRESS
 MOV AL,1CH
 MOV AH,35H
 INT 21H
 MOV SEGMENT1C,ES
 MOV OFF1C,BX
 ;SET INT 1C ADRESS
 MOV DX,OFFSET INT1C
 MOV AX,SEG INT1C
 MOV DS,AX
 MOV AL,1CH
 MOV AH,25H
 INT 21H
 POP DS
 
GAMEOVER: 
 MOV AH,00H
 MOV AL,03H
 INT  10H
SELECTSPEED:
 MOV AH,09H
 MOV DX,OFFSET STARTMSG1
 INT 21H
 MOV DX,OFFSET STARTMSG2
 INT 21H
 MOV DX,OFFSET STARTMSG3
 INT 21H
 MOV DX,OFFSET STARTMSG4
 INT 21H
 MOV DX,OFFSET STARTMSG5
 INT 21H
 MOV AH,08H
 INT  21H
 SUB AL,'0'
 MOV CL,AL
 AND AL,3
 CMP AL,CL
        JNE     SELECTSPEED
        INC AL
 INC CL
 MUL CL
        CMP     AL,1H
        JE EXIT1
 MOV SPEED,AL
  
 ;SET GRAPHICS
 MOV AH,00H
 MOV AL,12H
 INT 10H
 MOV AH,0BH
 MOV BH,01
 MOV BL,00H
 INT 10H
 ;START  GAME
 CALL INITGAME
 CALL DISPSCORE
 CALL RANDOM
 CALL  DELAY
 
MOV TIM,0H
LOOP1:
 STI
 CMP CON,0
 JZ LOOP11
 MOV DL,07H
 MOV AH,02H
 INT  21H
 MOV AH,08H
 INT  21H
 JMP GAMEOVER
LOOP11:
 
 MOV AL,TIM
 CMP AL,SPEED
 JG TIME
 JMP LOOP1

TIME: 
 MOV TIM,0H
 MOV  AH,1
 INT  16H
 JNZ  FLAG3
 CALL BLANK 
  JMP LOOP1
FLAG3:
 MOV  AH,0
 INT  16H
 PUSH AX
 MOV  AH,1
 INT  16H
JZ FLAG2
  POP AX
 JMP FLAG3
 EXIT1:
JMP EXIT
FLAG2:
  POP AX
   CMP  AL,1BH
   JZ  EXIT
   CMP AL,'a'
   JZ KA
   CMP AL,'s'
   JZ KS
   CMP AL,'d'
   JZ KD
   CMP AL,'w'
   JZ KW
   CALL BLANK
   JMP LOOP1
KA:
 CALL LEFT
 JMP  LOOP1
KS:
CALL DOWN   
 JMP LOOP1
KD:
CALL  RIGHT
 JMP LOOP1
KW:
 CALL  UP
 JMP LOOP1

EXIT: 
 ;SET GRAPHICS
 MOV AX,0003H
 INT  10H
 MOV AX,DATA
 MOV DS,AX
 MOV DX,OFFSET ENDMSG
 MOV AH,09H
 INT  21H
 ;SET INT 1C ADRESS
 MOV DX,OFF1C
 MOV AX,SEGMENT1C
 MOV DS,AX
 MOV AL,1CH
 MOV AH,25H
 INT 21H
 MOV AX,4C00H
 INT 21H 

INT1C PROC
 STI
 PUSH AX
 PUSH DX
 MOV AX,DATA
 MOV DS,AX
 INC TIM
 POP  DX
 POP AX
 IRET
INT1C ENDP 

LEFT 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 LEFT1
 CALL CHECK1
 JMP LEXIT1
LEFT1:
 CALL CHECK3
LEXIT1:
 RET
LEFT ENDP

RIGHT 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],3
 JNZ RIGHT1
 CALL CHECK3
 JMP REXIT1
RIGHT1:
 CALL CHECK1
REXIT1:
 RET
RIGHT ENDP

CHECK1 PROC NEAR
 MOV AL,CH
 SUB AL,3
 MOV BL,22
 MUL BL
 MOV SI,0
 ADD SI,AX
 ADD CL,2
 SHR CL,1
 SUB CL,2
 MOV CH,0
 ADD SI,CX
 CMP FORM[SI],0
 JNZ CHECK11
 CALL FORM10
 JMP C1EXIT1
CHECK11:
 CMP FORM[SI],1
 JNZ CHECK12
 CALL FORM11
 JMP C1EXIT1
CHECK12:
 CMP FORM[SI],3
 JNZ CHECK13
 CALL FORM13
 JMP C1EXIT1
CHECK13:
 MOV CON,1
C1EXIT1:
 RET
CHECK1 ENDP


FORM10 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
FORM101:
 LODSB
 STOSB
LOOP FORM101
 DEC DI
 MOV BYTE PTR [DI],1
 DEC SI
 MOV BYTE PTR [SI],1
 DEC SI
 ADD BYTE PTR [SI],2
 MOV DH,[SI-1]
 MOV DL,[SI]
 MOV BL,01010101B
 CALL DISPCELL
 MOV BL,1
 CALL CLEAR0
 RET
FORM10 ENDP
 

FORM11 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 BL,2
 CMP BH,CH
 JNZ FORM111
 CMP BL,CL
 JNZ FORM111
 CALL FORM10
 JMP F11EXIT1
FORM111:
 MOV CON,1
F11EXIT1:
 RET
FORM11 ENDP

FORM13 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]
 MOV [SI],AL
 MOV AL,[SI-2]
 ADD AL,2
 MOV [SI+1],AL
 MOV BYTE PTR [SI-1],1
 MOV BYTE PTR [SI+2],1
 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
FORM131: CMP SCORE[SI],'9'
 JNG FORM132
 INC SCORE[SI-1]
 SUB SCORE[SI],0AH
FORM132: DEC SI
 LOOP FORM131
 CALL DISPSCORE
 CALL RANDOM
 RET
FORM13 ENDP

CHECK3 PROC NEAR
 MOV AL,CH
 SUB AL,3
 MOV BL,22
 MUL BL
 MOV SI,0
 ADD SI,AX
 SUB CL,2
 SHR CL,1
 SUB CL,2
 MOV CH,0
 ADD SI,CX
 CMP FORM[SI],0
 JNZ CHECK31
 CALL FORM30
 JMP C3EXIT1
CHECK31:
 CMP FORM[SI],1
 JNZ CHECK32
 CALL FORM31
 JMP C3EXIT1
CHECK32:
 CMP FORM[SI],3
 JNZ CHECK33
 CALL FORM33
 JMP C3EXIT1
CHECK33:
 MOV CON,1
C3EXIT1:
 RET
CHECK3 ENDP

FORM30 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
FORM301:
 LODSB
 STOSB
LOOP FORM301
 DEC DI
 MOV BYTE PTR [DI],3
 DEC SI
 MOV BYTE PTR [SI],3
 DEC SI
 SUB BYTE PTR [SI],2
 MOV BL,01010101B
 MOV DH,[SI-1]
 MOV DL,[SI]
 MOV BL,01010101B
 CALL DISPCELL
 MOV BL,1
 CALL CLEAR0
 RET
FORM30 ENDP

FORM31 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 BL,2
 CMP BH,CH
 JNZ FORM311
 CMP BL,CL
 JNZ FORM311
 CALL FORM30
 JMP F31EXIT1
FORM311:
 MOV CON,1
F31EXIT1:
 RET
FORM31 ENDP
 
FORM33 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]
 MOV [SI],AL
 MOV AL,[SI-2]
 SUB AL,2
 MOV [SI+1],AL
 MOV BYTE PTR [SI-1],3
 MOV BYTE PTR [SI+2],3
 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
FORM331: CMP SCORE[SI],'9'
 JNG FORM332
 INC SCORE[SI-1]
 SUB SCORE[SI],0AH
FORM332: DEC SI
 LOOP FORM331
 CALL DISPSCORE
 CALL RANDOM
 RET
FORM33 ENDP

DOWN 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],4
 JNZ DOWN1
 CALL CHECK4
 JMP DEXIT1
DOWN1:
 CALL CHECK2
DEXIT1:
 RET
DOWN ENDP

UP 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],2
 JNZ UP1
 CALL CHECK2
 JMP UEXIT1
UP1:
 CALL CHECK4
UEXIT1:
 RET
UP ENDP
 
CHECK2 PROC NEAR
 MOV AL,CH
 SUB AL,2
 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 CHECK21
 CALL FORM20
 JMP C2EXIT1
CHECK21:
 CMP FORM[SI],1
 JNZ CHECK22
 CALL FORM21
 JMP C2EXIT1
CHECK22:
 CMP FORM[SI],3
 JNZ CHECK23
 CALL FORM23
 JMP C2EXIT1
CHECK23:
 MOV CON,1
C2EXIT1:
 RET
CHECK2 ENDP

FORM20 PROC NEAR
 MOV BL,0
 CALL CLEAR0
 MOV SI,OFFSET PADMSG1
 MOV DH,[SI]
 MOV DL,[SI+1]
 CALL DISPCELL

⌨️ 快捷键说明

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