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

📄 snak.txt

📁 汇编写的模拟贪食蛇游戏的程序
💻 TXT
📖 第 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]

⌨️ 快捷键说明

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