基于汇编的贪食蛇游戏Word文件下载.docx
《基于汇编的贪食蛇游戏Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于汇编的贪食蛇游戏Word文件下载.docx(37页珍藏版)》请在冰豆网上搜索。
Bodydw200dup(0);
蛇的身体位置
Directiondw256
Scoredb'
Score00000'
得分
snake_colordb0ah;
蛇颜色
food_colordb0ch;
食物色
speeddb0;
速度
gameoverdb0;
游戏结束标记
Pointdb0;
得分数
foodXdw?
食物坐标
foodYdw?
seeddw2;
随即数种子
;
******************************************************************************************
显示方面的参数
toplinedw20;
上边界
leftlinedw60;
左边界
cut_xdw4;
每格宽
cut_ydw3;
每格长
max_xdw49;
最大格数(横)
max_ydw49;
最大格数(纵)
msg1db'
GreedySnakes'
msg2db'
by:
tangxing'
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
键盘扫描码
LEFTEQU4Bh
RIGHTEQU4Dh
UPEQU48h
DOWNEQU50h
QUITEQU01h
SPACEEQU39h
.code
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
movdi,260
movdx,170
callrec;
打印边框
callclear_area;
游戏区域清空(效果)
callInit_snake;
初始化蛇
callgetfood;
得到第一个食物
callrun_snake;
开始运动蛇
exit:
movdx,1010h;
设置光标
callSetGb;
设置光标位置
movbl,white;
显示死亡信息
leabp,msg3
movcx,13
callMsg;
显示字符串
movdx,1605h
显示提示信息
leabp,msg5
movcx,29
callMsg
exit_loop:
cmpah,QUIT
jzstart
cmpah,SPACE
jzgame_start
jmpexit_loop;
返回开始
dos:
moval,03
设置文本模式
movah,4ch
int21h;
退出到DOS
mainendp
函数名:
SetGb
功能:
设置光标位置
传递参数:
dh/dl行/列
SetGbprocnear
pushax
pushbx
movbh,0
movah,02h
int10h
popbx
popax
ret
SetGbendp
Msg
输出字符串
bl颜色号(BLRGBIRGB)
bp字符串偏移地址
cx字符串长度
Msgprocnear
pushes
pushds
popes;
将数据段ds送es
moval,0
movah,13h
movbh,0
popes
popax
ret
Msgendp
show_title
显示开始提示信息
show_titleprocnear
pushcx
pushdx
movdl,10h
movcx,10h
yidong:
decdl
movdh,0fh
callSetGb
moval,020h
movah,0eh
incdl
movdh,0ch
movbl,yello
leabp,title1
movcx,26
movdh,0dh
leabp,title2
movdh,0eh
leabp,title3
leabp,title4
calldelay
popcx
callshow_start_msg
loopyidong
movah,0ch
moval,0
int21h
popdx
show_titleendp
show_start_msg
show_start_msgprocnear
movdx,1426h
movbl,0a1h
leabp,msg1
movcx,12
movdx,190bh
movbl,08h
leabp,msg2;
显示作者信息
movcx,11
movdx,1619h;
movbl,white
leabp,msg4;
movcx,37
show_start_msgendp
cutsnake
显示蛇的一格
si/di游戏空间列/游戏空间行(50*50)
cutsnakeprocnear
pushsi
pushdi
movcl,snake_color;
置颜色
movax,di;
取坐标值
mulcut_y;
乘象素值
addax,topline;
加上边界
movbx,ax
addax,2
movdx,ax
movax,si;
mulcut_x;
addax,leftline;
movsi,ax
addax,3
movdi,ax
callRec;
Rec的参数是cl颜色si左边bx上边di右边dx下边
popdi
popsi
cutsnakeendp
cutfood
显示食物
函数返回:
空
cutfoodprocnear
movcl,food_color;
movbx,ax
addax,2
pushbx
cutfoodendp
clearcut
清除格
clearcutprocnear
movcl,0;
置颜色(黑)
clearcutendp
Rand
产生指定范围大小的随机数
si数字的范围最大值+1
ax返回随机数的值
Randproc
movah,2ch
movax,dx
movdx,0
movbx,si;
指定随机数的范围
divbx
ret
Randendp
getfood
产生新食物,即随机产生一组49*49的坐标
foodx与foody的值
getfoodproc
M1:
movsi,50;
置随机数范围(最大值+1)
callRand;
产生随机数
movfoodx,ax;
赋予食物坐标x
movfoody,ax;
赋予食物坐标y
movsi,foodx
movdi,foody
addax,topline
movdx,ax
addax,leftline
movcx,ax
movah,0dh
movbh,0
cmpal,snake_color
jzM1
callcutfood;
画食物
getfoodendp
Delay
延时
Delayproc
pushcx
pushdx
movcx,33144
waitf:
inal,61h
andal,10h
cmpal,ah
jewaitf
movah,al
loopwaitf
Delayendp
Check_key
处理键盘响应
Direction的值,gameover的值(按ESC时)
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)
movbx,ax;
检查是否反向
addbx,Direction
jzcheck_nokey
movDirection,ax
check_RIGHT:
movah,1;
(1,0)
check_UP:
(0,-1)
moval,-1
movbx,Direction;
subbl,1
jzcheck_nokey
movDirection