📄 tss.asm
字号:
DATA SEGMENT PARA PUBLIC 'DATA'
X DW 40
Y DW 40
MUL_RAX DB 3
GEWEI DB 0 ;个位
SHIWEI DB 0 ;十位
BAIWEI DB 0 ;百位
QIANWEI DB 0 ;千位
WANWEI DB 0 ;万位
S_HEAD_X DW ? ;蛇头X轴坐标
S_HEAD_Y DW ? ;蛇头Y轴坐标
S_TAIL_X DW ? ;蛇尾X轴坐标
S_TAIL_Y DW ? ;蛇尾Y轴坐标
S_LENGTH DW 100 ;蛇初始长度为100
EGG_X DW 50 ;初始化蛋的X轴坐标
EGG_Y DW 150 ;初始化蛋的Y轴坐标
EGG_X_D DW ?
EGG_Y_R DW ?
S_DIRTIN DB 4 ;蛇头的方向,上1(X--,Y),下2(X++,Y)
; 左3(X,Y--),右4(X,Y++)
C_SPEED DB 'GAME SPEED(1-5):$'
SPEED DW 100
S_RADIX DB ?
TEMP_DIR DB 4
TEMPX DW ? ;蛇尾X轴坐标的临时存放单元
TEMPY DW ? ;蛇尾Y轴坐标的临时存放单元
CHAR DB 'Play Again?(Y/N)$'
UP DB ? ;上
DOWN DB ? ;下
LEFT DB ? ;左
RIGHT DB ? ;右
SUP EQU 48H ;上的扫描码
SDOWN EQU 50H ;下的扫描码
SLEFT EQU 4BH ;左的扫描码
SRIGHT EQU 4DH ;右的扫描码
SESC EQU 01H ;ESC的扫描码
SKEYN EQU 31H ;N的扫描码
SKEYL EQU 26H ;L的扫描码
SKEYS EQU 1FH ;S的扫描码
SKEYQ EQU 10H ;Q的扫描码
NGAME DB 'New game',0AH,0DH,'$'
LGAME DB 'Load game',0AH,0DH,'$'
SGAME DB 'Save game',0AH,0DH,'$'
QGAME DB 'Quit game$'
GMENU DW 8 DUP (?)
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DW 256 DUP (0)
STACK ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
PROC1 PROC FAR
ASSUME CS:CODE,DS:DATA,SS:STACK
START: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
AGAIN: MOV GEWEI,0
MOV SHIWEI,0
MOV BAIWEI,0
MOV QIANWEI,0
MOV WANWEI,0
MOV EGG_X,50
MOV EGG_Y,150
MOV S_DIRTIN,4
MOV TEMP_DIR,4
MOV AH,6
MOV BH,0
MOV AL,0
XOR CX,CX
MOV DX,184FH
INT 10H ;清屏
MOV AH,0
MOV AL,12H
INT 10H ;设置显示模式为640*480,16色
REINPUT: MOV AH,2
MOV BH,0
MOV DH,0
MOV DL,0
INT 10H
MOV AH,9
MOV DX,OFFSET C_SPEED
INT 21H
MOV SPEED,10
MOV AH,1
INT 21H
SUB AL,30H
CMP AL,1
JAE N23
MOV AH,2
MOV BH,0
MOV DH,0
MOV DL,16
INT 10H
MOV DX,' '
INT 21H
JMP REINPUT
N23: CMP AL,5
JBE N24
MOV AH,2
MOV BH,0
MOV DH,0
MOV DL,16
INT 10H
MOV DX,' '
INT 21H
JMP REINPUT
N24: MUL MUL_RAX
MOV CL,AL
SHL SPEED,CL ;设置游戏速度
MOV AH,0
MOV AL,12H
INT 10H
MOV CX,29
MOV DX,29
LH1: MOV AH,0CH
MOV BH,0
MOV AL,0FH
INT 10H
INC DX
CMP DX,449
JBE LH1
MOV DX,29
ADD CX,500
CMP CX,640
JA LV1
JB LH1
LV1: MOV DX,29
MOV CX,29
LV2: MOV AH,0CH
MOV BH,0
MOV AL,0FH
INT 10H
INC CX
CMP CX,529
JBE LV2
MOV CX,29
ADD DX,420
CMP DX,480
JA INIT
JB LV2 ;画边框,左上角坐标(29,29)右下角坐标(449,529)
INIT: MOV S_HEAD_X,350
MOV S_HEAD_Y,150
MOV S_TAIL_X,350
MOV S_TAIL_Y,50
MOV DX,S_TAIL_X
MOV CX,S_TAIL_Y
A: MOV AH,0CH
MOV AL,2
MOV BH,0
INT 10H
INC CX
CMP CX,150
JBE A ;初始蛇的位置
MOV DX,EGG_X
BCA: MOV CX,EGG_Y
ABC: MOV AH,0CH ;初始蛋的位置
MOV AL,0CH
MOV BH,0
INT 10H
INC CX
CMP CX,156
JBE ABC
INC DX
CMP DX,56
JBE BCA
;结束初始蛋的位置
MOV AH,2
MOV BH,0
MOV DH,3
MOV DL,68
INT 10H
MOV AH,9
MOV DX,OFFSET NGAME
INT 21H
MOV AH,2
MOV BH,0
MOV DH,4
MOV DL,68
INT 10H
MOV AH,9
MOV DX,OFFSET LGAME
INT 21H
MOV AH,2
MOV BH,0
MOV DH,5
MOV DL,68
INT 10H
MOV AH,9
MOV DX,OFFSET SGAME
INT 21H
MOV AH,2
MOV BH,0
MOV DH,6
MOV DL,68
INT 10H
MOV AH,9
MOV DX,OFFSET QGAME
INT 21H ;在右上角显示菜单
MOV AH,2
MOV BH,0
MOV DH,0
MOV DL,0
INT 10H
MOV AH,2
MOV DX,30H
INT 21H
MOV AH,2
MOV BH,0
MOV DH,0
MOV DL,1
INT 10H
MOV AH,2
MOV DX,30H
INT 21H
MOV AH,2
MOV BH,0
MOV DH,0
MOV DL,2
INT 10H
MOV AH,2
MOV DX,30H
INT 21H
MOV AH,2
MOV BH,0
MOV DH,0
MOV DL,3
INT 10H
MOV AH,2
MOV DX,30H
INT 21H
MOV AH,2
MOV BH,0
MOV DH,0
MOV DL,4
INT 10H
MOV AH,2
MOV DX,30H
INT 21H
JMP BG
TTTT: JMP RP
BG: INC X
CMP X,400
JBE CONT1
MOV X,40
CONT1: INC Y
CMP Y,500
JBE CONT2
MOV Y,40
CONT2: CMP S_DIRTIN,1
JZ S_UP
CMP S_DIRTIN,2
JZ S_DOWN
CMP S_DIRTIN,3
JZ S_LEFT
CMP S_DIRTIN,4
JZ S_RIGHT
S_UP: CMP TEMP_DIR,2
JNZ QUIT1
MOV S_DIRTIN,2
JMP S_DOWN
QUIT1: MOV BX,SPEED ;延迟
Y1: MOV CX,10 ;延迟
X1: LOOP X1
DEC BX
JNZ Y1
DEC S_HEAD_X
CMP S_HEAD_X,29
JBE TTTT
JMP NEXT
S_DOWN: CMP TEMP_DIR,1
JNZ QUIT2
MOV S_DIRTIN,1
JMP S_UP
QUIT2: MOV BX,SPEED ;延迟
Y2: MOV CX,10 ;延迟
X2: LOOP X2
DEC BX
JNZ Y2
INC S_HEAD_X
CMP S_HEAD_X,449
JAE RP
JMP NEXT
S_LEFT: CMP TEMP_DIR,4
JNZ QUIT3
MOV S_DIRTIN,4
JMP S_RIGHT
QUIT3: MOV BX,SPEED ;延迟
Y3: MOV CX,10 ;延迟
X3: LOOP X3
DEC BX
JNZ Y3
DEC S_HEAD_Y
CMP S_HEAD_Y,29
JBE RP
JMP NEXT
S_RIGHT: CMP TEMP_DIR,3
JNZ QUIT4
MOV S_DIRTIN,3
JMP S_LEFT
QUIT4: MOV BX,SPEED ;延迟
Y4: MOV CX,10 ;延迟
X4: LOOP X4
DEC BX
JNZ Y4
INC S_HEAD_Y
CMP S_HEAD_Y,529
JAE RP
JMP NEXT
JMP DDD
RP: JMP RP1
DDD:
NEXT: MOV AH,0DH
MOV BH,0
MOV DX,S_HEAD_X
MOV CX,S_HEAD_Y
INT 10H
CMP AL,2
JZ RP
MOV AH,0DH
MOV BH,0
MOV DX,S_HEAD_X
MOV CX,S_HEAD_Y
INT 10H
CMP AL,0CH
JZ ADDTAIL1
PHEAD: MOV AH,0CH
MOV AL,2
MOV BH,0
MOV DX,S_HEAD_X
MOV CX,S_HEAD_Y
INT 10H
JMP WWW
ADDTAIL1: JMP ADDTAIL
WWW:
MOV AX,S_TAIL_X
MOV TEMPX,AX
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -