




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理与接口技术课程设计报告设计题目: 贪吃蛇游戏姓名: 班级: 自动化 学号: 同组人: 时间: 2010年12月 贪吃蛇游戏摘要:贪吃蛇游戏,运行游戏后显示提示界面,按任意键进入游戏,按esc键退出程序。进入游戏后有两遍刷屏,之后进入游戏,由方向键控制蛇的运动,寻找食物,吃到食物得分,撞到墙壁或蛇身游戏结束,按空格键重新进入游戏,按esc键回到提示界面,按任意键继续进入游戏,按esc退出程序。目录1.设计任务和要求32.设计小组成员及分工33.软件编程33.1 软件流程图3 3.2 汇编语言程序44.程序运行结果335.设计过程中出现的问题及解决方法336.设计总结337.参考文献34一、设计任务和要求设计一个汇编语言的贪吃蛇游戏简要说明:用一个边框作为基本显示屏,连续移动的方格表示一条蛇,用任意出现的一个方格表示食物,用4条线表示“墙”,用四个按键控制蛇的运动方向,完成贪食蛇游戏,蛇撞“墙”、边或者游戏时间到,则游戏结束。1. 食物出现的地方是随机的;2.显示得分情况,每吃掉一个食物就加1100分;3. 游戏时间不限制。4. 选做:增加游戏难度或自拟其它功能。二、设计小组成员及分工成员:郑玮 苏丹分工:郑玮:调试修改程序,拟出课程设计报告内容 苏丹:写出并整理报告内容三、 软件编程1.软件流程图2.汇编语言程序.model small;*.stack 200;*.data ;蛇的参数以及游戏参数len db 5 ;蛇的长度life db 1 ;蛇的生命body dw 200 dup(0) ;蛇的身体位置direction dw 256 ;(0,1)(o,-1)(1,0)(-1,0)score db score000000 ;得分snake_color db 09 ;蛇颜色speed db 0 ;速度gameover db 0 ;游戏结束标记point db 0 ;得分数food_color db 04 ;食物色foodx dw ? ;食物坐标 foody dw ?seed dw 200 ;随即数种子;* ;显示方面的参数 topline dw 20 ;上边界leftline dw 60 ;左边界cut_x dw 4 ;每格宽cut_y dw 3 ;每格长max_x dw 49 ;最大格数(横)max_y dw 49 ;最大格数(纵)msg2 db zi dong hua 08-3 ban zheng wei and su dan modify msg3 db game over!msg4 db press any key to start! esc for exitmsg5 db esc for back, space for retryflash db 04h ;字体颜色(红)green db 02h ;字体颜色(绿)yellow db 8eh ;字体颜色(黄)white db 0fh ;字体颜色(白);* ;键盘扫描码left equ 4bh right equ 4dhup equ 48hdown equ 50hquit equ 01hspace equ 39h;* ;logo by bsasciitit1 db zzzzzzzzzzzzz dddddddd hhh hhh tit2 db zzzzzzzzzzzzz dddddddddd hhh hhhtit3 db zzz ddd ddd hhh hhhtit4 db zzz ddd ddd hhh hhh tit5 db zzz ddd ddd hhh hhhtit6 db zzz ddd ddd hhh hhhtit7 db zzz ddd ddd hhh hhhtit8 db zzz ddd ddd hhh hhhtit9 db zzz ddd dddhhhhhhhhhhtit10 db zzz ddd dddhhhhhhhhhhtit11 db zzz ddd ddd hhh hhh tit12 db zzz ddd ddd hhh hhh tit13 db zzz ddd ddd hhh hhh tit14 db zzz ddd ddd hhh hhh tit15 db zzz ddd ddd hhh hhh tit16 db zzzzzzzzzzzzzzz ddddddddddhhh hhhtit17 db zzzzzzzzzzzzzzz dddddddd hhh hhh;*.codemain proc far mov ax , data mov ds , axstart: mov ah , 00 mov al , 12h int 10h ;设置图形模式640*480 call show_title ;显示logo call show_start_msg ;显示开始提示信息 mov ah , 00h int 16h ;等待按键 cmp ah , quit jz dos ;esc则退出,否则进入游戏game_start:mov ah , 00;设置图形模式320*200,游戏在此模式下运行 mov al , 13h int 10h mov cl , 10 ;边框颜色 mov si , 59 mov bx , 19 mov di , 260 mov dx , 170 call rec ;打印边框 call clear_area ;游戏区域清空(效果) call init_snake ;初始化蛇 call getfood ;得到第一个食物 call run_snake ;开始运动蛇exit: mov dx , 0c0fh ;设置光标 call setgb mov bl , flash ;显示游戏结束 lea bp , msg3 mov cx , 11 call msg mov dx , 1605h mov bl , white ;显示提示信息 lea bp , msg5 mov cx , 29 call msgexit_loop: mov ah , 00h int 16h ;等待按键 cmp ah , quit jz start cmp ah , space jz game_start jmp exit_loop ;返回开始dos: mov ah , 00 mov al , 03 int 10h ;设置文本模式 mov ah , 4ch int 21h ;退出到dosmain endp;*;函数名: show_start_msg;功能: 显示开始提示信息;传递参数: ;函数返回: 空;*show_start_msg proc near push ax push bx push cx push dx push si push di mov dx , 190ch ;设置光标 call setgb mov bl , white lea bp , msg2 ;显示作者信息 mov cx , 54 call msg ;显示字符串 mov dx , 1616h ;设置光标 call setgb mov bl , 0a8h lea bp , msg4 ;显示提示信息 mov cx , 36 call msg ;显示字符串 pop di pop si pop dx pop cx pop bx pop ax retshow_start_msg endp;*;函数名: cutsnake;功能: 显示蛇一段;传递参数: ; si/di 游戏空间行/游戏空间列(50*50);函数返回: 空;*cutsnake proc near push ax push bx push cx push dx push si push di mov cl , snake_color;置颜色 mov ax,di;取坐标值 mul cut_y;乘每格长 add ax,topline ;加上边界 mov bx , ax add ax , 2 mov dx , ax push bx push dx mov ax,si;取坐标值 mul cut_x;乘每格宽 add ax,leftline ;加左边界 mov si , ax add ax , 3 mov di , ax pop dx pop bx call rec ;rec的参数是cl颜色 si左边 bx上边 di右边 dx下边 pop di pop si pop dx pop cx pop bx pop ax retcutsnake endp;*;函数名: cutfood;功能: 显示食物;传递参数: ; si/di 游戏空间行/游戏空间列(50*50);函数返回: 空;*cutfood proc near push ax push bx push cx push dx push si push di mov cl , food_color ;置颜色 mov ax,di;取坐标值 mul cut_y;乘每格长 add ax,topline ;加上边界 mov bx , ax add ax , 2 mov dx , ax push bx push dx mov ax,si;取坐标值 mul cut_x;乘每格宽 add ax,leftline ;加左边界 mov si , ax add ax , 3 mov di , ax pop dx pop bx call rec ;rec的参数是cl颜色 si左边 bx上边 di右边 dx下边 pop di pop si pop dx pop cx pop bx pop ax retcutfood endp;*;函数名: clearcut;功能: 清除格;传递参数: ; si/di 游戏空间行/游戏空间列(50*50);函数返回: 空;*clearcut proc near push ax push bx push cx push dx push si push di mov cl, 0 ;置颜色(黑) mov ax,di ;取坐标值 mul cut_y ;乘每格长 add ax,topline ;加上边界 mov bx , ax add ax , 2 mov dx , ax push bx push dx mov ax,si;取坐标值 mul cut_x;乘每格宽 add ax,leftline ;加左边界 mov si , ax add ax , 3 mov di , ax pop dx pop bx call rec pop di pop si pop dx pop cx pop bx pop ax retclearcut endp;*;函数名: rand ;功能: 产生指定范围大小的随机数;传递参数: ; si 数字的范围最大值+1 ;函数返回: ax 返回随机数的值;*rand proc push bx push cx push dx push si push di sti mov ah,0 ;读时钟计数器值 int 1ah mov ax , seed add ax , dx and ax , 8fffh mov seed , ax ;产生新种子 mov dx , 0 mov bx , si ;指定随机数的范围 div bx mov ax , dx pop di pop si pop dx pop cx pop bx retrand endp;*;函数名: getfood ;功能: 产生新食物,即随机产生一组49*49的坐标;传递参数: ; ;函数返回: foodx与foody的值;*getfood proc push ax push bx push cx push dx push si push di mov si,50;置随机数范围(最大值+1) call rand ;产生随机数 mov foodx,ax ;赋予食物坐标x mov si,50;置随机数范围(最大值+1) call rand ;产生随机数 mov foody,ax ;赋予食物坐标y mov si,foodx mov di,foody call cutfood ;画食物 pop di pop si pop dx pop cx pop bx pop ax retgetfood endp;*;函数名: delay;功能: 延时;传递参数: ;函数返回: ;*delay proc push ax push cx mov ax , 0ah sub ax , cx mov cx , axm3_1: push cx ;外层循环来控制延时速度 mov cx , 5000 m3_2: in al , 61h ;读8255a的b口 and al , 10h cmp al , ah je m3_1 mov ah , al loop m3_2 pop cx loop m3_1 pop cx pop ax retdelay endp;*;函数名: check_key;功能: 处理键盘响应;传递参数: 无;函数返回: direction的值,gameover的值(按esc时);*check_key proc push ax push bx push cx push dx push si push di mov ah , 01h int 16h jz check_nokey ;如果没有按键就继续 mov ah , 00h ;取得扫描码 int 16h cmp ah , left ;往左移动 jz check_left cmp ah , right ;往右移动 jz check_right cmp ah , up;往上移动 jz check_up cmp ah , down ;往下移动 jz check_down cmp ah , quit ;结束游戏 jz check_quit jmp check_nokeycheck_left: mov ah , -1 ;(-1,0) mov al , 0 mov bx , ax ;检查是否反向 add bx , direction jz check_nokey mov direction , ax jmp check_nokeycheck_right: mov ah , 1 ;(1,0) mov al , 0 mov bx , ax ;检查是否反向 add bx , direction jz check_nokey mov direction , ax jmp check_nokeycheck_up: mov ah , 0 ;(0,-1) mov al , -1 mov bx , direction ;检查是否反向 sub bl , 1 jz check_nokey mov direction , ax jmp check_nokeycheck_down:mov ah , 0 ;(0,1) mov al , 1 mov bx , direction ;检查是否反向 add bl , 1 jz check_nokey mov direction , ax jmp check_nokeycheck_quit:jmp check_exit check_exit:mov al,1 ;按下esc键的情况 mov gameover,alcheck_nokey: pop di pop si pop dx pop cx pop bx pop ax retcheck_key endp;*;函数名: check_die;功能: 处理死亡的响应;传递参数: si,di为当前蛇头部的坐标;函数返回: 蛇参数的值;*check_die proc push ax push bx push cx push dx push si push di cmp si , 50 ;检查是否到达边界 jz dead cmp si , 255 jz dead cmp di , 50 jz dead cmp di , 255 jz dead mov ax,si;检查是否接触蛇身 mov dh,al;dx中获得当前坐标 mov ax,di mov dl,al xor cx , cx mov cl , len sub cl , 1 mov bx , offset body check_die_loop: mov ax , bx+2 cmp ax , dx ;取出蛇身信息进行比较 jz dead ;触及蛇身即死亡 dec cl jz next add bx , 2 jmp check_die_loopdead: mov al,1 ;死亡即赋gameover值1 mov gameover,al jmp nextnext: pop di pop si pop dx pop cx pop bx pop ax retcheck_die endp;*;函数名: check_eat;功能: 处理吃到食物的响应;传递参数: si,di为当前蛇头部的坐标;函数返回: 蛇参数的值;*check_eat proc push ax push bx push cx push dx push si push di mov ax , foodx mov bx , foody cmp ax , si jz ok1 jmp check_eat_outok1: ;横坐标相等 cmp bx , di jz ok2 jmp check_eat_outok2: ;纵坐标也相等 mov al , point add al , 1 mov point , al ;加分 mov bx , offset body;增加蛇长 xor ax , ax mov al , len add bx , ax add bx , ax ;取到蛇尾 sub bx , 2 mov ax , bx mov dx , direction sub ah , dh ;坐标减方向 sub al , dl ;坐标减方向 add bx , 2 ;新格的存储位置 mov bx , ax mov al , len ;len+1 add al , 1 mov len , al call getfood ;得到新食物check_eat_out: pop di pop si pop dx pop cx pop bx pop ax retcheck_eat endp;*;函数名: show_point;功能: 打印分数(进制转换);传递参数: ;函数返回: ;*show_point proc push ax push bx push cx push dx push si push di mov al, point ;二进制数 mov ah, al ;ah中放高4位 mov al, point and al, 0fh ;al中放低4位 mov bx, offset score;取得目标字符串地址 add bx, 7;更改的末位在字串中的位置(后面保留2个0)b1: cmp al,09h ;低4位大于9跳往b2 ja b2 add al,30h ;低4位不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南会计高考试题及答案
- 锯木头考试题及答案
- 现场培训考试题及答案
- 骨盆测量试题及答案
- 函数嵌套试题及答案
- 速写4级考试试题及答案
- 工厂电气考试题及答案
- java和数组区别面试题及答案
- 临床诊断医学试题及答案2025版
- 2025年死因培训试题(附答案)
- 2025年蛟川书院分班测试题及答案
- 飞机数字孪生与预测性维护集成
- 2025《煤炭购销合同》
- 2025年行政执法证考试必刷题库与答案
- 基孔肯雅热防控知识考试试题含答案
- 2024墙面原位加固修复技术规程
- 新版《工会基础知识》试题库及答案汇总-上(单选、多选题)
- 2022年液化气站项目可行性研究报告
- 中控室人员进出登记表
- 细胞重组和细胞融合PPT
- STOP安全观察卡
评论
0/150
提交评论