汇编贪吃蛇课程设计附源码范本模板Word文档下载推荐.docx
《汇编贪吃蛇课程设计附源码范本模板Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编贪吃蛇课程设计附源码范本模板Word文档下载推荐.docx(50页珍藏版)》请在冰豆网上搜索。
![汇编贪吃蛇课程设计附源码范本模板Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-12/10/233192f5-4742-4a32-8b85-87b475521e26/233192f5-4742-4a32-8b85-87b475521e261.gif)
食物坐标
foodYdw?
seeddw2;
随即数种子
键盘扫描码:
LEFTEQU4Bh
RIGHTEQU4Dh
UPEQU48h
DOWNEQU50h
QUITEQU01h
SPACEEQU39h
main函数
主函数首先加载定义好的数据,设置图形模式大小,调用显示开始提示信息的函数,中断等待用户按键输入,判断退出或开始游戏.进入游戏,重新设置图形模式,调用rec,clear_area,getfood,run_sanke函数分别打印边框,初始化蛇,随机食物,开始运动蛇。
当蛇死亡时,中断,等待用户输入,根据用户的输入继续游戏或退出程序。
mainprocfar
movax,@data
movds,ax
start:
movah,00
moval,12h
int10h;
设置图形模式640*480
callshow_start_msg;
显示开始提示信息
callshow_title
movah,00h
int16h;
等待按键
cmpah,QUIT
jzdos;
ESC则退出,否则进入游戏
game_start:
movah,00;
设置图形模式320*200,游戏在此模式下运行
moval,13h
int10h
movcl,7;
边框颜色
movsi,59
movbx,19
Init_snake;
初始化蛇
callgetfood;
得到第一个食物
callrun_snake;
开始运动蛇
movdx,1010h;
设置光标
callSetGb;
设置光标位置
movbl,white;
显示死亡信息
leabp,msg3
movcx,13
callMsg;
显示字符串
movdx,1605h
显示提示信息
leabp,msg5
movcx,29
callMsg
exit_loop:
int16h;
cmpah,QUIT
jzstart
cmpah,SPACE
jzgame_start
jmpexit_loop;
返回开始
dos:
moval,03
设置文本模式
movah,4ch
int21h;
退出到DOS
mainendp
Run_snake函数
蛇一开始默认向右运动,当按下空格键时游戏暂停,再按空格键游戏开始。
用INT
10H的1号功能检测是否有按键输入,改变蛇头前进的方向,没有保持当前的前进方向.在蛇运动过程中,不断检查是否撞墙或蛇头触碰到蛇身,如果是,跳转到stop,提示重新或退出。
当检查到食物坐标和蛇头坐标一致时,食物被吃,蛇身长度+1,保存当前前进方向。
run_snakeproc
pushax
pushbx
pushcx
pushdx
pushsi
pushdi
movdx,0005h
callSetGb
movbl,white
leabp,msg6
movcx,30
loop1:
callDelay
moval,1
cmpal,gameover
jzstop
movbx,offsetBody
movcx,0
movcl,Len
addbx,cx
subbx,2
A1:
movax,[bx]
mov[bx+2],ax
subbx,2
loopA1
addhead:
movbx,offsetBody;
增加新头部并改写数据
movax,[bx]
movdx,Direction
addah,dh;
坐标加方向
addal,dl;
mov[bx],ax;
存入头部
movdx,0;
为check_die准备参数si,di
movdl,ah
movsi,dx
movdl,al
movdi,dx
callcheck_die;
检查死亡
cmpal,gameover
jzstop
callcheck_eat;
检查吃
cmpcx,1
jzA2
movax,0
addLen,1
moval,Len
addbx,ax;
取到蛇尾
addbx,ax
subbx,2
movax,[bx]
movcx,0
mov[bx],cx
movdx,0
movdl,ah
movsi,dx
movdl,al
subLen,1
callclearcut
movbx,offsetBody
movax,[bx]
movdi,dx
callcutsnake
jmpA3
A2:
movax,[bx]
callcutsnake;
画新头部
callgetfood
A3:
callshow_point
callcheck_key;
检查按键
jmploop1;
蛇运动循环DATASSEGMENT
stop:
popdi
popsi
popdx
popcx
popbx
popax
ret
run_snakeendp
getfood函数
设置了一个随机数坐标x最大值50,调用Rand函数获取随机x轴坐标,同理可得随机y轴坐标,该坐标就是食物的随机坐标。
调用cutfood函数,将随机食物在显示屏输出
getfoodproc
M1:
movsi,50;
置随机数范围(最大值+1)
callRand;
产生随机数
movfoodx,ax;
赋予食物坐标x
movsi,50;
movfoody,ax;
赋予食物坐标y
movsi,foodx
movdi,foody
movax,di;
取坐标值
mulcut_y;
乘象素值
addax,topline
movdx,ax
movax,si;
mulcut_x;
addax,leftline
movcx,ax
movah,0dh
movbh,0
int10h
cmpal,snake_color
jzM1
callcutfood;
画食物
getfoodendp
Check_key函数
响应键盘输入,控制蛇的移动以及控制游戏退出
Check_keyproc
movah,01h
int16h
jzcheck_nokey;
如果没有按键就继续
movah,0;
取得扫描码
pushax
jnzS2
S1:
movah,0
cmpah,SPACE
jnzS1
S2:
cmpah,LEFT;
往左移动
jzcheck_LEFT
cmpah,RIGHT;
往右边移动
jzcheck_RIGHT
cmpah,UP;
往上移动
jzcheck_UP
cmpah,DOWN;
往下移动
jzcheck_DOWN
cmpah,QUIT;
结束游戏
jzcheck_QUIT
jmpcheck_nokey
check_LEFT:
movah,—1;
(—1,0)
moval,0
movbx,ax;
检查是否反向
addbx,Direction
jzcheck_nokey
movDirection,ax
check_RIGHT:
movah,1;
(1,0)
movbx,ax;
movDirection,ax
check_UP:
movah,0;
(0,—1)
moval,—1
movbx,Direction;
subbl,1
jzcheck_nokey
check_DOWN:
(0,1)
moval,1
movbx,Direction;
addbl,1
check_QUIT:
jmpcheck_exit
check_exit:
按下ESC键的情况
movgameover,1
check_nokey:
movah,0ch
moval,0
int21h
Check_keyendp
3系统测试及改进
3.1程序测试
打开程序,显示欢迎界面,提醒用户输入,
按任意键进入程序,游戏开始时,贪吃蛇默认向右移动,使用键盘的上下左右控制贪吃蛇的前进的方向,最下方的Score实时更新分数,游戏过程中空格键可以暂停和继续
、
每吃一个食物,Socre+100,蛇身长度+1
当蛇头撞墙之后,弹出信息-Gameisover!
程序中断,提示并等待用户操作,当按ESC键时退回主界面,按空格键重新开始游戏,此时分数归零,蛇身长度也恢复到开始时的默认值
如图,当蛇头撞上蛇身时,等同蛇头撞上墙壁
3。
2系统改进
(1)游戏制作的精细度和画面的质量有待提高,改善蛇和食物的样子
(2)联机,可以多台机器联机比赛,
(3)可以记录历史最好成绩
(4)某些食物具有特效,比如缩短蛇身的长度,可以穿墙
(5)可以改变游戏的速度,
(6)长时间游戏提醒玩家休息
(7)实现背景音乐
(8)可以选择不同形状的蛇身,改变蛇的颜色
(9)可以保存当前游戏,玩家下次可以继续当前游戏
4源码
。
modelsmall
.stack200
data
Lendb?
Score00000'
;
speeddb0;
gameoverdb0;
foodYdw?
;
******************************************************************************************
显示方面的参数
toplinedw20;
上边界
leftlinedw60;
左边界
cut_xdw4;
每格宽
cut_ydw3;
每格长
max_xdw49;
最大格数(横)
max_ydw49;
最大格数(纵)
msg1db'
GreedySnakes’
msg2db’by:
xiaobin’
msg3db’Gameisover!
’
msg4db'
Pressanykeyforstart!
Escforexit'
msg5db’ESCforback,Spaceforretry'
msg6db'
pressspaceforpause/continue’
msg7db'
’
title1db6dup(20h),5dup(0dch),5dup(20h),5dup(0dch),5dup(20h)
title2db6dup(20h),0dbh,3dup(20h),0dbh,5dup(20h),0dbh,3dup(20h),0dbh,5dup(20h)
title3db6dup(20h),0dbh,3dup(20h),0dbh,5dup(20h),0dbh,3dup(20h),0dbh,5dup(20h)
title4db7dup(0dfh),3dup(20h),7dup(0dfh),3dup(20h),5dup(0dfh),0fdh
yellodb0eh
greendb02h
whitedb0fh
bluedb01h
******************************************************************************************
键盘扫描码
.code
mainprocfar
movax,@data
movah,00
movah,00h
jzdoes;
game_start:
movah,00;
设置图形模式320*200,游戏在此模式下运行
moval,13h
movcl,7;
movsi,59
movdi,260
movdx,170
callrec;
打印边框
callclear_area;
游戏区域清空(效果)
callInit_snake;
callgetfood;
callrun_snake;
exit:
movdx,1010h;
movbl,white;
movcx,13
movdx,1605h
movbl,white;
exit_loop:
cmpah,SPACE
does:
movah,4ch
;
******************************************************************************************
函数名:
SetGb
功能:
设置光标位置
传递参数:
dh/dl行/列
******************************************************************************************
SetGbprocnear
movbh,0
movah,02h
popax
SetGbendp
******************************************************************************************
Msg
输出字符串
bl颜色号(BLRGBIRGB)
bp字符串偏移地址
cx字符串长度
******************************************************************************************
Msgprocnear
pushes
pushds
popes;
将数据段ds送es
moval,0
movah,13h
movbh,0
popes
ret
Msgendp
******************************************************************************************
show_title
功能:
显示开始提示信息
******************************************************************************************
show_titleprocnear
movdl,10h
movcx,10h
yidong:
decdl
movdh,0fh
moval,020h
movah,0eh
incdl
movdh,0ch
movbl,yello
leabp,title1
movcx,26
movdh,0dh
leabp,title2
movdh,0eh
movbl,yello
leabp,title3
movcx,26
leabp,title4
calldelay
callshow_start_msg
loopyidong
moval,0
show_titleendp
******************************************************************************************
函数名:
show_start_msg
******************************************************************************************
show_start_msgprocnear
p