1、首先在屏幕上显示两个物体,让他们按照从左到右和从右到左方式分别运动。他们的运动是通过不断的修改图片的坐标,并清屏,然后根据新的坐标重新绘制画面来实现的。通过一大个循环对上面个两个坐标进行改变,每次横坐标加上一个固定的值,或减去一个固定的值。再通过清图然后重绘实现物体的移动。为人实现物体能根据操作者的要求上下左右运动,程序实现设定好了几个可以上下左右操控图片位置的键。每当操作者按下这几个键,系统自动的,将图片位置的横纵坐标进行加上或减去某个固定的值,加的多少还取决于操作者按键次数得多少。确定图片的位置是通过检测用户的输入和外层大循环不断自加某个数,综合来改变下次重绘的坐标来实现的。总之要想物体动
2、起来就是通过不断地清屏来清除上次图片的位置,然后获取图片坐标,这个坐标是不断地被用户和系统修改的,并重回新的图片画面,于是用户可以看见物体在屏幕上不断的移动。以下是让运动起来运动的逻辑图:图2动画运动算法示意图 首先是清理屏幕上的物体将屏幕刷成黑色,然后获得机器人和小车新的位置坐标,根据这根位置坐标绘制出小车的位置。从而实现小车的运动。同时通过操控设定好的上下左右键可以修改坐标,形同会自动根据你按键的次数以及方向键物体的横纵坐标加上或减去一个先前设定好的固定值。从而实现了,操作者对物体运动东方向的控制。三、核心算法流程图主程序:程序开始,设置显示方式为80X25 16色图形方式和提示信息如下:
3、(SPACE-PAUSE,ENTER-BEGAIN,ESC-EXIT,SPEEDUP-+,SLOWDOWN- -) (CAR:UP-W,DOWN-S,LEFT-A,RIGHT-D MAN:UP-8,DOWN-2,LEFT-4,RIGHT-6) 调用car_disp和man_disp子程序设置开始图形,起始坐标在数据定义时已给出,然后调用绘图子程序控制汽车和机器人的运动,空格暂停,回车开始,ESC退出,实现动画的主程序算法图如图3。程序运行后除了绘制移动的人和车外,还要看是否有暂停,开始,和退出的操作。根据输入对程序运行进行调整。MOVE子程序:MOVE子程序是整个程序的核心,通过键盘操作控制汽
4、车和机器人的运动,首先检测键盘,若无键盘操作,运行主程序。控制物体移动算法图如图4:图4操控物体算法示意图加号和减号分别控制加速和减速,原本主程序会每隔一段时间自动把汽车横坐标加一,人的横坐标减一重复操作,若有键盘响应,则实现自动运动,则通过比较键盘扫描码来确定执行何种操作, “+”按一次速度加快一级,“”按一次速度减慢一级,WASD控制汽车的上左下右移动,方向键和8、6、2、4都能控制机器人的运动方向,DISP绘图程序:DISP输出图形子程序该程序的主要功能是根据定义的图形表画出图形,过程如下: 图5根据自定义图形绘图算法示意图首先获得存放自定义图形字符串数组,进行初始化,再根据坐标获得物体
5、的酒气体坐标然后绘制物体。汽车和机器人画图子程序:当汽车和小人运动到边界时就会消失,于是我另外写了两个子程序让运动到边界的物体自此回到界面,这里我让从左边出去的物体从右边出现,从右边出去的的物体从左边出现,这样就像地球是圆的一样,当让当你控制物体从上方或者下方出去时,也会出现在相反反向。car_disp,man_disp子程序分别用于用于处理汽车和小人运动到屏幕边界的情况,显示图形以及设置坐标。以汽车为例:si指向汽车图形表的第一个字符,当行数(car_row1)大于20,跳到第4行,行数(car_row1)小于4,跳到第20行列数(car_col1)小于3,跳到第70列,列数car_col1
6、)大于70,跳到第3列,实现边界设置,再将row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标,然后把car_row1赋给dh,car_col1赋给dl,然后在调用DISP画出汽车图形,这样汽车就会从另一个方向冒出来。总之,这里也是通过修改物体的左边来实现这样的效果的。清图子程序: 这部分程序主要负责清理上一次绘图留下来的画面为下一步的重绘做准备,实现物体的移动效果,否则会出现物体在上次基础上重绘,变成物体推着尾巴。影响动画效果。这部分的代码样式为:car_clear proc near ;汽车清图子程序 clear_car car_row0,car_col0 ;
7、调用汽车清图宏 ret ;返回car_clear endp该程序的主要功能就是调用宏来清图。因为子程序不能传递参数,所以选择用宏定义来实现参数(坐标)的传递,但是宏展开使得代码很长,而且该子程序调用频繁,以致超过条件转移的范围,系统报错,用子程序就可以解决。延时子程序DLY: 主要功能使控制延时,通过这个子程序就那个能够控制物体运动的速度。延时的时间越长,物体运动的速度就越慢,相反延时时间越短,就相当于物体运动的频率加快这样物体运动就加快了。我采用的是控制延时时间的的长短,从而实现加速和减速。通过宏定义来实现参数(dlay1)的传递,用“+”“”来改变dlay1的值,控制延时,因为我给时间设定
8、了几个值于是当用户按加号是就不断自加加到最大之时再自加就变成最小值,减号则反之,所以会看到很快的物体瞬间变慢。四、源代码整个程序实现的源代码如下:data segment ;定义数据段CAR0 DB 7 ;汽车的字符图形表DB 0DBH,1,0,0DB 0DBH,1,0,1DB 0DBH,7,0,1DB 4FH,6,1,0DB 4FH,6,0,-3DB 2,6,-2,1 ;-MANU DB 11 ;机器人的图形表 DB 0DBH,09H,0,0 DB 0DBH,09H,0,1 DB 0DBH,09H,0,1 DB 02H,09H,-1,-2 DB 03H,0CH,2,0 DB 0DBH,09H
9、,1,-1 DB 0DBH,09H,0,2 DB 0DBH,09H,1,-3DB 0DBH,09H,0,4;-画图与清图坐标-car_row0 db 10 ;汽车清图坐标car_col0 db 10car_row1 db 10 ;汽车画图坐标car_col1 db 10man_row0 db 15 ;机器人清图坐标man_col0 db 60man_row1 db 15 ;机器人画图坐标man_col1 db 60延时时间间隔dlay1 dw 10000 ;控制延时变量,即控制速度的变量-输出提示-INFO1 DB 0DH,0AH, (SPACE-PAUSE,ENTER-BEGAIN,ESC-
10、EXIT,SPEEDUP- +,SLOWDOWN- - )$动画控制提示信息,空格暂停,回车开始,ESC退出, “+”按一次速度加快一级,“”按一次速度减慢一级INFO2 DB 0DH,0AH,UP-8,DOWN-2,LEFT-4,RIGHT-6)$动画控制提示信息,WASD控制汽车的上左下右移动,方向键控制机器人的运动方向-汽车宏定义-clear_car macro row,col ;宏定义汽车清图push bxmov ax,0600H mov ch,rowdec ch,1mov cl,colmov dh,chmov dl,cladd dh,3 ;坐标加3add dl,4 ;坐标加4mov bh,7int 10hpop bxendm- 宏定义机器人- clear_man macro row,col ;宏定义机器人清图 mov ch,row dec ch,1 mov cl,col dec cl,0 mov dh,ch mov dl,cl add dh,5 ;坐标加5 add dl,5 ; mov bh,7 int 10H pop bx endm-主要功能使控制延时,我采用的是控制空制令执行的条数来控制延时的长短,从而实现加速和减速。通过宏定义来实现
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1