※※※※ 问个中断的问题 ※※※※※
课程设计,
用汇编编大炮打飞机,我画的炮弹和飞机都是直接写像素的,
按空格键发射炮弹,
我分别写了飞机飞行和大炮发射炮弹两个程序,都可与执行,
但是没办法连接成一个文件,
现在问题是:飞机出来了,按键盘不出炮弹,等到飞机飞过屏幕了,炮弹才出来,
而且炮弹消失后,飞机才又出来,
应该怎么办?
问题点数:20、回复次数:12Top
1 楼WhoIsBill(宝剑期乎利而不期莫邪乎!)回复于 2003-09-05 08:54:07 得分 0
线程,可惜我也不懂。:(Top
2 楼zuolihua(纷华)回复于 2003-09-05 09:13:37 得分 0
你把两个程序重写一次,在飞行时就监视键盘按键,然后画飞机与炮弹弄在一个过程里,看看行不行Top
3 楼Areslee(懒虫易水)回复于 2003-09-05 09:16:42 得分 0
要么用时钟中断来处理
要么就画一下飞机运动,再画一下炮弹运动
然后再循环Top
4 楼alexlee002(什么都不会ing)回复于 2003-09-05 09:26:59 得分 0
呵呵,我现在就把综合了楼上两位的方法,
但是现在飞机躲着不出来了:)Top
5 楼alexlee002(什么都不会ing)回复于 2003-09-05 09:32:07 得分 0
呵呵,错了,是飞机不走了:)
下边是我的代码:
(最后一天了,大虾救命!)
a:
mov si,5
b:
mov bl,02
call plane
mov cx,800
call wait1
mov bl,0
call plane
inc si
loop1:
;push si
mov ah,7
int 21h
cmp al,20h
je fire
cmp al,'q'
jz exit
;jmp loop1
;pop si
c: cmp si,614
jl b
jmp a
ret
fire:
mov si,375
b1:
mov bl,04
call line
call wait1
mov bl,0
call line
sub si,1
b2: cmp si,0
jnz b1
jmp a
exit: ret
Top
6 楼W32API()回复于 2003-09-05 09:43:27 得分 0
你用稍微复杂一点的结构来做会好一点。
时钟中断根据分别表示飞机和炮弹的结构来重画
主程序则可监控 INPUTTop
7 楼dunkel(内心和夜 哪个黑)回复于 2003-09-05 09:49:47 得分 20
其它的也看不出来, 但从按键的处理来看, 所用的int21h(AH=7)是等待性的, 即需要等到个按键才会返回, 所以不能用这个功能, 可以用非等待性的int21h(AH=8), 或用int16(AH=1)先检查一下有无按键:
...
loop1:
;push si
; mov ah,7 ;*= 这个功能调用是等待性的,所以不行
; int 21h ;*=
mov ah, 1 ;*-
int 16h ;*- 看看有没有键被按下
jz c ;*没有, 则继续
mov ah, 0 ;*- 有按过键
int 16h ;*- 读入按键
cmp al,20h
je fire
cmp al,'q'
jz exit
;jmp loop1
;pop si
c: cmp si,614
...Top
8 楼alexlee002(什么都不会ing)回复于 2003-09-05 10:43:21 得分 0
呵呵,谢谢楼上的大哥
但是还是幼问题啊:这个问题也在意料之中:)
飞机来了,我按键发炮,在炮弹飞行过程中,飞机是不动的,等着挨打。
我也知道这是什么原因,但是解决不了啊:)Top
9 楼dunkel(内心和夜 哪个黑)回复于 2003-09-05 10:55:48 得分 0
你的发炮键是 "空格" 键吧, 处理代码在标号 b1: 之后? 那时因为你在炮弹飞行过程中没有让飞机也一起动啊:
...
b1:
mov bl,04
call line ; 绘制炮弹 ?
call wait1 ; 延时 ?
mov bl,0
call line ; 消隐炮弹 ?
; 这里也需加上飞机的飞行代码(绘制-消隐)
; 而且还需要考虑飞机和炮弹的相对速度
; 这样才能飞机和炮弹都在运动
; 另外, 好像没有看到炮弹击中飞机的代码 ?
sub si,1
b2: cmp si,0
jnz b1
jmp a
...Top
10 楼W32API()回复于 2003-09-05 11:03:32 得分 0
应该同时画两种东西。。。Top
11 楼alexlee002(什么都不会ing)回复于 2003-09-05 11:08:01 得分 0
击中的代码我已经写了,不过我是用颜色判断的(用坐标比较麻烦)
就是说,炮弹飞行过程中,不断判断前方的像素颜色,如果跟飞机相同的画,就击中了
本来这是应该是飞机飞行过程中判断的,但是比较麻烦,
不过这样也带来一个问题,就是炮弹击中飞机之后,怎么要飞机消失。Top
12 楼SoRoMan(因为所以,所以因为)回复于 2003-09-05 11:46:29 得分 0
1.飞机要不停的画,
2.炮彈發射後要不停的画,
3.不停的檢測按鍵。
3個循環過程同時執行?只好安排在同一循環中了。Top




