首页 软件工程实践报告

软件工程实践报告

举报
开通vip

软件工程实践报告软件工程实践报告 题目名称: 贪食蛇游戏软件 姓名 专业 班级学号 同组人 指导教师 摘要随着社会的发展,人们生活的步调日益加快,越来越多的人加入了全球化的世界。人们不在拘泥于一小块天地。加班,出差成了现代人不可避免的公务。而此时一款可以随时随地娱乐的游戏成了必需品。在手机和电脑成为人们日用品的社会,一款能在其上能便捷运行的游戏成为买家的参考点。现在我们所要介绍的这一款游戏----贪吃蛇,就是满足以上要求而设计出来的,希望能给玩家带来娱乐。贪吃蛇这一游戏简单易行,操作方便,娱乐性较强,吸引了不少人。这一款游...

软件工程实践报告
软件工程实践 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 题目名称: 贪食蛇游戏软件 姓名 专业 班级学号 同组人 指导教师 摘要随着社会的发展,人们生活的步调日益加快,越来越多的人加入了全球化的世界。人们不在拘泥于一小块天地。加班,出差成了现代人不可避免的公务。而此时一款可以随时随地娱乐的游戏成了必需品。在手机和电脑成为人们日用品的社会,一款能在其上能便捷运行的游戏成为买家的参考点。现在我们所要介绍的这一款游戏----贪吃蛇,就是满足以上 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 而设计出来的,希望能给玩家带来娱乐。贪吃蛇这一游戏简单易行,操作方便,娱乐性较强,吸引了不少人。这一款游戏紧紧地抓住了人们的心理,虽然简单,却起乐无穷,在人们不断追求更多的欲望下,该游戏给人们带来了追逐的快感,以及成功后的满足感,对于一直处于高压下的现代人是很好的放松工具。关键字:turboc,结构体函数,蛇节模型目录第1章前言--------------------------------------------------------1第2章需求分析----------------------------------------------------1第3章设计要求----------------------------------------------------23.1基本要求和提高要求-------------------------------------------2第4章系统的组成--------------------------------------------------3第5章概要设计----------------------------------------------------35.1程序初始化---------------------------------------------------35.2程序 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 --------------------------------------------------------------------------------4第6章详细设计------------------------------------------------------------------------------66.1对象模型设---------------------------------------------------66.2食物及蛇状态的初始化及食物的出现------------------------------96.3游戏运行中的设计思-------------------------------------------126.4设置游戏规则及结---------------------------------------------14第七章调试及测试结果与分析----------------------------------------17第八章结论--------------------------------------------------------18参考文献-----------------------------------------------------------19附录---------------------------------------------------------------19第一章前言C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 了C语言。早期的C语言主要是用于UNIX系统。由于C语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用。成为当代最优秀的程序设计语言之一。语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。因而越来越多的高等院校已经将C语言作为非计算机专业甚至计算机专业的必修课和选修课,C语言也成为了软件设计的首选语言之一。本学期我们进行了软件工程实习活动,主要的任务就是运用所学的C语言知识,在turboc集成环境下制作一个小型贪食蛇应用程序,以达到熟悉和熟练运用C语言的目的,为将来的学习和工作打下良好的实践基础。虽然贪食蛇游戏在我们日常生活中是很平常见,但作为很普通的一款小游戏,他却有着极强的生命力。它的简单易行使之广泛的存在于电脑,手机,游戏机等载体上,加上变化无穷、引人入胜让它成为了一款受人喜欢的小游戏第二章需求分析项目背景和内容概要:现在我们所要介绍的这一款游戏---贪吃蛇。是个简单的小游戏,但却能给人以放松,让我们从繁重的日常生活中解脱出来。而只有我们的身 心得 信息技术培训心得 下载关于七一讲话心得体会关于国企改革心得体会关于使用希沃白板的心得体会国培计划培训心得体会 到了娱乐才能更好的投入到新的工作。现在的人,不管是已经工作的,还是还未进入社会的学生,都面临着很大的压力,而这样一款能让我们随时随地都能享受的游戏,其魅力还是不可估量的。·系统分析1可行性分析1。1技术可行性完全可以利用C语言来编程,在TC下也能顺利运行,可以说在技术这方面不会有大的问题。1。2经济可行性可以说其经济利益将相当可观,随着手机和电脑的普及,这样的小游戏也将随着普及,到时候我们也可以静观其成。1。3操作可行性对于这样一个简单易行的游戏,其操作不会有问题的,不论是怎样的平台都能很好的运行。而用户也可以在其受益不浅。2需求分析游戏是人们生活中不可或缺的,一个人从小到大,真正伴随他成长的东西,游戏占有着很重要的地位。不论是一个玩具,还是一个能和伙伴一起开心的小游戏,都是能给我们留下很多美好的回忆。所以不论是什么样的游戏,只要它能迎合人们内心的某种需求,它的市场总会是好的。第三章设计要求具体的设计要求包括基本要求和提高要求贪食蛇游戏的基本要求是在turboc集成环境下用C语言进行编译。游戏规则: 1、蛇头不能咬蛇身--蛇头不能和蛇身发生碰撞,撞上就gameover,包括不能反方向运动 2、蛇头不能碰障碍--撞上就gameover,包括不能走出游戏区域 3、蛇吃了食物会增加长度,食物吃掉一个才会产生新的 4、蛇只有上下左右四个行走方向 提高要求是为了让界面看起来更大方和美观,并对吃下的豆子进行积分,当游戏结束时,界面出现“GAMEOVER”的提示第四章系统的组成系统的组成部分即程序模块结构: 1、初始化:场景、外边框和蛇(初始化蛇的长度,初始化蛇的行走方向)2、在场景中放置食物,吃完一个再出现下一个,吃一个食物蛇身增加一节,食物不能和障碍重合3、蛇的运动,一节跟一节4、行走中检测蛇头不能和障碍、蛇身碰撞,也不能超出游戏区域5、键盘的监听,控制蛇的运动,及改变游戏状态第五章概要设计一、程序初始化:1、全局变量的定义(初始化游戏的速度以及得分)2、蛇结构体的定义,食物结构体的定义3、图形界面的初始化(Init()函数)游戏围墙的绘制(Draw()函数)食物的出现(Gameplay()函数)此次编译方法采用的是结构体定义编程,除了此方法还可以运用双向链表的方法制作贪食蛇游戏,但是因为编程复杂且不容易理解,所以未采用。二、设计流程图在游戏程序中,主任务0主要完成一些初始化的工作,开机画面的显示。在任务2种一开始将屏幕清屏,然后绘制贪食蛇游戏的边界和计分状态,最后进入一个无限循环,在循环体中根据游戏者的按键进行相应的处理,详细流程图如下图所示:Reset键暂停键方向键图1:贪食蛇吃豆的任务流程图蛇的动态显示建立在任务2,主要是不停的更新蛇的位置,另外每更新一次还需要判断蛇是否碰到边界,是否碰到自己身子,是否吃到豆子等。其流程图如下图所示:否是否第六章详细设计一、对象模型设计1、寻找规律,建立对象模型:首先从物理的角度来分析蛇得运动规律。它是蠕动的,像水一样流动。他有个特性就是身体的每一个点都经过他头部所在的点,他每一个时刻骨节所要运动的目的地是他前一个骨节所在的位置。不难看出,其中的对象模型为蛇,骨骼,骨节,头抽象的接口为蛇,骨骼,骨节,头,图中豆子2、结构图:接口结构图骨骼骨骼对象结构图3、给接口添加行为:图元(GraphicObject)绘画:进行图元自身的绘画操作当前矩形:得到图元当前所在的矩形,也可考虑使用region,这样使得对图元范围得描述更加具体。骨节(Condyle)前一个骨节:提供前序访问后一个骨节:提供后序访问流动:进行骨节运动诡计得计算。骨骼(Cadre)(管理骨节链)得到头:得到蛇头得到尾:得到蛇尾新增骨节:在骨节链中新增骨骼删除骨节:在骨节链中删掉指定骨节头(head)方向:能够设定和访问当前运动方向。蛇(Snake)增长:蛇进行自身得增长4、完善模型,引入访问者模式存在的问题:当前是由具体的骨骼对象来负责图元的绘画以及处理流动的,而骨骼只是管理骨节,没有提供任何访问骨节的方法,我们应该怎样访问骨节呢?比如我们要每个骨节画出自己的形态,我们可能会这样做。在骨骼上提供一个绘画方法,然后通过遍历骨节链,调用每个骨节的绘画方法。这样似乎可以解决问题。那么,我们要进行骨节流动计算呢?我们再在骨骼上提供流动方法,然后同样的遍历骨节,调用每个的流动方法。我们要是加入统计骨节个数功能呢?我们要是加入其他的需要遍历骨骼的方法呢?……这样做的缺点是什么?相似的代码有多份如果骨节的访问结构发生变化,后果会怎样?有新功能需要遍历骨节链该怎么办?这样会迫使我们拷贝代码。解决办法,引入访问者模式:新增加接口如下:加入行为:访问者:(空,无方法,属性)被访问者:接受访问者骨节访问者:继承自访问者访问骨节5、完整的结构图:二、食物及蛇状态的初始化及食物的出现 (一)、程序初始化                ——————全局变量 全局变量:     是指在函数之外定义的变量,其作用范围是从定义位置开始到源文件结束为止,其间的函数     都可以使用 int a,b ;f1(intc){intd,e;…}inti;main(){intm,n;…} 全局变量a、b的作用范围,c的作用范围,d、e的作用范围  (二)、程序初始化             —————结构体的定义 蛇的结构体的定义:          每一节蛇坐标的表示蛇移动方向的表示蛇生命的表示蛇节数的表示食物结构体的定义:          食物的坐标的表示食物有无的表示 (三)、程序初始化          —————图形界面的初始化 intgd=DETECT,gm;initgraph(&gd,&gm,”c:\\Win-TC”);  (四)、游戏边框的绘制(Draw函数) 开始画面,左上角坐标为(50,40)右下角坐标为(610,460)的围墙 库函数rectangle(left,top,right,bottom); (50,40) (610,460) (60,50) (600,450) 9 (五)、Gameplay()函数:                  ———结构体变量的使用 需要出现新食物:food。yes=1;/*1表示需要出现、0表示已存在*/蛇的状态:snake。life=0;/*0表示活着、1表示死亡*/蛇默认(初始)运动方向:snake。direction=?;蛇的默认(初始)节数:snake。node=2;      蛇的默认(初始)坐标:  snake。x[0]=?;snake。y[0]=?;/*蛇头*/  snake。x[1]=90;snake。y[1]=100;/*蛇身*/ 注意结构体变量成员的引用格式:   <结构体变量>。<成员> (六)、Gameplay()函数:                     —————食物的出现 判断是否需要出现食物——判断food。yes的值   1:                 /*需要出现新食物*/      随机产生食物坐标,并使坐标能被十整除 /*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/        改变food。yes的状态: 0:             /*显示食物*/       画出食物 蛇的运动:先自由移动,用方向键控制蛇的方向。三、游戏运行中的设计思想:1、蛇自由移动:在没有任何按键的时候,蛇按照初始方向向前移动;2、方向键控制蛇的移动方向:用方向键控制蛇结构体里面的方向成员。同时如果不出现蛇死亡或者按ESC键,我们可以永远玩游戏。永远玩游戏这里将用到一个什么语句? 永循环while(1) while(bioskey(1)==0)表示无键盘输入 Gameplay()程序结构  while(1){   while(bioskey(1)==0)     {               蛇身、蛇头坐标的改变          画出蛇,并使蛇运动   }  /*endwhile(!bioskey(1))*/ 监听方向键及ESC键} /*endwhile*/ 判断是否需要出现食物,并进行相应的操作 食物及蛇状态的初始化 3、蛇的移动 移动的思想:(1)蛇身、蛇头坐标的改变    蛇身:将蛇的第二节在屏幕中的坐标移动到第一               节,第三节中的坐标节移动到第二节……      蛇头:随着方向键走。(2)蛇向前运动:    画出蛇,延时(gamespeed),并用用背景色去除    蛇的最后一节 4、蛇的坐标改变 for(i=snake。node-1;i>0;i--){    snake。x[i]=snake。x[i-1];    snake。y[i]=snake。y[i-1];} 5、方向键的表示    上       下         左        右    UP  DOWN  LEFT  RIGHT         1         2           3          46、如果蛇结构体的方向成员为     1:   snake。y[0]-=10;     2:    ……………     3:    ……………     4:    …………… 7、蛇向前运动 画蛇(for)delay(gamespeed);用背景色去除蛇的最后一结:(1)接受按键:key=bioskey(0);(2)按ESC键退出游戏(3)方向键改变蛇的结构体方向成员如果key==UP&&snake。direction!=2:       snake。direction=1;………依此………。。类推………………………… (二)、方向键控制蛇的移动四、设置游戏规则1、判断蛇是否撞击自己,如果撞击自己游戏就结束(调用gameover()函数,在程序外面定义gameover()函数,同时蛇的生命成员为1;2、判断蛇是否撞击墙壁,如果撞击墙边游戏就结束(调用gameover()函数),同时蛇的生命成员为1;3、判断蛇是否吃到食物,如果吃到食物,先把食物擦除,蛇长度加1,食物的判断变量food。yes=1,分数加10,输出分数(调用显示分数函数printscore(),在程序外面定义printscore()函数); 判断蛇是否撞击自己 for(i=3;i<snake。node;i++){           if(snake。x[i]==snake。x[0]&&snake。y[i]==snake。y[0])           {                GameOver();                snake。life=1;                break;           }} 判断蛇是否撞击墙壁 判断蛇头坐标是否撞击墙壁    若撞击,调用GameOver();    并将蛇的状态设置为1     判断蛇是否吃到食物 判断蛇头与食物坐标是否相同相同:   擦除食物   蛇的身体长一节   改变food。yes的状态   score增加10   输出新得分:PrScore();Gameover()函数 使用到的库函数:cleardevice()          /*图形模式下清除屏幕上的内容*/settextstyle();        /*设置图形模式下字符显示的字体、方向和大小*/outtextxy();        /*图形模式下在x,y坐标位置显示一行字符串*/ Printscore()函数 用到的库函数:  setfillstyle(pattern,color);                /*设置填充模式和填充颜色*/  bar(left,top,right,bottom);               /*画矩形,并填充矩形内部区域*/用于分数的底色*/  setcolor(6);          /*用于分数的底色*/  settextstyle(0,0,2);  sprintf(str,“score:%d”,score);            /*把要输出的字符转移给字符数组str(str要先定义)*/  outtextxy(55,20,str);  /*输出分数*/ Gameplay() {  食物及蛇状态的初始化    Printscore()  while(1)  {      while(bioskey(1)==0)     {           判断是否需要出现食物        蛇身、蛇头坐标的改变           判断蛇是否撞击自己           判断蛇是否撞击墙壁           if(snake。life==1)break;           判断蛇是否吃到食物               画出蛇,并使蛇运动      }/*endwhile(!bioskey(1))*/    监听方向键及ESC键 } /*endwhile(1)*/}第七章调试及测试结果与分析调试(debugging)是指去掉程序中的错误(通常被称为bugs)的过程。一个错误可能非常简单,例如拼错一个单词或者漏掉一个分号;也可能比较复杂,例如使用一个指向并不存在的地址的指针。无论错误的复杂程度如何,掌握正确的调试方法都能使程序员受益匪浅。  运行贪食蛇程序时会有多种原因使它不能运行,这些原因可以分为以下4种基本类型:   (1)程序中有死循环;   (2)程序运行的时间比所期望的长;   (3)程序在等待某些输入信息,并且直到输入正确后才会继续运行;   (4)程序设计的目的就是为了延迟一段时间,或者暂停执行。   在讨论了因未知原因而挂起的程序的调试技巧后,将逐个分析上述的每种情况。   调试那些因未知原因而不能运行的程序是非常困难的。可能花费了很长的时间编写一个程序,并努力确保每条代码都准确无误,也可能只是在一个原来运行良好的程序上作了一个很小的修改,然而,当运行程序时屏幕上却什么也没有显示。有时能得到一个错误的结果,或者部分结果,面对长长的源代码,刚刚开始根本不知道错在哪里。   在开始调试贪食蛇程序时,首先检查一下程序结构,然后再按执行顺序依次查看程序的各个部分,看看它们是否能正确运行。   在此次设计中,主程序包含的3个函数调用——int()、draw()和gameplay(),在调试时,先检查函数int()是否把控制权返回给了主程序。为此,在调用函数int()的语句后面加上exit()命令,也可以用注释符把对函数draw()和gameplay()的调用括起来,然后重新编译并运行这个程序。   注意:通过调试程序(debugger)也可以做到这一点,然而上述方法是一种很传统的调试方法。调试程序是一个程序,它的作用是让程序员能够观察程序的运行情况、程序的当前运行行号、变量的值,等等。   此时将看到函数int()是否将控制权返回给了主程序——如果该程序运行并退出,可以判断是程序的其它部分使程序挂起。可以用这种方法测试程序的每一部分,直到发现使程序挂起的那一部分,然后集中精力修改相应的函数。   有时,情况会更复杂一些。例如,使程序挂起的函数本身是完全正常的,问题可能出在该函数从别的地方得到了一些错误的数据。这时,你就要检查该函数所接受的所有的值,并找出是哪些值导致了错误操作。   此次设计运行程序出现过死循环的现象,机器将无数次地执行同一段代码。这是因为程序进行循环的判断条件永远为真,或者使程序退出循环的判断条件永远为假。修改判断条件后即正确运行。在调试游戏速度的时候,曾经一运行程序画面就直接跳至“gameover”,经过带入法测试,发现是运行速度的数值给的过小,加大数值后逐运行正常。技巧:监视函数是调试程序的出色功能之一。还有就是带入法,用于判断某部分函数逻辑的对错。第八章结论在刚刚拿到课程设计题目的时候,原本以为贪食蛇这么一款已经深入人心的老游戏会比较容易做,但真正开始做的时候才发现不是那么简单。在编码的时候遇到了不少困难,其中有粗心导致的输入错误,也有程序逻辑上出现的错误。自己的知识不足,也给编程带来了不小阻碍。但是,当端正了态度以后,通过认真细致的分析、学习,在最后顺利的完成了课程设计。在本次课程设计中,我从指导老师身上学到了很多东西。老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导。另外,在游戏开发过程中廖远老师也给于我很大的帮助,帮助解决了不少的难点,还帮我提出了不少好的建议,使得游戏能及时开发完成,还有所有的同学同样给与我不少帮助,这里一并表示感。参考文献[1]黄明等。21世纪进阶辅导C语言程序设计[M]。大连理工大学出版社,2005[2]马靖善等。C语言程序设计[M]。清华大学出版社,2005[3]谭浩强。C语言程序设计(第二版)[M]。北京:高等教育出版社,200附录源程序代码及注释:#defineN200#include<graphics。h>#include<stdlib。h>#include<dos。h>#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011binti,key;intscore=0;/*得分*/intgamespeed=50000;/*游戏速度自己调整*/structFood{intx;/*食物的横坐标*/inty;/*食物的纵坐标*/intyes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/structSnake{intx[N];inty[N];intnode;/*蛇的节数*/intdirection;/*蛇移动方向*/intlife;/*蛇的生命,0活着,1死亡*/}snake;voidInit(void);/*图形驱动*/voidClose(void);/*图形结束*/voidDrawK(void);/*开始画面*/voidGameOver(void);/*结束游戏*/voidGamePlay(void);/*玩游戏具体过程*/voidPrScore(void);/*输出成绩*//*主函数*/voidmain(void){Init();/*图形驱动*/DrawK();/*开始画面*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/}/*图形驱动*/voidInit(void){intgd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc");cleardevice();}/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/voidDrawK(void){/*setbkcolor(LIGHTGREEN);*/setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/for(i=50;i<=600;i+=10)/*画围墙*/{rectangle(i,40,i+10,49);/*上边*/rectangle(i,451,i+10,460);/*下边*/}for(i=40;i<=450;i+=10){rectangle(50,i,59,i+10);/*左边*/rectangle(601,i,610,i+10);/*右边*/}}/*玩游戏具体过程*/voidGamePlay(void){randomize();/*随机数发生器*/food。yes=1;/*1表示需要出现新食物,0表示已经存在食物*/snake。life=0;/*活着*/snake。direction=1;/*方向往右*/snake。x[0]=100;snake。y[0]=100;/*蛇头*/snake。x[1]=110;snake。y[1]=100;snake。node=2;/*节数*/PrScore();/*输出得分*/while(1)/*可以重复玩游戏,压ESC键结束*/{while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/{if(food。yes==1)/*需要出现新食物*/{food。x=rand()%400+60;food。y=rand()%350+60;while(food。x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/food。x++;while(food。y%10!=0)food。y++;food。yes=0;/*画面上有食物了*/}if(food。yes==0)/*画面上有食物了就要显示*/{setcolor(GREEN);rectangle(food。x,food。y,food。x+10,food。y-10);}for(i=snake。node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/{snake。x[i]=snake。x[i-1];snake。y[i]=snake。y[i-1];}/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/switch(snake。direction){case1:snake。x[0]+=10;break;case2:snake。x[0]-=10;break;case3:snake。y[0]-=10;break;case4:snake。y[0]+=10;break;}for(i=3;i<snake。node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/{if(snake。x[i]==snake。x[0]&&snake。y[i]==snake。y[0]){GameOver();/*显示失败*/snake。life=1;break;}}if(snake。x[0]<55||snake。x[0]>595||snake。y[0]<55||snake。y[0]>455)/*蛇是否撞到墙壁*/{GameOver();/*本次游戏结束*/snake。life=1;/*蛇死*/}if(snake。life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/break;if(snake。x[0]==food。x&&snake。y[0]==food。y)/*吃到食物以后*/{setcolor(0);/*把画面上的食物东西去掉*/rectangle(food。x,food。y,food。x+10,food。y-10);snake。x[snake。node]=-20;snake。y[snake。node]=-20;/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/snake。node++;/*蛇的身体长一节*/food。yes=1;/*画面上需要出现新的食物*/score+=10;PrScore();/*输出新得分*/}setcolor(4);/*画出蛇*/for(i=0;i<snake。node;i++)rectangle(snake。x[i],snake。y[i],snake。x[i]+10,snake。y[i]-10);delay(gamespeed);setcolor(0);/*用黑色去除蛇的的最后一节*/rectangle(snake。x[snake。node-1],snake。y[snake。node-1],snake。x[snake。node-1]+10,snake。y[snake。node-1]-10);}/*endwhile(!kbhit)*/if(snake。life==1)/*如果蛇死就跳出循环*/break;key=bioskey(0);/*接收按键*/if(key==ESC)/*按ESC键退出*/break;elseif(key==UP&&snake。direction!=4)/*判断是否往相反的方向移动*/snake。direction=3;elseif(key==RIGHT&&snake。direction!=2)snake。direction=1;elseif(key==LEFT&&snake。direction!=1)snake。direction=2;elseif(key==DOWN&&snake。direction!=3)snake。direction=4;}/*endwhile(1)*/}/*游戏结束*/voidGameOver(void){cleardevice();PrScore();setcolor(RED);settextstyle(0,0,4);outtextxy(200,200,"GAMEOVER");getch();}/*输出成绩*/voidPrScore(void){charstr[10];setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,"score:%d",score);outtextxy(55,20,str);}/*图形结束*/voidClose(void){getch();closegraph();}绘制游蛇的边界图案显示游戏界面右边的静态图片和计分清零初始化蛇的位置以及蛇的游动方向等待键盘扫描任务发来的消息判断按键的值重新创建任务2,重新开始游戏改变蛇游动的方向把任务2挂起,使游戏暂停延时游戏结束否?更新蛇的位置,将蛇头原来坐标赋给蛇身,蛇身原来坐标赋给蛇尾。是否碰到边界或自己身体游戏结束是否吃到豆子增加蛇身的长度更新豆子蛇身各坐标赋值延时骨骼骨节蛇豆子头骨骼骨节蛇豆子头骨节头骨骼蛇访问者被访问者骨节访问者骨骼骨节蛇图元头骨节头骨骼蛇被访问者jSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0z)v&s#lTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*YmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkThPeMaJ7G4C1z
本文档为【软件工程实践报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
虞美人
暂无简介~
格式:doc
大小:109KB
软件:Word
页数:0
分类:企业经营
上传时间:2019-11-24
浏览量:4