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

📄 course.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
              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
              
              MOV       manx,11

⌨️ 快捷键说明

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