?? 簡單動畫程序設計終極版.asm
字號:
;***********************************************
; 作者 千斤撥四兩 *
; 程序名 簡單音樂動畫 *
; 編程語言 windows 匯編 *
;***********************************************
OUTSTR MACRO ROW,TIER,STR ;row為行,tier為列,STR為字符串名
MOV AH,2
MOV BH,0
MOV DH,ROW
MOV DL,TIER
INT 10H
MOV DX,OFFSET STR
MOV AH,9
INT 21H
ENDM
CLEARSCREEN MACRO ROW0,TIER0,ROW1,TIER1
MOV CL,TIER0
MOV CH,ROW0
MOV DL,TIER1
MOV DH,ROW1
MOV BH,0
MOV AX,0600H
INT 10H
ENDM
DRAW MACRO ;畫圖宏定義
LOCAL DRAW_1,DRAW_EXIT
MOV AL,[SI]
CMP AL,0
JNE DRAW_1
CALL LINE ;畫直線
JMP DRAW_EXIT
DRAW_1: CMP AL,1
JNE DRAW_EXIT
CALL ROUND ;畫圓
DRAW_EXIT:
ENDM
POINT MACRO
LOCAL POINT_1
PUSH CX
PUSH DX
ADD CX,PRESENT_X
ADD DX,PRESENT_Y
CMP CX,0280H
JAE POINT_1
MOV AH,0CH
MOV AL,[SI+1]
MOV BH,0
INT 10H
POINT_1: POP DX
POP CX
ENDM
CLEAR MACRO
MOV CL,4
MOV AX,PRESENT_Y
SHR AX,CL
MOV CH,AL
PUSH CX
MOV CX,3
MOV AX,PRESENT_X
SHR AX,CL
POP CX
MOV CL,AL
MOV DX,CX
ADD DX,AREA
MOV BH,0
MOV AX,0600H
INT 10H
ENDM
STACKS SEGMENT STACK ;堆棧段
DW 128 DUP(?)
STACKS ENDS
DATAS SEGMENT
PRESENT_X DW 0
PRESENT_Y DW 100
T DW ?
XE DW ?
YE DW ?
DISTANCE DW ?
INCX DW ?
INCY DW ?
INCDI DW ?
DELTA_X DW ?
DELTA_Y DW ?
COUNT DW ?
F DW ?
TIMESTR DB 'System time:'
TIME DB 5 DUP(?),'$'
TIME1 DW ?
TIME2 DW ?
AREA DW 0610H
LINES DW ?
STATE_MUSIC DB 0
STATE_PICTURE DB 0
DATA_BIRD DW 0101H,30,34,14,0
DW 0101H,11,26,7,0
DW 0201H,10,23,2,0
DW 0200H,0,36,7,33
DW 0200H,0,36,3,28
DW 0200H,0,36,6,31
DW 0100H,28,22,32,0
DW 0100H,32,22,48,6
DW 0100H,32,0,48,6
DW 0100H,42,30,62,18
DW 0100H,62,18,68,34
DW 0100H,44,34,68,34
DW 0600H,35,46,54,52
DW 0600H,38,44,54,50
DATA_CAR DW 0101H,50,90,10,0
DW 0101H,150,90,10,0
DW 0100H,0,90,204,90
DW 0201H,50,90,2,0
DW 0201H,150,90,2,0
DW 0101H,204,32,4,0
DW 0100H,0,42,24,0
DW 0100H,0,42,0,90
DW 0100H,0,42,198,42
DW 0100H,18,12,168,12
DW 0100H,18,12,18,42
DW 0100H,24,0,156,0
DW 0100H,156,0,198,42
DW 0100H,0,42,24,0
DW 0100H,168,12,168,42
DW 0100H,198,42,198,75
DW 0100H,192,75,204,75
DW 0100H,192,90,192,75
DW 0100H,204,75,204,90
DW 0100H,48,12,48,42
DW 0100H,70,84,70,98
DW 0100H,70,98,120,98
DW 0100H,120,84,120,98
DW 0100H,70,84,120,84
DW 0100H,80,12,80,90
DW 0100H,90,12,90,90
DW 0100H,100,12,100,90
DW 0100H,110,12,110,90
DW 0100H,198,42,204,36
MUSICTIME DW 400,400
DW 400,200,400,400,800,400,400
DW 400,200,400,200,200,800,400,400
DW 400,200,400,400,800,400,400
DW 400,200,400,200,200,800,400,400
DW 400,800,400,800,400,400
DW 400,200,200,400,400,800,400,400
DW 400,200,400,400,800,800
DW 1600,800,800
DW 400,800,400,800,400,400
DW 400,400,400,400,800,400,400
DW 400,800,400,800,400,200
DW 2400,400,400
DW 400,800,400,800,400,400
DW 400,800,200,200,800,400,400
DW 400,800,400,800,800
DW 2400,400,400
DW 400,800,400,800,400,400
DW 400,800,200,200,800,400,400
DW 800,400,800,400,200
DW 2400,400,400
DW 400,800,400,800,400,400
DW 400,800,200,200,800,400,400
DW 400,800,400,800,800
DW 2400,400,400
DW 400,800,400,800,400,400
DW 400,800,400,800,400,400
DW 3200
DW 800,400,400,400,400,400,400
DW 4000
STR1 DB 'Welcome you to run this programme!',13,10,'$'
STR2 DB 24 DUP('*'),13,10,'$'
STR3 DB '* Esc ----- Exit *$'
STR4 DB '* M ----- Music *$'
STR5 DB '* 1 ----- Bird *$'
STR6 DB '* 2 ----- Car *$'
STR7 DB 'Esc:Exit Space:Pause M:Music$'
FREQ DW 196,220
DW 262,262,262,262,262,220,196
DW 262,262,262,262,294,262,220,262
DW 294,294,294,294,294,262,220
DW 294,294,294,294,330,294,330,392
DW 440,440,392,440,392,330
DW 294,294,330,294,262,220,196,220
DW 262,262,262,262,262,220
DW 262,196,220
DW 440,440,392,440,524,440
DW 392,330,294,262,220,196,220
DW 262,262,262,262,294,262
DW 262,330,392
DW 440,440,440,440,524,440
DW 392,392,392,440,392,330,294
DW 262,262,262,262,294
DW 330,330,294
DW 262,262,262,262,524,440
DW 392,392,392,440,392,330,392
DW 440,524,524,440,392
DW 392,330,392
DW 440,440,440,440,524,440
DW 392,392,392,440,392,330,294
DW 262,262,262,262,392
DW 330,330,294
DW 262,262,262,262,294,330
DW 392,392,330,392,330,392
DW 440
DW 100,100,196,660,294,294,262
DW 262,-1
DATAS ENDS
CODES SEGMENT ;代碼段
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START: MOV AX,DATAS ;初始化
MOV DS,AX
MOV AH,0 ;初始化屏幕大小
MOV AL,12H
INT 10H
MOV AH,0BH ;設置背景色
MOV BH,0
MOV BL,1
INT 10H
MOV AH,0BH ;設置調色板
MOV BH,1
MOV BL,2
INT 10H
LEA DI,FREQ
LEA SI,MUSICTIME
SUB SI,DI
MOV INCDI,SI
MOV AH,0
INT 1AH
MOV TIME1,DX
MOV TIME2,DX
MAIN_1: CALL MENU ;顯示菜單
MAIN_2: CALL MUSIC
CALL OUTTIME
MOV AH,06H ;從鍵盤輸入字符
MOV DL,0FFH
INT 21H
JZ MAIN_2
CMP AL,'m'
JNE MAIN_4
MOV AL,1
SUB AL,STATE_MUSIC
MOV STATE_MUSIC,AL
MAIN_3: JMP MAIN_2
MAIN_4: CMP AL,'1'
JNE MAIN_5
MOV STATE_PICTURE,0
MOV PRESENT_X,280H
MOV PRESENT_Y,180
JMP MAIN_6
MAIN_5: CMP AL,'2'
JNE MAIN_13
MOV STATE_PICTURE,1
MOV PRESENT_X,0
MOV PRESENT_Y,150
MAIN_6: CLEARSCREEN 0,0,14H,50H
OUTSTR 29,15,STR7
MAIN_7: MOV AH,06H ;從鍵盤輸入字符
MOV DL,0FFH
INT 21H
JZ MAIN_10
CMP AL,1BH
JE MAIN_1
CMP AL,'m'
JNE MAIN_9
MOV AL,1
SUB AL,STATE_MUSIC
MOV STATE_MUSIC,AL
JMP MAIN_7
MAIN_8: JMP MAIN_3
MAIN_9: CMP AL,20H
JE MAIN_11
MAIN_10: CALL MUSIC
CALL OUTTIME
CALL CARTOON
JMP MAIN_7
MAIN_11: MOV AL,0
OUT 61H,AL
MAIN_12: MOV AH,06H ;從鍵盤輸入字符
MOV DL,0FFH
INT 21H
JZ MAIN_12
CMP AL,20H
JNE MAIN_12
JMP MAIN_7
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -