汇编贪吃蛇实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言与接口课程实验报告

实验编号__________实验六______________

实验名称__________贪吃蛇程序__________

实验室名称________软件机房____________

班级______________软件93______________

学号______________*******___________

姓名_______________*******_____________

实验日期___2011__年___06__月___15___日

评分教师实验报告成绩__________ 评分日期________年_______月________日

软件学院汇编与接口综合实验选题表

一、实验目的:

熟练掌握汇编的各种指令,综合运用汇编的各种指令编写一个贪吃蛇程序。在贪吃蛇程序的编写过程中深刻理解汇编语言,深刻理解汇编语言与其他语言的不同。

二、实验环境

Masm for Windows集成环境2011。

三、实验内容

1、回顾书中关于汇编语言的基础知识,利用彩色图形程序设计、发声系统的程序设计的知识,实现贪吃蛇的可视化及声音。

2、实验思路:

贪吃蛇程序,利用不同的颜色形状的字符分别表示贪吃蛇蛇身,食物,以及障碍物。

在dos界面下,有25行80列,第0行设置游戏进行的分数及关卡信息,在1~24行为蛇的活动范围。

游戏设置4关,过三关游戏及通关成功。否则挑战失败,可以重新挑战或者退出。

因为此贪吃蛇程序是利用字符完成的,所以始终要对指定的行和指定的列进行读、写字符操作。所以在程序开始以前编写read和write宏命令是非常必要的。

贪吃蛇移动的过程中,方向是随时可能改变的,所以这里就利用的中断。把9号中断向量给重新定义为:把键盘读紧的字符都存放在adrs中,再判断adrs是不是指定的上下左右键。

蛇的移动过程始终伴随有各种的判断过程,首先判断是否进入下一个关卡,如果是则进入下一关,如果不是则继续判断蛇是否撞到自身、墙壁、障碍物。如果是则游戏挑战失败,如果不是则进入判断是否是食物的过程。这三个判断的方法都是一样的,即:通过蛇头所在的行dh,所在的列dl,以及蛇此时的前进方向addrs来判断蛇头字符前方的字符是什么,从而得出判断结果。

蛇的行走过程的实现:程序主干循环snake_run循环一次蛇走一步,蛇在不吃食物的行走过程的实现是根据蛇头所在的行dh,所在的列dl,以及蛇此时的前进方向addrs,将蛇头前方的位置变为蛇身,再利用蛇尾两节的特殊性,将蛇尾变为空,蛇尾第二节变为第一节,蛇尾第三节变为第二节。蛇吃食物加一的过程,只是在上诉过程中再,将蛇尾最后两节变为原来的三节。这样就实现了整个行走过程。

贪吃蛇设计思路如框图所示:

四、源程序清单、测试数据、运行结果(1)源程序清单

DATAS SEGMENT

;此处输入数据段代码

dw 0,0

snk db 1 ;蛇身的字符

snake_tail2 db 2 ;蛇倒数第二节的字符

food db 3 ;食物的字符

snake_tail db 4 ;蛇尾巴的字符

door_shape db 8 ;门的字符

squ db 9 ;障碍的字符

big_food db 15 ;大食物的字符

blank_space db 32 ;空字符

adrs db 5 ;读取的键盘数码

snake_length db?;蛇长

level db?;关卡

level_up_score db 4 ;过关条件

character db?;读取的字符

addrs dw?;蛇运动的方向

food_row db?;食物所在的行

food_column db?;食物所在列

hwrt db?

gmov db'game over press r to restart press q to quit $';初始化信息

suc_msg db' You are successful going over all zhe levels $'

suc_msg1 db' Please press q to quit $'

score_msg db'score :$'

score1 db 48 ;分数

score2 db 48

writer db'Developer: Ge Lingjia $'

ID db'ID: 09161047 $';第一行信息

level_msg db'level: $'

msg1 db'The way to play the game:$'

way db' press w to up ,press s to down,press a to left,press d to right$' msg db'Press any key(except a,s,d,w) to start$'

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

db 200 dup(0)

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

mov ax,0

mov es,ax

;******************************************** ;清屏

clean_p macro

mov ah,6

mov al,0

mov ch,0

mov cl,0

mov dh,24

mov dl,79

mov bh,10

int 10h

endm

;******************************************* ;游戏第一行界面

firstrow macro

mov dh,0

相关文档
最新文档