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

📄 tui1.asm

📁 推箱子游戏汇编源程序,网上很少有,多多指教
💻 ASM
📖 第 1 页 / 共 3 页
字号:
              MOV       MANX,11
              MOV       MANY,30

              MOV       AH,1
              MOV       CH,4
              MOV       CL,0
              INT       10H

              RET
     STORAGE  ENDP
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   STARTGAME  PROC      NEAR        ;游戏子过程
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      DI

              MOV       CH,MANX
              MOV       CL,MANY
   GET_KEY2:
              MOV       DX,CX
              MOV       AH,0
              INT       16H

              MOV       TEMP,-1
              MOV       TEMP+1,-1

              CMP       AH,UP
              JNZ       NOT_UP
              DEC       CH
              JMP       MOVEMAN
     NOT_UP:  CMP       AH,DOWN
              JNZ       NOT_DOWN
              INC       CH
   NOT_DOWN:  CMP       AH,RIGHT
              JNZ       NOT_RIGHT
              INC       CL
  NOT_RIGHT:  CMP       AH,LEFT
              JNZ       MOVEMAN
              DEC       CL
    MOVEMAN:
              CMP       CH,DH
              JL        ISUP
              JNLE      ISDOWN
              CMP       CL,DL
              JL        ISLEFT
              JNLE      ISRIGHT
              JMP       ERROR
       ISUP:
              MOV       TEMP+1,1
     ISDOWN:
              SETPOS    CH,CL
              MOV       BH,0
              MOV       AH,8
              INT       10H
              CMP       AL,177
              SETPOS    MANX,MANY
              JNZ       NEXTJMP
              CALL      BEEPIT
              ADD       CH,TEMP+1
              JMP       GET_KEY2
    NEXTJMP:
              CMP       AL,219
              JE        NEXTJMP2
              MOV       DI,1
              JMP       NEXT
     ISLEFT:
              MOV       TEMP,1
              SETPOS    CH,CL
              MOV       BH,0
              MOV       AH,8
              INT       10H
              CMP       AL,177
              SETPOS    MANX,MANY
              JNZ       NEXTJMP2
              CALL      BEEPIT
              ADD       CL,TEMP
              JMP       GET_KEY2
    ISRIGHT:
              INC       CL
              SETPOS    CH,CL
              DEC       CL
              MOV       BH,0
              MOV       AH,8
              INT       10H
              CMP       AL,177
              SETPOS    MANX,MANY
              JNZ       NEXTJMP2
              CALL      BEEPIT
              ADD       CL,TEMP
              JMP       GET_KEY2
   NEXTJMP2:
              CMP       AL,219
              JE        CAGEMOV
              MOV       DI,2
       NEXT:
              CALL      SUREIT
              MOV       MANX,CH
              MOV       MANY,CL
              SHOW_CHAR         23,3,00000000B,' ',51
              JMP       GET_KEY2
      EXIT2:
              POP       DI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
;-----------------------------
    CAGEMOV:
              CALL      MOVCASE
              JMP       NEXT
    RESTART:
              JMP       FAR PTR START
     SAVE_G:  CALL      SAVEGAME
              JMP       GET_KEY2
     LOAD_G:  CALL      LOADGAME
              JMP       GET_KEY2
      ERROR:
              CMP       AH,F1
              JE        RESTART
              CMP       AH,F8
              JE        EXIT2
              CMP       AH,F2
              JE        SAVE_G
              CMP       AH,F3
              JE        LOAD_G
              CMP       AH,F5
              JE        OPT

              CALL      BEEPIT
              DISPLAYMSG        ERRORMSG
              JMP       GET_KEY2
        OPT:  CALL      OPTION1
              JMP       GET_KEY2
   STARTGAME  ENDP
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      SUREIT  PROC      NEAR        ;保证小人不擦掉放箱子地方子程序
              PUSH      AX
              CMP       FLAG,1
              JNE       NEXT10
              CALL      MOVEIT
              SHOW_CHAR         MANX,MANY,00000111B,176,2
              MOV       FLAG,0
      NEXT8:  POP       AX
              CMP       AL,176
              JNE       NEXT9
              MOV       FLAG,1
      NEXT9:  RET
     NEXT10:  CALL      MOVEIT
              JMP       NEXT8
      SUREIT  ENDP
;-------------------------------------------------------------
      MOVEIT  PROC      NEAR        ;移动小人子过程
              CMP       DI,1
              JNE       MOVETWO
              SHOW_CHAR         MANX,MANY,10001110B,' ',2
              SHOW_CHAR         CH,CL,10001110B,234,2
              JMP       EXIT3
    MOVETWO:
              SHOW_CHAR         MANX,MANY,10001110B,' ',2
              CMP       TEMP,-1
              JNE       NEXT2
              INC       CL
              JMP       CON
      NEXT2:
              DEC       CL
        CON:
              SHOW_CHAR         CH,CL,10001110B,234,2
;---------------------------------------------------------
      EXIT3:
              RET
      MOVEIT  ENDP
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      MOVECA  PROC      NEAR        ;移动箱子子过程
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              CMP       DI,1
              JNE       MOVETWO2
              MOV       TEMP+2,CH
              SHOW_CHAR         TEMP+2,MANY,10001110B,' ',2
              MOV       BH,TEMP+1
              SUB       TEMP+2,BH
              SHOW_CHAR         TEMP+2,MANY,00001101B,219,2
              JMP       EXIT4
   MOVETWO2:
              MOV       TEMP+3,CL
              MOV       BH,TEMP
              SUB       TEMP+3,BH
              SHOW_CHAR         MANX,TEMP+3,10001110B,' ',2
              CMP       TEMP,-1
              JNE       NEXT5
              ADD       TEMP+3,2
              JMP       CON2
      NEXT5:
              SUB       TEMP+3,2
       CON2:
              SHOW_CHAR         MANX,TEMP+3,00001101B,219,2
      EXIT4:
              CMP       ISWIN,4
              JE        WIN
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
        WIN:
              DISPLAYMSG        YOUWIN
              CALL      MUSIC
              MOV       ISWIN,0
              MOV       AH,7
              INT       21H
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              JMP       START
      MOVECA  ENDP
;-------------------------------------------------------
     MOVCASE  PROC      NEAR        ;遇到箱子时的移动情况
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              CMP       CH,DH
              JL        ISUP2
              JNLE      ISDOWN2
              CMP       CL,DL
              JL        ISLEFT2
              JMP       ISRIGHT2
      ISUP2:
    ISDOWN2:
              MOV       TEMP+2,CH
              MOV       BH,TEMP+1
              SUB       TEMP+2,BH
              SETPOS    TEMP+2,CL
              MOV       BH,0
              MOV       AH,8
              INT       10H
              SETPOS    MANX,MANY
              CMP       AL,219
              JZ        CASE1
              CMP       AL,177
              JNZ       NEXTJMP3
      CASE1:
              CALL      BEEPIT
              ADD       CH,TEMP+1
              JMP       FAR PTR GET_KEY2
   NEXTJMP3:
              MOV       DI,1
              CMP       AL,176
              JE        CONTINUE
              JMP       NEXT4
    ISLEFT2:
              MOV       TEMP+3,CL
              DEC       TEMP+3
              DEC       TEMP+3
              SETPOS    CH,TEMP+3
              MOV       BH,0
              MOV       AH,8
              INT       10H
              SETPOS    MANX,MANY
              MOV       DI,2
   CONTINUE:
              CMP       AL,176
              JE        NEXTJMP4
              CMP       AL,219
              JZ        CASE2
              CMP       AL,177
              JNZ       NEXTJMP4
      CASE2:
              CALL      BEEPIT
              ADD       CL,TEMP
              JMP       FAR PTR GET_KEY2
   ISRIGHT2:
              MOV       TEMP+3,CL
              ADD       TEMP+3,3
              SETPOS    CH,TEMP+3
              MOV       BH,0
              MOV       AH,8
              INT       10H
              SETPOS    MANX,MANY
              MOV       DI,2
              CMP       AL,219
              JZ        CASE3
              CMP       AL,177
              JNZ       NEXTJMP4
      CASE3:
              CALL      BEEPIT
              ADD       CL,TEMP
              JMP       FAR PTR GET_KEY2
   NEXTJMP4:
              CMP       AL,176
              JE        FINISH
      NEXT4:
              CALL      MOVECA
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
     FINISH:
              ADD       ISWIN,1
              JMP       NEXT4
     MOVCASE  ENDP
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    GAMETIME  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      DI
              PUSH      DS
              PUSH      ES
              ASSUME    DS:TDATA_SEG
              MOV       AX,TDATA_SEG
              MOV       DS,AX

              MOV       AL,1CH
              MOV       AH,35H
              INT       21H
              PUSH      DS
              PUSH      DX

              PUSH      DS
              MOV       DX,OFFSET CLINT
              MOV       AX,SEG CLINT
              MOV       DS,AX
              MOV       AL,1CH
              MOV       AH,25H
              INT       21H
              POP       DS
;              IN        AL,21h
;              AND       AL,0feh
;              OUT       21h,AL
              STI
      AGAIN:
              CALL      STARTGAME
              POP       DX
              POP       DS
              MOV       AL,1CH
              MOV       AH,25H
              INT       21H
              POP       ES
              POP       DS
              POP       DI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
    GAMETIME  ENDP
;---------------------------------------------------------------------
       CLINT  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      DI
              PUSH      DS
              MOV       BX,COUNT
              MOV       DS,BX
              LEA       BX,COUNT
              INC       WORD PTR[BX]
              CMP       WORD PTR[BX],18
              JNE       EXIT5
              CALL      INCTEST
      EXIT5:  MOV       AL,20H
              OUT       20H,AL
              POP       DS
              POP       DI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              IRET
       CLINT  ENDP
;---------------------------------------------------------

⌨️ 快捷键说明

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