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

📄 tui1.asm

📁 推箱子游戏汇编源程序,网上很少有,多多指教
💻 ASM
📖 第 1 页 / 共 3 页
字号:
     INCTEST  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      DI
              MOV       WORD PTR[BX],0
              ADD       BX,2
              INC       WORD PTR[BX]
              CMP       WORD PTR[BX],60
              JNE       RETURN
              CALL      INCTEST
     RETURN:
              CALL      SYSTIME
              MOV       AH,2
              MOV       DH,16
              MOV       DL,54
              INT       10H
              MOV       AH,02H
              MOV       BX, DS:WORD PTR HOURS
              CALL      CONVERT
              MOV       AH,02H
              MOV       DL,3AH
              INT       21H
              MOV       AH,02H
              MOV       BX,DS:WORD PTR MIN
              CALL      CONVERT
              MOV       AH,02H
              MOV       DL,3AH
              INT       21H
              MOV       AH,02H
              MOV       BX,DS:WORD PTR SEC
              CALL      CONVERT
              POP       DI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
     INCTEST  ENDP
     CONVERT  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              MOV       CX,10D
              MOV       AX,BX
              MOV       DX,0
              DIV       CX
              MOV       BX,DX

              MOV       DL,AL
              ADD       DL,30H
              MOV       AH,02H
              INT       21H
              MOV       DL,BL
              ADD       DL,30H
              MOV       AH,02H
              INT       21H
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
     CONVERT  ENDP
;------------------------------------------------------------
     SYSTIME  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      DI
              PUSH      DS
         EN:
              SETPOS    19,54
              MOV       AH,2
              INT       1AH
              MOV       RAN,CH
              MOV       RBN,CL
              MOV       RCN,DH
              MOV       BH,0H
              MOV       BL,RAN
              CALL      BINIDEC

              MOV       AH,02H
              MOV       DL,':'
              INT       21H

              MOV       BH,0H
              MOV       BL,RBN
              CALL      BINIDEC

              MOV       AH,02H
              MOV       DL,':'
              INT       21H

              MOV       BH,0H
              MOV       BL,RCN
              CALL      BINIDEC
              MOV       REN,10000
       DELY:
              DEC       REN
              MOV       RDN,1000
      DELY1:
              DEC       RDN
              CMP       RDN,0
              JNE       DELY1
              CMP       REN,0
              JNE       DELY
      EXIT8:  POP       DS
              POP       DI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
     SYSTIME  ENDP
     BINIDEC  PROC      NEAR
              MOV       FLA,0
              MOV       CX,1000H
              CALL      DEC_DIV
              MOV       CX,100H
              CALL      DEC_DIV
              MOV       CX,10H
              CALL      DEC_DIV
              MOV       FLA,1H
              MOV       CX,1H
              CALL      DEC_DIV
              MOV       DL,20H
              MOV       AH,02H      ;输出空格
              INT       21H
              RET
     BINIDEC  ENDP
     DEC_DIV  PROC      NEAR
              MOV       AX,BX
              MOV       DX,0
              DIV       CX
              MOV       BX,DX
              CMP       AL,0
              JE        CMPFLAG
              JNE       SETFLAG1
    SETFLAG1:
              MOV       FLA,1
    CMPFLAG:
              CMP       FLA,0
              JNE       PRINTAL
              JE        NOTPRINTAL
    PRINTAL:
              MOV       DL,AL
              ADD       DL,30H
              MOV       AH,02H
              INT       21H
 NOTPRINTAL:
              RET                   ;跳出
     DEC_DIV  ENDP
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      BEEPIT  PROC      NEAR        ; 定义意外事件声音
              MOV       DI,800      ;定义声音频率
              MOV       BX,100
              CALL      BEEP        ;定义延迟时间
              RET
      BEEPIT  ENDP
        BEEP  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      DI
              MOV       AL,0B6H
              OUT       43H,AL
              MOV       DX,12H
              MOV       AX,533H*896
              DIV       DI
              OUT       42H,AL
              MOV       AL,AH
              OUT       42H,AL
              IN        AL,61H
              MOV       AH,AL
              OR        AL,3
              OUT       61H,AL
      WAIT1:  MOV       CX,0EEEEH
      DELAY:  LOOP      DELAY
              DEC       BX
              JNZ       WAIT1
              MOV       AL,AH
              OUT       61H,AL
              POP       DI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
        BEEP  ENDP
;-------------------------------------------------------
       MUSIC  PROC      NEAR
              ASSUME    DS:MDATA_SEG
              MOV       DX,MDATA_SEG
              MOV       DS,DX
              LEA       SI,MUS_FREQ
;              LEA       BP,DS: MUS_TIME
       FREQ:  MOV       DI,[SI]
              CMP       DI,-1
              JE        END_MUS
;              MOV       BX,DS:[BP]
              CALL      BEEP
              ADD       SI,2
              ADD       BP,2
              JMP       FREQ
    END_MUS:
              RET
       MUSIC  ENDP
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      OPTION1  PROC      NEAR        ;选项模块
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      DI
              DISPLAYMSG        OPTIONMSG
              MOV       AH,0
              INT       16H
              CMP       AH,2
              JE        C1
              CMP       AH,3
              JE        C2
              CMP       AH,4
              JE        C3
              CMP       AH,5
              JE        C4
              CMP       AH,6
              JE        C5
              CMP       AH,7
              JE        C6
              CMP       AH,8
              JE        C7
              CMP       AH,9
              JE        C8
              CMP       AH,10
              JE        C9
              CMP       AH,11
              JE        C0
         C1:  SETCOLOR          0
              JMP       EXIT12
         C2:  SETCOLOR          12
              JMP       EXIT12
         C3:  SETCOLOR          13
              JMP       EXIT12
         C4:  SETCOLOR          14
              JMP       EXIT12
         C5:  SETCOLOR          11
              JMP       EXIT12
         C6:  SETCOLOR          5
              JMP       EXIT12
         C7:  SETCOLOR          6
              JMP       EXIT12
         C8:  SETCOLOR          4
              JMP       EXIT12
         C9:  SETCOLOR          2
              JMP       EXIT12
         C0:  SETCOLOR          9
     EXIT12:
              SHOW_CHAR         23,3,00000000B,' ',51
              POP       DI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
      OPTION1  ENDP
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    LOADGAME  PROC      NEAR
              PUSH      AX          ;文件操作子过程
              PUSH      BX
              PUSH      DX
              PUSH      CX
              ASSUME    DS:FDATA_SEG
              MOV       AX,FDATA_SEG
              MOV       DS,AX
              MOV       AH,3DH
              MOV       AL,00
              LEA       DX,FNAME
              INT       21H
              JC        OPERR
              MOV       FHLE,AX     ;open file for read
              JMP       GO_ON
      OPERR:
              DISPLAYMSG        ERR2
              JMP       EXITL
      GO_ON:
              MOV       AH,3FH
              MOV       BX,FHLE
              MOV       CX,2
              LEA       DX,RELIST
              INT       21H         ;read it
              JC        RERR

              MOV       AH,3EH
              MOV       BX,FHLE
              INT       21H         ;close the file
              JC        CLOSEERR
              CALL      OK
              POP       CX
              MOV       CH,MANX
              MOV       CL,MANY
              JMP       EXITL
   CLOSEERR:
              DISPLAYMSG        ERR5
              JMP       EXITL
       RERR:  DISPLAYMSG        ERR3
      EXITL:
              POP       DX
              POP       BX
              POP       AX
              RET
    LOADGAME  ENDP
;------------------------------------------------------------------------
    SAVEGAME  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              ASSUME    DS:FDATA_SEG
              MOV       AX,FDATA_SEG
              MOV       DS,AX
              MOV       AH,ES:MANX
              MOV       X,AH
              MOV       AH,ES:MANY
              MOV       Y,AH
              MOV       AH,3DH
              MOV       AL,01
              LEA       DX,FNAME
              INT       21H
              JC        OERR
              MOV       FHLE,AX     ;open for write
              JMP       GOON
       OERR:
              DISPLAYMSG        ERR2
              JMP       EXITS
       GOON:  MOV       AH,40H
              MOV       BX,FHLE
              MOV       CX,2
              LEA       DX,RELIST
              INT       21H         ;write file
              JC        WERR
              MOV       AH,3EH
              MOV       BX,FHLE
              INT       21H         ;close the file
              JC        CLSERR
              CALL      OK
              JMP       EXITS
     CLSERR:
              DISPLAYMSG        ERR5
              JMP       EXITS
       WERR:  DISPLAYMSG        ERR4
      EXITS:  POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
    SAVEGAME  ENDP
;--------------------------------------------------------
          OK  PROC      NEAR
              SETPOS    MANX,MANY
              SHOW_CHAR         MANX,MANY,10001110B,' ',2
              MOV       AH,X
              MOV       ES:MANX,AH
              MOV       AH,Y
              MOV       ES:MANY,AH
              SETPOS    MANX,MANY
              SHOW_CHAR         MANX,MANY,10001110B,234,2
              DISPLAYMSG        CORRECT
              RET
          OK  ENDP
;===============================================================================
    CODE_SEG  ENDS
;******************************************************
              END       START       ;程序结束


⌨️ 快捷键说明

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