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

📄 tss.asm

📁 汇编写的贪吃蛇游戏
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        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 + -