CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

※※※※ 问个中断的问题 ※※※※※

楼主alexlee002(什么都不会ing)2003-09-04 19:49:56 在 其他开发语言 / 汇编语言 提问

课程设计,  
  用汇编编大炮打飞机,我画的炮弹和飞机都是直接写像素的,  
   
  按空格键发射炮弹,  
   
  我分别写了飞机飞行和大炮发射炮弹两个程序,都可与执行,  
   
  但是没办法连接成一个文件,  
   
  现在问题是:飞机出来了,按键盘不出炮弹,等到飞机飞过屏幕了,炮弹才出来,  
   
  而且炮弹消失后,飞机才又出来,  
   
  应该怎么办?  
   
  问题点数: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

相关问题

  • 问个中断问题
  • 中断问题
  • 中断问题
  • 几个端口和中断的问题
  • 提一个很幼稚的问题,什么叫软中断,难道还有硬中断???
  • 请问一个关于中断的问题
  • 问一个关于C的问题,跟中断有关
  • 问个中断服务程序地址的问题。
  • 请教CB程序的一个"中断"问题
  • 请教VB程序的一个"中断"问题

关键词

  • 中断
  • 代码
  • 炮弹
  • 飞机
  • movbl
  • callline
  • cmpsi
  • cmpal
  • movah
  • 按键

得分解答快速导航

  • 帖主:alexlee002
  • dunkel

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo