2022年2022年汇编语言动画程序设计报告 .pdf
《2022年2022年汇编语言动画程序设计报告 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编语言动画程序设计报告 .pdf(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言(双语)-1-一、游戏背景介绍随着信息时代的发展,计算机已经变为我们生活中不可缺少的一部分,它作为我们了解世界的一个窗口的同时还可以让我们从中以最快的速度查找学习资源,休闲之余,更多的人选择玩小型的益智游戏来放松,因为它不仅达到了娱乐的目的,而且对自己的思维有一定的帮助作用,根据大多数人的娱乐放松需求,我做出了一款动画游戏 可控的汽车与机器人。上了一学期的汇编语言课,让我对汇编语言有了一定的认识。这次课程作业我决定亲自动手用汇编语言编写一个型小程序,熟悉计算机体系结构,加深对汇编语言的了解。DOS操作系统的功能调用及BIOS 的功能调用。进一步了解汇编语言控制计算机硬件的方法,以及如何
2、用汇编语言来实现算法,提高应用汇编语言编程的能力,也加深了自己对一些算法的理解,提高了自己的编程能力。利用汇编语言编写程序,在屏幕上显示动画,还可以通过键盘上的输入来改变图片的位置,实现动画的运动。动画游戏程序设计的开始屏幕上会出现一辆小车和一个机器人,操作者可自由选择至少两个运动物体(机器人和汽车)在屏幕上运动,一开始汽车与人分别从左向右、从右向左运动,操作者可以通过屏幕上方现实的提示对机器人和小车进行控制。可以通过键盘上的W、A、S、D 和上下左右的方向键来分别控制运动机器人和小车通过W,A,S,D控制方向,同时整个程序包括人机界面控制台和运动中动画的暂停(空格键控制),开始(ENTER
3、键控制),退出键则由ESC 键控制,运动加减速动作(“+”控制逐级加速、“”控制逐级减速)。程序插图如图1:图 1 动画界面示意图屏幕上方是操作提示,用户可与根据提示对汽车和小人进行操控,来改变他俩的运动轨迹。起先车和小人都是各自运动的一个向左另一个向右,操作者可以通过键盘来改变这两物体的运动轨迹,同时在按键盘上的加号会看见物体的运动速率明显加快,减号则反之。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 23 页 -汇编语言(双语)-2-二、核心算法思想本程序定义了两个图分别表示(汽车和机器人),八个坐标变量(汽车清图坐标car_row0 car_col0 汽车画图坐标car_
4、row1 car_col1 机器人清图坐标man_row0 man_col0 机器人画图坐标 man_row1 man_col1),用于控制汽车和机器人清图和画图的坐标。首先在屏幕上显示两个物体,让他们按照从左到右和从右到左方式分别运动。他们的运动是通过不断的修改图片的坐标,并清屏,然后根据新的坐标重新绘制画面来实现的。通过一大个循环对上面个两个坐标进行改变,每次横坐标加上一个固定的值,或减去一个固定的值。再通过清图然后重绘实现物体的移动。为人实现物体能根据操作者的要求上下左右运动,程序实现设定好了几个可以上下左右操控图片位置的键。每当操作者按下这几个键,系统自动的,将图片位置的横纵坐标进行加
5、上或减去某个固定的值,加的多少还取决于操作者按键次数得多少。确定图片的位置是通过检测用户的输入和外层大循环不断自加某个数,综合来改变下次重绘的坐标来实现的。总之要想物体动起来就是通过不断地清屏来清除上次图片的位置,然后获取图片坐标,这个坐标是不断地被用户和系统修改的,并重回新的图片画面,于是用户可以看见物体在屏幕上不断的移动。以下是让运动起来运动的逻辑图:图 2 动画运动算法示意图首先是清理屏幕上的物体将屏幕刷成黑色,然后获得机器人和小车新的位置坐标,根画图(row1,col1)开始row1 加 1 col1 加 1 清图(row0,col0)判断是否有按键输入row1 赋给 row0 col
6、1 赋给 col0 修改 row1、col1 否是名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 23 页 -汇编语言(双语)-3-据这根位置坐标绘制出小车的位置。从而实现小车的运动。同时通过操控设定好的上下左右键可以修改坐标,形同会自动根据你按键的次数以及方向键物体的横纵坐标加上或减去一个先前设定好的固定值。从而实现了,操作者对物体运动东方向的控制。三、核心算法流程图主程序:程序开始,设置显示方式为80X25 16 色图形方式和提示信息如下:(SPACE-PAUSE,ENTER-BEGAIN,ESC-EXIT,SPEEDUP-+,SLOWDOWN-)(CAR:UP-W,DOWN
7、-S,LEFT-A,RIGHT-D MAN:UP-8,DOWN-2,LEFT-4,RIGHT-6)调用 car_disp 和 man_disp 子程序设置开始图形,起始坐标在数据定义时已给出,然后调用绘图子程序控制汽车和机器人的运动,空格暂停,回车开始,ESC 退出,实现动画的主程序算法图如图3。程序运行后除了绘制移动的人和车外,还要看是否有暂停,开始,和退出的操作。根据图 3 主程序算法示意图否是是否否判 断 是 否是 ENTER 判 断 是 否是空格判断输入是否为 ESC 开始启用绘图程序图片初始化屏幕上显示提示信息结束是暂停名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 2
8、3 页 -汇编语言(双语)-4-输入对程序运行进行调整。MOVE 子程序:MOVE 子程序是整个程序的核心,通过键盘操作控制汽车和机器人的运动,首先检测键盘,若无键盘操作,运行主程序。控制物体移动算法图如图4:图 4 操控物体算法示意图加号和减号分别控制加速和减速,原本主程序会每隔一段时间自动把汽车横坐标加一,人的横坐标减一重复操作,若有键盘响应,则实现自动运动,则通过比较键盘扫描码来确定6?-?+?4?2?8?D?S?开始W?键盘检测合法字符?A?结束主程序机器人下移动一个单位机器人左移动一个单位机器人上移动一个单位汽车向右移动一个单位汽车向下移动一个单位汽车向左移动一个单位加速机器人右移动
9、一个单位减速汽车向上移动一个单位物体移动N Y Y Y N N Y Y Y N N Y Y Y N N Y Y N N N 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 23 页 -汇编语言(双语)-5-执行何种操作,“+”按一次速度加快一级,“”按一次速度减慢一级,WASD控制汽车的上左下右移动,方向键和8、6、2、4 都能控制机器人的运动方向,DISP绘图程序:DISP输出图形子程序该程序的主要功能是根据定义的图形表画出图形,过程如下:图 5 根据自定义图形绘图算法示意图首先获得存放自定义图形字符串数组,进行初始化,再根据坐标获得物体的酒气体坐标然后绘制物体。汽车和机器人画
10、图子程序:当汽车和小人运动到边界时就会消失,于是我另外写了两个子程序让运动到边界的物体自此回到界面,这里我让从左边出去的物体从右边出现,从右边出去的的物体从左边出现,这样就像地球是圆的一样,当让当你控制物体从上方或者下方出去时,也会出现在相反反向。car_disp,man_disp 子程序分别用于用于处理汽车和小人运动到屏幕边界的情况,显示图形以及设置坐标。以汽车为例:si指向汽车图形表的第一个字符,当行数(car_row1)大于 20,跳到第4 行,行数(car_row1)小于 4,跳到第20 行列数(car_col1)小于 3,跳N 结束主程序cx=0?si+4 cx-1 字符行列坐标存入
11、 dh,dl 初始化 cx 开始si 指向图形表的第一个字符显示当前 si指 向 的字Y 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 23 页 -汇编语言(双语)-6-到第 70 列,列数car_col1)大于 70,跳到第3列,实现边界设置,再将row1 赋给 row0,col1 赋给 col0,即把现在的坐标保留,作为下次清屏的坐标,然后把car_row1 赋给 dh,car_col1赋给 dl,然后在调用DISP画出汽车图形,这样汽车就会从另一个方向冒出来。总之,这里也是通过修改物体的左边来实现这样的效果的。清图子程序:这部分程序主要负责清理上一次绘图留下来的画面为下一
12、步的重绘做准备,实现物体的移动效果,否则会出现物体在上次基础上重绘,变成物体推着尾巴。影响动画效果。这部分的代码样式为:car_clear proc near;汽车清图子程序 clear_car car_row0,car_col0;调用汽车清图宏ret ;返回car_clear endp 该程序的主要功能就是调用宏来清图。因为子程序不能传递参数,所以选择用宏定义来实现参数(坐标)的传递,但是宏展开使得代码很长,而且该子程序调用频繁,以致超过条件转移的范围,系统报错,用子程序就可以解决。延时子程序DLY:主要功能使控制延时,通过这个子程序就那个能够控制物体运动的速度。延时的时间越长,物体运动的速
13、度就越慢,相反延时时间越短,就相当于物体运动的频率加快这样物体运动就加快了。我采用的是控制延时时间的的长短,从而实现加速和减速。通过宏定义来实现参数(dlay1)的传递,用“+”“”来改变dlay1 的值,控制延时,因为我给时间设定了几个值于是当用户按加号是就不断自加加到最大之时再自加就变成最小值,减号则反之,所以会看到很快的物体瞬间变慢。四、源代码整个程序实现的源代码如下:data segment;定义数据段CAR0 DB 7;汽车的字符图形表DB 0DBH,1,0,0 DB 0DBH,1,0,1 DB 0DBH,7,0,1 DB 0DBH,7,0,1 DB 4FH,6,1,0 DB 4FH
14、,6,0,-3 DB 2,6,-2,1;-MANU DB 11;机器人的图形表DB 0DBH,09H,0,0 DB 0DBH,09H,0,1 DB 0DBH,09H,0,1 DB 0DBH,09H,0,1 DB 0DBH,09H,0,1 DB 02H,09H,-1,-2 DB 03H,0CH,2,0 DB 0DBH,09H,1,-1 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 23 页 -汇编语言(双语)-7-DB 0DBH,09H,0,2 DB 0DBH,09H,1,-3 DB 0DBH,09H,0,4;-画图与清图坐标-car_row0 db 10;汽车清图坐标car_c
15、ol0 db 10 car_row1 db 10;汽车画图坐标car_col1 db 10 man_row0 db 15;机器人清图坐标man_col0 db 60 man_row1 db 15;机器人画图坐标man_col1 db 60;延时时间间隔dlay1 dw 10000 ;控制延时变量,即控制速度的变量;-输出提示-INFO1 DB 0DH,0AH,(SPACE-PAUSE,ENTER-BEGAIN,ESC-EXIT,SPEEDUP-+,SLOWDOWN-)$;动画控制提示信息,空格暂停,回车开始,ESC 退出,;“+”按一次速度加快一级,“”按一次速度减慢一级INFO2 DB 0D
16、H,0AH,(CAR:UP-W,DOWN-S,LEFT-A,RIGHT-D MAN:UP-8,DOWN-2,LEFT-4,RIGHT-6)$;动画控制提示信息,WASD 控制汽车的上左下右移动,方向键控制机器人的运动方向;-汽车宏定义-clear_car macro row,col;宏定义汽车清图push bx mov ax,0600H mov ch,row dec ch,1 mov cl,col mov dh,ch mov dl,cl add dh,3;坐标加 3 add dl,4;坐标加 4 mov bh,7 int 10h pop bx endm;-宏定义机器人-clear_man ma
17、cro row,col;宏定义机器人清图push bx mov ax,0600H mov ch,row 名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 23 页 -汇编语言(双语)-8-dec ch,1 mov cl,col dec cl,0 mov dh,ch mov dl,cl add dh,5;坐标加 5 add dl,5;坐标加 5 mov bh,7 int 10H pop bx endm;-;主要功能使控制延时,我采用的是控制空制令执行的条数来;控制延时的长短,从而实现加速和减速。通过宏定义来实现;参数(dlay1)的传递,用“+”“”来改变dlay1 的值,控制延时。
18、;-延时程序-d macro dlay1;宏定义延时程序push cx push dx mov dx,dlay1 dl1:mov cx,6801 dl2:loop dl2 dec dx jnz dl1 pop dx pop cx endm;-code segment;定义代码段main proc far;主函数assume cs:code,ds:data start:push ds mov ax,0 push ax mov ax,data mov ds,ax mov al,3;设置显示方式为80*25 16 色图形方式mov ah,0 int 10H lea dx,info1;在显示器上显示字
19、符串提示信息mov ah,9 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 23 页 -汇编语言(双语)-9-int 21h lea dx,info2;在显示器上显示字符串提示信息mov ah,9 int 21h call car_disp;初始汽车的位置call man_disp;初始机器人的位置call MOVE ret main endp;-disp proc near;输出图形子程序push ax push bx push cx push dx push si sub ch,ch mov cl,si inc si next:add dh,si+2;改变行列坐标add d
20、l,si+3 mov ah,2;置光标位置DH 为行、DL 为列int 10h mov al,si;取字符值mov bl,si+1;取字符属性push cx mov cx,1 mov AH,9;显示字符int 10H pop cx add si,4;SI 指向下一个字符loop next pop si pop dx pop cx pop bx pop ax ret disp endp;-car_disp proc near;汽车画图子程序push si lea si,CAR0;取汽车的图cmp car_row1,20;设置汽车运动的边界名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,
21、共 23 页 -汇编语言(双语)-10-ja c0;行数大于 20,跳到第 4 行cmp car_row1,4;行数小于 4,跳到第 20行jb c1 cmp car_col1,3;列数小于 3,跳到第 70 列jb c2 cmp car_col1,70;列数大于 70,跳到第 3 列ja c3 jmp cn c0:mov car_row1,4 jmp cn c1:mov car_row1,20 jmp cn c2:mov car_col1,70 jmp cn c3:mov car_col0,3 mov car_col1,3 jmp cn cn:mov bh,0;row1 赋给 row0,co
22、l1 赋给 col0,即把现在的坐标保留,作为下次清屏的坐标mov bl,car_row1 mov car_row0,bl mov bl,car_col1 mov car_col0,bl mov dh,car_row1 mov dl,car_col1 call disp;调用 DISP 画出汽车图形pop si ret car_disp endp;-car_clear proc near;汽车清图子程序clear_car car_row0,car_col0;调用汽车清图宏ret;返回car_clear endp;-man_disp proc near;机器人画图子程序push si lea s
23、i,MANU;取机器人的图cmp man_row1,20;设置机器人运动的边界名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 23 页 -汇编语言(双语)-11-ja n0;行数大于 20,跳到第 4 行cmp man_row1,4;行数小于 4,跳到第 20 行jb n1 cmp man_col1,3;列数小于 3,跳到第 70 列jb n2 cmp man_col1,70;列数大于 70,跳到第3 列ja n3 jmp nn n0:mov man_row1,4 jmp nn n1:mov man_row1,20 jmp nn n2:mov man_col1,70 jmp n
24、n n3:mov man_col0,3 mov man_col1,3 jmp nn nn:push bx;row1 赋给 row0,col1 赋给 col0,即把现在的坐标保留,作为下次清屏的坐标mov bh,0 mov bl,man_row1 mov man_row0,bl mov bl,man_col1 mov man_col0,bl pop bx mov dh,man_row1 mov dl,man_col1 call disp;调用 DISP 画出机器人图形pop si ret man_disp endp;-man_clear proc near;机器人清图子程序clear_man m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年汇编语言动画程序设计报告 2022 汇编语言 动画 程序设计 报告
限制150内