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

📄 tui1.asm

📁 推箱子游戏汇编源程序,网上很少有,多多指教
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;××××××××××××××××××××××××××××××××
;×××		  推箱子游戏汇编源程序
;××××××××××××××××××××××××××××××××
;
;-----------------------------------------------------
          UP  EQU       48H         ;定义扫描码
        DOWN  EQU       50H
        LEFT  EQU       4BH
       RIGHT  EQU       4DH
          F1  EQU       3BH
          F2  EQU       3CH
          F3  EQU       3DH
          F4  EQU       3EH
          F5  EQU       3FH
          F8  EQU       42H
;---------------------------------------------------------------
;宏定义
;---------------------------------------------------------------
      SETPOS  MACRO     X0,Y0       ;设置光标位置
              MOV       BH,0
              MOV       DH,X0
              MOV       DL,Y0
              MOV       AH,2
              INT       10H
              ENDM
;---------------------------------------------------------------
   SHOW_CHAR  MACRO     X,Y,ATTR,CHA,NO         ;显示字符,x,y为坐标,attr为属性,
              PUSH      CX                      ;cha为字符ASCII码,no为重复次数
              SETPOS    X,Y
              MOV       AL,CHA
              MOV       BL,ATTR
              MOV       CX,NO
              MOV       AH,09H
              INT       10H
              POP       CX
              ENDM
;--------------------------------------------------------------
    INITCHAR  MACRO     CNO,PNO     ;初始化字符,cno为字符串,pno为行数
              LEA       BP,CNO
              MOV       CX,15
              MOV       DH,PNO
              MOV       DL,51
              MOV       BL,00000010B
              MOV       AL,1
              MOV       AH,13H
              INT       10H
              ENDM
;---------------------------------------------------------------
    INITSTOR  MACRO     CNO,PNO     ;初始化仓库,cno为字符串,pno为行数
              LEA       BP,CNO
              MOV       CX,20
              MOV       DH,PNO
              MOV       DL,20
              MOV       BL,00001011B
              MOV       AL,1
              MOV       AH,13H
              INT       10H
              ENDM
;---------------------------------------------------------------
  DISPLAYMSG  MACRO     MSG
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      DI
              MOV       AH,13H
              MOV       AL,0
              MOV       BL,00000100B
              MOV       BP,OFFSET MSG
              MOV       CX,51
              MOV       BH,0
              MOV       DH,23
              MOV       DL,3
              INT       10H
              POP       DI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              ENDM
;---------------------------------------------------------------
    SETCOLOR  MACRO     NO
              MOV       AH,0BH
              MOV       BH,00
              MOV       BL,NO
              INT       10H
              ENDM
;******************************************************
;* 堆栈段
;******************************************************
   STACK_SEG  SEGMENT   STACK
;================================================================================
   STACK_BUF  DW        120 DUP(?)
         TOP  EQU       $-STACK_BUF
   STACK_SEG  ENDS
;===============================================================================
;******************************************************
    DATA_SEG  SEGMENT   PARA
;=================================================================================
          S1  DB        201,9,40 DUP(205,9),203,9,19 DUP(205,9),187,9   ;s1-s3为画边框
          S2  DB        186,9,40 DUP(' ',9),186,9,19 DUP(' ',9),186,9
          S3  DB        200,9,40 DUP(205,9),202,9,19 DUP(205,9),188,9
          S4  DB        ' F1:',' ','Start Game' ;s4-s12为功能说明
          S5  DB        ' F2:',' ','Save      '
          S6  DB        ' F3:',' ','Load      '
          S7  DB        ' F4:',' ','Select    '
          S8  DB        ' F5:',' ','Option    '
          S9  DB        ' F8:',' ','Quit      '
         S10  DB        ' No.:','          '
         S11  DB        ' Game',' ','Time:','    '
         S12  DB        ' Current',' ','Time:',' '
    GAMENAME  DB        'Hammal Game'           ;游戏名
        YING  DB        11 DUP(223) ;阴影
          G1  DB        20 DUP(177) ;g1-g8为仓库ASCII码定义
          G2  DB        2 DUP(177),4 DUP(' '),4 DUP(177),4 DUP(' '),6 DUP(177)
          G3  DB        2 DUP(177),16 DUP(' '),2 DUP(177)
          G4  DB        2 DUP(177),4 DUP(176),4 DUP(177),2 DUP(234),2 DUP(219),4 DUP(' '),2 DUP(177)
          G5  DB        2 DUP(177),4 DUP(176),4 DUP(177),2 DUP(' '),2 DUP(219),4 DUP(' '),2 DUP(177)
          G6  DB        2 DUP(177),16 DUP(' '),2 DUP(177)
          G7  DB        2 DUP(177),4 DUP(' '),4 DUP(177),4 DUP(' '),6 DUP(177)
          G8  DB        20 DUP(177)
        MANX  DB        ?           ;小人的坐标
        MANY  DB        ?
   WELCOMMSG  DB        '                      Welcome to Hammal Game!      '
   SELECTMSG  DB        'Press F1 to case1,F2 to case2                      '
   OPTIONMSG  DB        'Press 0..9 to set color                            '
    ERRORMSG  DB        'It is error!                                       '       ;错误提示
        TEMP  DB        ?,?,?,?     ;临时变量
       ISWIN  DB        0           ;标志
      YOUWIN  DB        'Clever! You win!  PRESS ANY KEY TO CONTINUE.       '
        ERR1  DB        'Creat File Error!                                  '
        ERR2  DB        'Open File Error!                                   '
        ERR3  DB        'Read File Error!                                   '
        ERR4  DB        'Write File Error!                                  '
        ERR5  DB        'Close File Error!                                  '
     CORRECT  DB        'It is OK!                                          '
        FLAG  DB        0
      CASENO  DB        ?
;========================================================================================
    DATA_SEG  ENDS

;******************************************************
;时间数据段
;******************************************************
   TDATA_SEG  SEGMENT   PARA
;=======================================================================================
       COUNT  DW        0
         SEC  DW        0
         MIN  DW        0
       HOURS  DW        0
         RAN  DB        0
         RBN  DB        0
         RCN  DB        0
         RDN  DW        0
         REN  DW        0
         FLA  DW        0
;=======================================================================================
   TDATA_SEG  ENDS
;*****************************************************
;音乐数据段
;*****************************************************
   MDATA_SEG  SEGMENT   PARA
;======================================================================================
    MUS_FREQ  DW        330,392,330,294,330,392,330,294,330
              DW        330,392,330,294,262,294,330,392,294
              DW        262,262,220,196,196,220,262,294,330,262
              DW        -1
    MUS_TIME  DW        3 DUP(500),250,250,500,250,250,1000
              DW        2 DUP(500,500,250,250),1000
              DW        3 DUP(500,250,250),1000
;======================================================================================
   MDATA_SEG  ENDS
;*****************************************************
;文件数据段
;*****************************************************
   FDATA_SEG  SEGMENT   PARA
;=====================================================================================
        FHLE  DW        ?           ;文件句柄
       FNAME  DB        './data.dat',0          ;ASCIIZ串下段数据存入文件list.dat,(一共39字节)
      RELIST  LABEL     BYTE        ;将relist为标志的数据段存入指定文件
           X  DB        ?
           Y  DB        ?
;=====================================================================================
   FDATA_SEG  ENDS
;*****************************************************
;* 代码段
;******************************************************
    CODE_SEG  SEGMENT   PARA
;======================================================================================
        MAIN  PROC      FAR         ;主过程开始
              ASSUME    CS:CODE_SEG,ES:DATA_SEG
              ASSUME    SS:STACK_SEG
      START:
              
              MOV       AX,STACK_SEG
              MOV       SS,AX
              MOV       SP,TOP
              ASSUME    DS:DATA_SEG
              MOV       AX,DATA_SEG
              MOV       ES,AX
;------------------------------------------------------
              MOV       AH,0
              MOV       AL,3H
              INT       10H

              CALL      INIT
              CALL      STORAGE
              CALL      MUSIC
    GET_KEY:                        ;接受键入键
              MOV       AH,7
              INT       21H
              CMP       AL,0
              JE        GET_EC
              JMP       GET_KEY
     GET_EC:
              MOV       AH,7
              INT       21H
              CMP       AL,F1       ;根据扫描码转入相应处理过程
              JE        START_G
              CMP       AL,F4
              JE        SELECT_G
              CMP       AL,F8
              JE        EXIT
              JMP       GET_KEY
   SELECT_G:
              CALL      SELECTCASE
    START_G:                        ;游戏开始
              CALL      Gametime
              CALL      STARTGAME
;------------------------------------------------------
       EXIT:
              MOV       AX,4C00H
              INT       21H
        MAIN  ENDP                  ;主程序结束
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  SELECTCASE  PROC      NEAR        ;选择子程序
              DISPLAYMSG        SELECTMSG
    SEL_KEY:                        ;接受键入键
              MOV       AH,7
              INT       21H
              CMP       AL,0
              JE        SEL_EC
              JMP       SEL_KEY
     SEL_EC:
              MOV       AH,7
              INT       21H
              CMP       AL,F8
              JE        EXIT11
              CMP       AL,F2
              JE        SEL2
              CMP       AL,F1
              JE        SEL1
              JMP       SEL_KEY
     EXIT11:
              RET
       SEL1:  JMP       FAR PTR START_G
       SEL2:
              MOV       CASENO,32H
              SHOW_CHAR         13,58,00000011B,CASENO,1
              SHOW_CHAR         12,32,00001101B,' ',2
              SHOW_CHAR         13,24,00001101B,219,2
              SHOW_CHAR         11,30,10001110B,' ',2
              SHOW_CHAR         10,34,10001110B,234,2
              MOV       MANX,10
              MOV       MANY,34
              JMP       FAR PTR START_G
  SELECTCASE  ENDP
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        INIT  PROC      NEAR        ;初始化子过程
              MOV       AH,0BH
              MOV       BH,00
              MOV       BL,9
              INT       10H

              MOV       BP,OFFSET S1
              MOV       CX,62
              MOV       BH,0
              MOV       DH,4
              MOV       DL,9
              MOV       AL,3
              MOV       AH,13H
              INT       10H
              MOV       CX,17
              MOV       AX,5
  DOWN_LOOP:
              MOV       BP,OFFSET S2
              PUSH      CX
              MOV       CX,62
              MOV       BH,0
              MOV       DH,AL
              MOV       DL,9
              PUSH      AX
              MOV       AL,3
              MOV       AH,13H
              INT       10H
              POP       AX
              POP       CX
              INC       AX
              LOOP      DOWN_LOOP

              MOV       BP,OFFSET S3
              MOV       CX,62
              MOV       BH,0
              MOV       DH,22
              MOV       DL,9
              MOV       AL,3
              MOV       AH,13H
              INT       10H

              SHOW_CHAR         1,32,00000110B,222,1
              MOV       BP,OFFSET GAMENAME
              MOV       CX,12
              MOV       BH,0
              MOV       BL,01101110B
              MOV       DH,1
              MOV       DL,33
              MOV       AL,0
              MOV       AH,13H
              INT       10H
              SHOW_CHAR         1,44,00001000B,220,1

              MOV       BP,OFFSET YING
              MOV       CX,11
              MOV       BH,0
              MOV       BL,00001000B
              MOV       DH,2
              MOV       DL,34
              MOV       AL,0
              MOV       AH,13H
              INT       10H

              INITCHAR          S4,5
              INITCHAR          S5,6
              INITCHAR          S6,7
              INITCHAR          S7,8
              INITCHAR          S8,9
              INITCHAR          S9,11
              INITCHAR          S10,13
              INITCHAR          S11,15
              INITCHAR          S12,18
              DISPLAYMSG        WELCOMMSG
              MOV       FLAG,0
              MOV       ISWIN,0

              RET
        INIT  ENDP
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     STORAGE  PROC      NEAR        ;初始化仓库子过程
              INITSTOR          G1,8
              INITSTOR          G2,9
              INITSTOR          G3,10
              INITSTOR          G4,11
              INITSTOR          G5,12
              INITSTOR          G6,13
              INITSTOR          G7,14
              INITSTOR          G8,15
              SHOW_CHAR         11,22,00000111B,176,2
              SHOW_CHAR         11,24,00000111B,176,2
              SHOW_CHAR         12,22,00000111B,176,2
              SHOW_CHAR         12,24,00000111B,176,2
              SHOW_CHAR         10,32,00001101B,219,2
              SHOW_CHAR         11,32,00001101B,219,2
              SHOW_CHAR         12,32,00001101B,219,2
              SHOW_CHAR         13,32,00001101B,219,2

              MOV       CASENO,31H
              SHOW_CHAR         13,58,00000011B,CASENO,1

              MOV       AH,2
              MOV       BH,0
              MOV       DH,11
              MOV       DL,30
              INT       10H

              MOV       AH,09H
              MOV       AL,234
              MOV       BH,0
              MOV       BL,10001110B
              MOV       CX,2
              INT       10H

⌨️ 快捷键说明

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