额...找不到原贴了,射击游戏那个帖子 原名忘了(高射炮,飞机)
ASSUME CS:CODE,DS:DATA,SS:STACKSDATASEGMENT
P_XDW 145 ;高射炮起始左下角横坐标150
P_YDW 195 ;高射炮起始左下角纵坐标195
P_PIXDB 1 ;高射炮颜色
PD_PIXDB 2 ;炮弹颜色
PD1_XDW 0 ;炮弹1起始横坐标
PD1_YDW 0 ;炮弹1起始纵坐标
PD1_BOORDW 0 ;炮弹1标志,1:画炮弹,0:不画炮弹
PD2DW 0,0,0 ;炮弹2起始坐标,标志
PD3DW 0,0,0 ;炮弹3起始坐标,标志
PD4DW 0,0,0 ;炮弹4起始坐标,标志
PD5DW 0,0,0 ;炮弹5起始坐标,标志
PD6DW 0,0,0 ;炮弹6起始坐标,标志
PD7DW 0,0,0 ;炮弹7起始坐标,标志
PD8DW 0,0,0 ;炮弹8起始坐标,标志
PD9DW 0,0,0 ;炮弹9起始坐标,标志
PDADW 0,0,0 ;炮弹A起始坐标,标志
PDBDW 0,0,0 ;炮弹B起始坐标,标志
PDCDW 0,0,0 ;炮弹C起始坐标,标志
C_XDW 0
C_YDW 0
C_X0DW 0 ;飞机中心坐标
C_Y0DW 75
C_RDB 37 ;半径
C_PIXDB 3 ;飞机颜色
C_DDB 0
C_LXDW 0 ;飞机左下角坐标
C_LYDW 75
C_BOORDB 10 ;飞机运行标志,大于10上升,小于10下降
F_BOORDB 0 ;飞机击中标志
FREQ_LISTDW 371,495,495,495,624,556,0 ;频率表
TIME_LISTDB 4,6,2,4,4,6 ;时间表
F_NUMDB 0
T_NUMDB 0
DATAENDS
STACKSSEGMENT
DB 128 DUP (?)
STACKSENDS
CODESEGMENT
; INCLUDE J:\1.52\PAO.asm
; INCLUDE J:\1.52\FEIJI.ASM
START:MOV AX,DATA
MOV DS,AX
MOV AH,0
MOV AL,5 ;320*200 4色方式
INT 10H
LOOP1:
MOV AX,0600H ;清屏
MOV BH,00
MOV CX,0000H
MOV DX,184FH
INT 10H
MOV AH,0BH ;选择调色盘
MOV BH,01
MOV BL,0 ;绿、红、黄调色盘
INT 10H
CALL PAO
CALL DAOHANG
CALL HANG1
CALL DELAY
MOV AH,01H
INT 16H
JZ LOOP1
LOOP2:MOV AH,00H ;按键判断左右控制大炮,空格发射炮弹,esc退出
INT 16H
CMP AX,4B00H
JE PR1
CMP AX,4D00H
JE PR2
CMP AL,20H
JE PR3
CMP AL,1BH
JE QUIT
JMP LOOP1 ;左移
PR1:
SUB P_X,9
CMP P_X,5
JG PR11
MOV P_X,5
PR11:
JMP LOOP1 ;右移
PR2:
ADD P_X,9
CMP P_X,285
JB PR21
MOV P_X,285
PR21:
JMP LOOP1 ;发射
PR3:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,12
MOV BX,OFFSET PD1_X
L1:
CMP BYTE PTR,0
JZ L2
ADD BX,6
LOOP L1
L2:
MOV AX,P_X ;炮弹初始坐标
ADD AX,14
MOV ,AX
MOV AX,P_Y
SUB AX,15
MOV ,AX
MOV DX,1
MOV BYTE PTR,1 ;允许画炮弹
POP DX
POP CX
POP BX
POP AX
JMP LOOP1
QUIT:MOV AH,4CH
INT 21H
DELAY: PUSH CX
PUSH DX
PUSH BX
PUSH AX
MOV DX,5000
DL1:MOV CX,5500
DL2:MOV AH,01H
LOOP DL2
DEC DX
JNZ DL1
POP AX
POP BX
POP DX
POP CX
RET
;飞机程序
HANG: ;飞机飞行路线
PUSH AX
PUSH BX
PUSH CX
PUSH DX
CALL FEIJI
MOV AX,C_Y0
CMP C_BOOR,10
JNE H_L3
CALL RAND ;产生飞机飞行参数,0-20的随机数
MOV C_BOOR,BL
H_L3:
CMP C_BOOR,10
JL H_L4
MOV BL,C_BOOR ;大于10飞机上升,单步上升2格,上升c_boor-10次
DEC BL
MOV C_BOOR,BL
SUB AX,2
JMP H_L5
H_L4:
MOV BL,C_BOOR ;大于10飞机上升,单步上升2格,下降10-c_boor次
INC BL
MOV C_BOOR,BL
ADD AX,2
H_L5:
CMP AX,100 ;飞机飞行下限
JB H_L1
MOV AX,100
H_L1:
CMP AX,50 ;飞机飞行上限
JA H_L2
MOV AX,50
H_L2:
MOV C_Y0,AX
MOV AX,C_X0 ;横向飞行
ADD AX,5
MOV C_X0,AX
CMP C_X0,310 ;右边界
JB H_L6
MOV AX,0
MOV C_X0,AX
MOV AX,75
MOV C_Y0,AX
MOV AL,10
MOV C_BOOR,AL
H_L6:
POP DX
POP CX
POP BX
POP AX
RET
FEIJI:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
MOV BX,C_X0 ;
ADD BX,5
MOV C_LX,BX
MOV AH,0CH
MOV AL,3
MOV DI,5H
MOV DX,C_Y0
F_2:MOV SI,50
MOV CX,C_X0
F_1:INT 10H
INC CX
DEC SI
JNZ F_1
DEC DX
DEC DI
JNZ F_2
MOV AL,1H
MOV DI,10
MOV DX,C_Y0
SUB DX,5H
F_4:MOV SI,5H
MOV CX,C_X0
F_3:INT 10H
INC CX
DEC SI
JNZ F_3
DEC DX
DEC DI
JNZ F_4
MOV AL,1H
MOV DI,5
MOV DX,C_Y0
SUB DX,5H
F_6:MOV SI,5H
MOV CX,C_X0
ADD CX,35
F_5:INT 10H
INC CX
DEC SI
JNZ F_5
DEC DX
DEC DI
JNZ F_6
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
RAND: ;产生随机数
PUSH CX
PUSH DX
PUSH AX
STI
MOV AH,0 ;读时钟计数器值
INT 1AH
MOV AX,DX ;清高6位
AND AH,3
MOV DL,21 ;除101,产生0~100余数
DIV DL
MOV BL,AH ;余数存BX,作随机数
POP AX
POP DX
POP CX
RET
BAOZHA1:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX,0
MOV C_X,AX
MOV AL,20 ;半径
MOV C_Y,AX
MOV AX,1
SBB AL,20
MOV C_D,AL
B_LOOP1:
CALL PUTDOT1
MOV BL,C_D
CMP BL,0
JG B_L1
MOV AX,C_X
MOV CX,2
IMUL CX
ADC AX,3
ADC AL,C_D
MOV C_D,AL
JMP B_L2
B_L1:
MOV AX,C_X
MOV DX,C_Y
ADC AX,DX
MOV CX,2
IMUL CX
ADC AX,5
ADC AL,C_D
MOV C_D,AL
MOV AX,C_Y
DEC AX
MOV C_Y,AX
B_L2:
MOV AX,C_X
INC AX
MOV C_X,AX
MOV CX,C_X
MOV DX,C_Y
CMP CX,DX
JLE B_LOOP1
POP DX
POP CX
POP BX
POP AX
RET
BAOZHA2:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX,0
MOV C_X,AX
MOV AL,10 ;半径
MOV C_Y,AX
MOV AX,1
SBB AL,10
MOV C_D,AL
B_LOOP2:
CALL PUTDOT1
MOV BL,C_D
CMP BL,0
JG B_L3
MOV AX,C_X
MOV CX,2
IMUL CX
ADC AX,3
ADC AL,C_D
MOV C_D,AL
JMP B_L4
B_L3:
MOV AX,C_X
MOV DX,C_Y
ADC AX,DX
MOV CX,2
IMUL CX
ADC AX,5
ADC AL,C_D
MOV C_D,AL
MOV AX,C_Y
DEC AX
MOV C_Y,AX
B_L4:
MOV AX,C_X
INC AX
MOV C_X,AX
MOV CX,C_X
MOV DX,C_Y
CMP CX,DX
JLE B_LOOP2
POP DX
POP CX
POP BX
POP AX
RET
PUTDOT1:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX,C_X0 ;X0+X,Y0+Y
ADD AX,C_X
MOV CX,AX
MOV AX,C_Y0
ADD AX,C_Y
MOV DX,AX
SUB DX,20
MOV BX,C_X0 ;X0-X
SBB BX,C_X
O1_LOOP1:
MOV AH,0CH ;写入点像
MOV AL,1 ;装入颜色
INT 10H
DEC CX
CMP CX,BX
JG O1_LOOP1
MOV AX,C_X0 ;X0+X,Y0-Y
ADD AX,C_X
MOV CX,AX
MOV AX,C_Y0
SBB AX,C_Y
MOV DX,AX
SUB DX,20
MOV BX,C_X0 ;X0-X
SBB BX,C_X
O1_LOOP2:
MOV AH,0CH ;写入点像
MOV AL,1 ;装入颜色
INT 10H
DEC CX
CMP CX,BX
JG O1_LOOP2
MOV AX,C_X0 ;X0+Y,Y0+X
ADD AX,C_Y
MOV CX,AX
MOV AX,C_Y0
ADD AX,C_X
MOV DX,AX
SUB DX,20
MOV BX,C_X0 ;X0-Y
SBB BX,C_Y
O1_LOOP3:
MOV AH,0CH ;写入点像
MOV AL,1 ;装入颜色
INT 10H
DEC CX
CMP CX,BX
JG O1_LOOP3
MOV AX,C_X0 ;X0+Y,Y0-X
ADD AX,C_Y
MOV CX,AX
MOV AX,C_Y0
SBB AX,C_X
MOV DX,AX
SUB DX,20
MOV BX,C_X0 ;X0-Y
SBB BX,C_Y
O1_LOOP4:
MOV AH,0CH ;写入点像
MOV AL,1 ;装入颜色
INT 10H
DEC CX
CMP CX,BX
JG O1_LOOP4
POP DX
POP CX
POP BX
POP AX
RET 本帖最后由 半生缘 于 2013-3-5 14:11 编辑
HANG1: ;飞机飞行规划
PUSH CX
PUSH DX
PUSH BX
PUSH AX
CMP F_BOOR,0 ;飞机击中标志,0未击中;
JNE HANG_1
CALL HANG
JMP HANG_2
HANG_1: ;击中
CMP F_BOOR,5 ;大烟雾5帧
JBE HANG_6
CALL PAOSHENG
CALL BAOZHA2
DEC F_BOOR
JMP HANG_5
HANG_6:
CALL PAOSHENG
CALL BAOZHA1
DEC F_BOOR
JNZ HANG_5
MOV AX,0
MOV C_X0,AX
MOV AX,5
MOV C_Y0,AX
JMP HANG_5
HANG_2:
MOV CX,12
MOV BX,OFFSET PD1_X
HANG_3:
CMP ,0
JZ HANG_4
MOV AX,
CMP AX,C_LY
JG HANG_4
ADD AX,15
CMP AX,C_LY
JB HANG_4
MOV AX,
CMP AX,C_LX
JB HANG_4
SUB AX,54
CMP AX,C_LX
JG HANG_4
MOV F_NUM,0
MOV T_NUM,0
MOV AX,6 ;击中画面时长6帧
MOV F_BOOR,AL
MOV AX,0 ;击中,炮弹消失
MOV ,AX
JMP HANG_5
HANG_4:
ADD BX,6
DEC CX
CMP CX,0
JNZ HANG_3
HANG_5:
POP AX
POP BX
POP DX
POP CX
RET
;大炮程序
PAO:
PUSH AX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
MOV AH,0CH ;写入点像
MOV AL,P_PIX ;装入颜色
MOV DI,5 ;底座高度
MOV DX,P_Y
DISP_2:MOV SI,30 ;底座宽度
MOV CX,P_X
DISP_1:INT 10H
INC CX
DEC SI
JNZ DISP_1
DEC DX
DEC DI
JNZ DISP_2
;底座完成
MOV DI,10 ;炮筒高度
MOV DX,P_Y
SUB DX,5H
DISP_4:MOV SI,10 ;炮筒宽
MOV CX,P_X
ADD CX,10
DISP_3:INT 10H
INC CX
DEC SI
JNZ DISP_3
DEC DX
DEC DI
JNZ DISP_4
POP DI
POP SI
POP DX
POP CX
POP AX
RET
PAODAN: ;画炮弹 CX,横坐标.DX,纵坐标
PUSH AX
PUSH BX
PUSH DX
PUSH CX
MOV AH,0CH ;写入点像
MOV AL,PD_PIX ;装入颜色
MOV DI,3 ;炮弹高
PD_DISP_2:MOV SI,3 ;炮弹宽
PD_DISP_1:INT 10H
INC CX
DEC SI
JNZ PD_DISP_1
INC DX
POP CX
PUSH CX
DEC DI
JNZ PD_DISP_2
POP CX
POP DX
POP BX
POP AX
RET
DAOHANG: ;导航
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
MOV AX,12
MOV BX,OFFSET PD1_X
PD_L1:
CMP ,0 ;炮弹1标志为0,不画炮弹
JZ PD_NO
MOV CX,
MOV DX,
CALL PAODAN
SUB ,9 ;炮弹上移
MOV DX, ;判断炮弹是否移出屏幕
CMP DX,0000H
JG PD_NO
MOV DX,0
MOV ,DX
MOV ,DX
MOV ,DX ;炮弹1消失,标志置0
PD_NO:
ADD BX,6 ;指向下一发炮弹
DEC AX
JNZ PD_L1
POP SI
POP DX
POP CX
POP BX
POP AX
RET
;声音程序
PAOSHENG:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
MOV DX,43H ;初始化8254工作方式
MOV AL,0B7H ;定时器3、方式3
OUT DX,AL
MOV SI,OFFSET FREQ_LIST ;装入频率表起始地址
MOV DI,OFFSET TIME_LIST ;装入时间表起始地址
MOV DX,61H
;IN DX,AL
in al,dx
;PUSH AX
OR AL,03
OUT DX,AL
MOV DX,0FH ;输入时钟为1.0416667MHz,1.0416667M = 0FE502H
MOV AX,0E502H
DIV WORD PTR ;取出频率值计算计数初值,0F4240H / 输出频率
MOV DX,42H
OUT DX,AL ;装入计数初值
MOV AL,AH
OUT DX,AL
MOV DL, ;取出演奏相对时间,调用延时子程序
CALL DALLY1
ADD SI,2
INC DI
CMP WORD PTR ,0 ;判断是否到曲末?
JE OUT1
;JMP PLAY
OUT1:
;POP AX
MOV DX,61H
OUT DX,AL
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
DALLY1: ;延时子程序
D0:MOV CX,200H
D1:MOV AX,0FFFFH
D2:DEC AX
JNZ D2
LOOP D1
DEC DL
JNZ D0
RET
CODEENDS
END START
额 话说 字太多不知道怎么弄的
别人发的 比这多 我这是复制的 :'(:'(:'(:'(
他发的 没PLAY 实现
本人新手也不会 所以省了
这样可以运行了 不知选主题 就选了个 分享:L:L:L:L
支持一下。。。。。 半生缘 发表于 2013-3-5 14:03 static/image/common/back.gif
HANG1: ;飞机飞行规划
PUSH CX
PUSH DX
好高深啊
封尘 发表于 2013-3-5 15:12 static/image/common/back.gif
好高深啊
话说 我也是抄他的 算法不知道 就是把他发的不能编译的提示 弄没了
至于怎么个思路 没细看(没看;P) 这个可以正常运行吗
yulin3192 发表于 2013-3-5 17:31 static/image/common/back.gif
这个可以正常运行吗
不知道没有声音算不算正常运行
声音后边有个 play 那位没给抄上
我就把它平掉了 玩是能玩 就是没声
附件 就是编译好的程序 用masm615
1kb 支持楼主 好好学习
页:
[1]