资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
L/O/G/O 用汇编语言实现贪吃蛇游戏 www.themegallery.com 组员蒋亚莲、徐文艳、谢琳琳 张颜、彭丹、胡妙春 班级电子0901班 www.themegallery.com 程序预实现功能 整体设计思想 程序流程图 程序分析4 1 2 3 www.themegallery.com 程序实现功能 1、画出游戏的背景、边框、颜色、显示菜单信息 2、调用键盘的函数宏定义键盘上每个需要用到的按键代码 3、可以选择游戏等级即蛇的运行速度不一样这其中要获取 系统 时间。 4、使用随即函数让下一个食物的位置随机产生。 5、当蛇吃到一个食物时蛇身会自己增加一节分数加1。 6、能使用上下左右键控制蛇的运动方向 7、能判断蛇是否死亡蛇头撞到边界或者在自己身上游戏结 束。 www.themegallery.com 总体设计思想 1、菜单界面的产生和游戏界面的产生。 2、如何显示和控制得分。 3、如何根据用户选择的级别完成贪吃蛇运动的速度的控制。 4、如何显示贪吃蛇和食物。 5、如何通过键盘方向键的输入控制贪吃蛇的方向。 6、如何通过随机数控制食物的产生。 7、贪吃蛇吃到食物的时候如何进行。 8、如何控制游戏结束的条件即碰到四壁或者身体接触就 死亡 要想设实现以上功能需要考虑以下几个方面 www.themegallery.com 最初给出一个初始化的界面显示一个菜单当用户 选择级别之后跳转到游戏界面。在红色界面下给出一个贪 吃蛇和一个食物圈右上方显示得分。用户通过键盘输入方 向键改变贪吃蛇的方向目的是让贪吃蛇接近食物并穿过 此时贪吃蛇长度增加并且得分按级别不同而增加同时 由随机数产生一个新的食物。这样重复做下去随着吞下食 物的个数增加得分会相应的增加长度会增加但是难度 也会增大因为当贪吃蛇碰到四周的壁的时候或者贪吃蛇头 部碰到身体的时候就会输掉游戏。游戏过程中按ESC键 退出游戏。 www.themegallery.com 程序流程图 www.themegallery.com 运行界面 www.themegallery.com 可改进的地方 因为编程的时间有限我们的游戏功能还有很大的提升空间比 如说 1这个游戏没有晋级功能每玩一局最后都会以失败退出程序。 其实可以设定一个子程序当蛇的长度到达一定值时可升到第二 级。 2蛇的生命只有一条我们设定的lord=1,即赋给蛇一条生命。其 实可以给它很多条生命每死一次都将生命条数减一。 3可以增加背景音乐比如说在蛇运动的时候以及在蛇死亡的时 候配置不同的音乐这样玩游戏会更有趣。 这些功能有待以后继续探讨 www.themegallery.com escape equ 01h ;宏定义 up equ 48h down equ 50h right equ 4dh left equ 4bh data segment speed db 70,55,40,25,10 ;游戏速度 level db 0 color db 0 msg db Nibbling Snake Ver1.0,0ah,0dh db 1.Easier,0ah,0dh db 2.Easy,0ah,0dh db 3.Normal,0ah,0dh db 4.Hard,0ah,0dh www.themegallery.com db 5.Harder,0ah,0dh db Choose your level:,$ ;菜单 sx db 200 dup(0) ;蛇的位置(sx,sy) sy db 200 dup(0) fx db 0 ;食物的位置(fx,fy) fy db 0 x db 20 ;snack的头的当前位置(x,y) y db 20 d db right ;方向 dtemp db right ;当前的方向 ls db 4 ;snack的长度 lord db 1 ;有几次生命 N1 DB 29 N2 DB 217 N3 DB 40 SEED DB 0 ;随机数,用来产生食物 data ends www.themegallery.com code segment assume cs:code,ds:data go: mov ax,data mov ds,ax mov ah,0 ;调用00H功能设置显示器模式AL显示器 模式:03H代表802516色的文本 04H代表3202004色 mov al,4 int 10h mov ah,0 mov al,3 int 10h mov ah,9 ;调用09H功能显示字符串即菜单栏 mov dx,offset msg int 21h mov ah,1 ;调用01H功能键盘输入LEVEL int 21h www.themegallery.com mov level,al sub level,30h ;ASCII码转换为二进制码 mov ah,0 ;再次设置屏幕:320*200*4 mov al,4 int 10h mov ah,0bh ;调用0BH功能设置调色板、背景色或边框设置 颜色BH00HBL颜色选择调色板BH 01HBL调色板(320200、4种颜色的图形模式) mov bh,1 mov bl,0 Int 10h mov bh,0 ;为背景设置黑色 int 10h www.themegallery.com mov sx1,20 ;设置起点 (20,17),(20,18),(20,19),(20,20) mov sy1,17 mov sx2,20 mov sy2,18 mov sx3,20 mov sy3,19 mov sx4,20 mov sy4,20 mov dx,4 ;DX=4 mov cx,4 ;CX=4 ground: ;为(4,4)-(163,163) 设置红色背景 mov ah,0ch ;功能0CH在(4,4)写红色图形像素 AL=像素值BH=页码(CX、DX)=图 形坐标列(X)、行(Y) mov al,2 int 10h www.themegallery.com inc cx ;CX+1比较CX和164不相等时循环即一直写 图形像 素 直到CX=163 cmp cx,164 jne ground mov cx,4 ;CX=4,DX+1,一直写图形像素直到DX=163 inc dx cmp dx,164 jne ground newfood: mov ah,0 ;读取时间滴答计数 int 1ah mov seed,dl ;转移到随机数的位置 call food ;画一个新的食物 call score ;计分 www.themegallery.com direct: call direction ;获取新的方向 call liveordie ;判断是否还活着 cmp lord,0 ;如果lord=0跳转到quit退出游戏 je quit draw: mov bl,4 ;把新头的位置(x*4)、(y*4)入栈 mov al,x mul bl push ax mov al,y mul bl push ax mov color,1 ;为蛇设置绿色 call pix ;画新的头 mov ah,0 ;判断snack是否吃了food mov al,fx www.themegallery.com cmp x,al jne tail ;x方向如果没有则转到tail(消除尾部) mov al,fy cmp y,al je inclength ;y方向如果有则转到inclength(增加长度) tail: call newsnake ;向前移动内部所有点 call delay ;并保持一段时间 jmp direct ;继续从direct循环判断新的方向是否活着、移动、判 断 是否吃了food inclength: inc ls ;LS(长度)+1 lea si,sx ;SI=SX(snack横坐标)的偏移地址 lea di,sy ;DI=SY(snack纵坐标)的偏移地址 mov ah,0 mov al,ls add si,ax ;SI=SI+AX(当前坐标+长度)作为新的头部位置 add di,ax mov al,x ;把新的位置给新的头以便下次循环时画新的头看上去 增加了一个长度 www.themegallery.com mov si,al mov al,y mov di,al call delay ;保持一段时间 jmp newfood ;转到添加新的food继续循环 quit: mov ah,1 ;按任意键退出 int 21h ;功能01H,设置光标形状,CH低四位光标的起始 ,CL低四位光标的终止行 mov ah,0 ;屏幕模式为test mov al,3 int 10h mov ah,4ch ;返回DOS int 21h www.themegallery.com 由于我们的子程序太长不便在PPT中展 示我们将在记事本里为大家展示。 L/O/G/O www.themegallery.com Thank You!
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号