C课程设计报告—贪吃蛇

上传人:奇异 文档编号:64434769 上传时间:2022-03-21 格式:DOCX 页数:51 大小:185.18KB
收藏 版权申诉 举报 下载
C课程设计报告—贪吃蛇_第1页
第1页 / 共51页
C课程设计报告—贪吃蛇_第2页
第2页 / 共51页
C课程设计报告—贪吃蛇_第3页
第3页 / 共51页
资源描述:

《C课程设计报告—贪吃蛇》由会员分享,可在线阅读,更多相关《C课程设计报告—贪吃蛇(51页珍藏版)》请在装配图网上搜索。

1、程序设计基础课程设计贪吃蛇院系:计算机学院网络工程系班级:12-2班姓名:林扬博指导教师:鲁静轩2012年12月25日程序设计基础课程设计任务书一、题目:贪吃蛇二、设计要求(1)XXX负责设计与实现。(2)查阅相关资料,自学具体课题中涉及到的新知识。(3)采用结构化、模块化程序设计方法,功能要完善,具有一定的创新。(4)所设计的程序应有输入、输出。(5)按要求写出课程设计报告,并于设计结束后1周内提交。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、谢启、附录:带中文注释的程序清单、参考文献。报告一律用A4纸打印,中文字体为宋体,

2、西文字体用TimeNewRoma一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。总体设计应配合软件总体模块结构图来说明软件应具有的功能。详细设计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。四、课程设计工作计划2012年12月17日,指导教师讲课,学生根据题目准备资料;2012年12月18日,设计小组进行总体方案设计和任务分工;2012年12月19日2010年12月21日,每人完成自己承担的程序模块并通过独立编译;2012年

3、12月22日2010年12月26日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2012年12月27日,软件发布2012年12月28日,验收、撰写报告;2013年1月5日,交课程设计报告指导教师签章:教研室主任签章程序设计基础课程设计指导教师评语与成绩指导教师评语:课程设计表现成绩:课程设计验收成绩:课程设计报告成绩:课程设计总成绩:指导教师签章2012年12月31日概述(宋体,三号,加粗,居中)2 总体方案设计63 详细设计84 程序的调试与运行结果说明155 课程设计总结186 后记18参考文献197 附录20概述1. 课程设计的目的学生更深入地理解和掌握该课程中的基本概念

4、,程序设计的思想、技术和方法。培养学生综合运用所学知识独立完成课题以及撰写课程设计报告的能力。培养学生勇于探索、严谨推理、实事求是、有过必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。提高学生对工作认真负责、一丝不苟,对同学团结友爱、协作攻关的基本素质。培养学生从资料文献、科学实验中获得新知识的能力,提高学生从别人的经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。对学生掌握知识的深度,运用理论去处理问题的能力、实践动手的能力,课程设计的能力、书面及口头表达能力进行综合考核。2. 课程设计的要求学生自由组成课程设计软件开发小组(及开发团队),可由指导教师确定每组的

5、人数,建议每组三人左右,并选举一人为组长。指导教师可根据各个小组的实际情况进行必要的调整。该软件系统运行时应先播放同步的动画音乐,播放完后,通过选择进入游戏。进一步掌握C语言集成开发环境。熟练掌握C语言的数据类型、几种基本结构、数组、指针、结构体、模块化设计等知识点。从书中或互联网上查阅相关资料,自学具体课题中涉及到新的知识。采用结构化、模块化程序设计方法进行设计,功能要完善,界面要美观,应具有一定的创新。要求开发小组的每个成员都应独立设计若干个模块,每个人设计的有效资源程序代码应在200行以上。同时要读懂其他组员完成的任务。3. 课程设计的主要设计思想这个程序的关键点是表示蛇的图形以及蛇的移

6、动。用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时,由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来蛇会多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现和消失也是画矩形块和覆盖矩形块。为了便于理解,定义了两个结构体:食物和蛇。二总体方案设计整体框图模块

7、划分主控模块图 形 驱 动画 主 界 面游戏过程结束处理排行榜主控模块主控模块由main函数实现,主要用来依次调用各个下层模块,从而控制完成整个程序的功能。动画音乐函数该模块用来同步播放下雪的动画和简单的音乐,并在屏幕的中间输出颜色不断变换的欢迎词语。画主界面函数画主界面模块由函数Drawk实现,他画出了一个封闭的围墙。在单人模式下,用两个循环语句在水平方向和垂直方向上输出连续的宽度和高度均为10单位(像素)的浅青色矩形方块,围成密闭图形表示围墙。在双人模式下,在单人模式下画的围墙的基础上再加一条垂直方向上的围墙就可以。函数setlinstyle设置线型宽度为1像素。这样避免了蛇贴墙走的时候,

8、会檫掉一部分影响界面美观这种情况。游戏过程模块该模块是整个程序的核心模块,他完成整个游戏过程,在我们组做的这个贪吃蛇游戏中,有两个这个模块,分别由Gameplay1和Gameplay2来实现,每次蛇移动的时候,从最后一节开始到第二节,将前一节的坐标赋给后一节的坐标,移动后把最后一节用背景色覆盖,然后蛇头位置按方向键更改位置,要确保食物出现在10的倍数位置上,判断蛇是否吃到食物的是蛇头坐标和食物坐标是否相同。我们设计的这个贪吃蛇游戏中还有另一个特色,那就是在游戏运行的时候会出现随机障碍,这些障碍是蛇在吃了三个食物之后,会出现一个位置不定的红色的随机障碍,而且它存在一会就会消失,蛇在吃够三个食物后

9、又会出现,就这样一直循环知道蛇死了为止。游戏结束处理模块当游戏结束时,则调用Endplay函数进行游戏结束处理,在该模块中将依次调用读取记录、成绩排序、写入文件、排行榜等模块,实现有关处理。由于我们的贪吃蛇有双人模式还有单人模式,所以我们有两套读取记录、成绩排序、写入文件、排行榜等模块。读取记录模块该模块由ReadFiles1和ReadFiles2函数来实现。即用用来读取排行榜1和排行榜2的信息记录。如果是首次读取文件,将调用InitScoreFiles函数,将初始记录文件,两个排行榜都设置五名选手,初始姓名都为“nobody”,初始分数都是0.成绩排序模块该模块由CompareScorel和

10、CompareScore2函数来实现。当游戏者1和游戏者2的成绩比排行榜1和排行榜2中第五名的成绩高时,即调用该模块将成绩加入排行榜中排序,将原来的第五名删除。写入文件模块该模块由WriterFiles1和WriterFiles2来实现,将两个新的排行榜信息写入文件。排行榜模块该模块由pain_board1和pain_board2来实现。主要功能是建立两个排行榜界面,输出五个最高分玩家姓名和成绩。退出显示排行榜后,返回主界面选择exit按一下空格键就可以退出游戏了。三详细设计流程图:/*下雪的动画并同时播放音乐函数*/voidDrawSnow()inti;intsx62;setlinestyl

11、e(SOLID_LINE,0,THICK_WIDTH);line(1,1,9,9);/*一次3行画出白色雪花的3条线*/line(0,5,10,5);line(9,1,1,9);save=malloc(200);/*在堆中申请200字节空间*/getimage(0,0,10,10,save);/*将雪花位图保存到save中*/cleardevice(); /* randomize(); /* for(i=0;i62;i+) sxi=(i+2)*10; /*清屏*/设置随机数的种子数*/计算雪花位置的横坐标数组*/*以下的键控制while循环控制播放音乐和下雪动画*/while(!kbhit()

12、/*如果未按键,执行循环体*/Pr();/*调用Pr函数输出欢迎词并播放声音*/if(snownum!=100)snowsnownum.speed=2+random(5);i=random(62);snowsnownum.x=sxi;/*取横坐标*/snowsnownum.y=10-random(100);/*计算纵坐标*/*循环放置snownum雪花*/for(i=0;isnownum;i+)putimage(snowi.x,snowi.y,save,COPY_PUT);delay(100);/*延迟100ms以便看到雪花*/cleardevice();/*清屏*/Pr();/*调用Pr函数

13、输出欢迎词并播放声音*/if(snownum!=100)snownum+;setfillstyle(SOLID_FILL,15);for(i=0;i500)snowi.y=10-random(200);change+;if(change=140)change=10;nosound();/*关闭扬声器*/cleardevice();/*清屏*/*输出欢迎词并播放音乐*/voidPr()ints15=0,100,150,200,250,150,250,300,250,150,100,250,350;setcolor(change/10);/*改变欢迎词颜色*/settextstyle(0,0,4)

14、;outtextxy(20,200,WELCOMETOOURGAME!);/*输出欢迎词*/drawmat(tan64S,64,200,100,YELLOW);drawmat(chi64S,64,300,100,RED);drawmat(she64S,64,400,100,GREEN);drawmat(zu24S,24,30,330,YELLOW);drawmat(zhang24S,24,60,330,GREEN);drawmat(lin48K,48,180,315,CYAN);drawmat(yang48K,48,240,315,BROWN);drawmat(bo48K,48,300,315

15、,RED);drawmat(zu24S,24,30,410,YELLOW);drawmat(yuan24S,24,60,410,GREEN);drawmat(guo48K,48,100,400,CYAN);drawmat(zhi48K,48,160,400,BROWN);drawmat(jia48K,48,220,400,RED);drawmat(wang48K,48,300,400,CYAN);drawmat(chun48K,48,360,400,BROWN);drawmat(xu48K,48,420,400,RED);drawmat(mou48K,48,500,400,CYAN);draw

16、mat(ting48K,48,550,400,BROWN);drawmat(ting48K,48,600,400,YELLOW);使扬声器以 schang/10sound(schange/10);/*的频率发声*/*图形驱动,图形系统初始化函数*/voidInit(void)intgd=DETECT,gm;registerbgidriver(EGAVGA_driver);initgraph(&gd,&gm,c:programfileswinyestc20hbgi);cleardevice();/*下雪动画并同步播放音乐函数*/voidBackground(inti)setlinestyle(S

17、OLID_LINE,0,THICK_WIDTH);line(1,1,9,9);/*/line(0,5,10,5);line(9,1,1,9);save=malloc(200);/*getimage(0,0,10,10,save);/*cleardevice();/*settextstyle(0,0,0);outtextxy(300,150,Newgame);outtextxy(300,200,pain broad); outtextxy(300,250,exit);一次 3 行画出白色雪花的 3 条线在堆中申请200字节空间 */将雪花位图保存到 save 中 */清屏 */if(i=1)设置

18、随机数的种子数*/表示需要出现新食物, 0 表示已经存在蛇活着 */方向往右 */蛇头坐标初值*/蛇尾坐标初值*/蛇节数初值*/*玩游戏“死”循环,按ESC键在没有按键的情况下, 蛇自己*/食物出现后必须让食物能够在整画面上有食物了 */画面上有食物就要显示*/putimage(250,150,save,COPY_PUT);elseif(i=2)putimage(250,200,save,COPY_PUT);elseputimage(250,250,save,COPY_PUT);/*玩游戏具体过程*/voidGamePlay()randomize();/*=1;=1;/*1食物*/=0;/*=

19、1;/*0=100;0=100;/*1=110;1=100;/*=2;/*PrScore();或蛇死时结束*/while(1)while(!kbhit()/*移动身体*/if=1)/*=rand()%400+60;=rand()%350+60;/*格内,这样才可以让蛇吃到*/while%10!=0)+;while%10!=0)+;=0;/*if=0)/*setcolor(RED);rectangle,+30,;if=1)/*=rand()%400+60;=rand()%350+60;/*格内,这样才可以让蛇吃到 */while%10!=0)+;while%10!=0)+;=0;/*if=0)/

20、*setcolor(GREEN);rectangle,+10,;for(i=;i0;i-)i=i-1;i=i-1;/*1,2,3,4*/食物出现后必须让食物能够在整画面上有食物了 */画面上有食物就要显示*/表示右,左,上,下四个方向,通过这个判断移动蛇头*/switchcase1:0+=10;break;case 2: 0-=10;break;case 3: 0-=10;break;case 4: 0+=10;break;/*从蛇的第四节开始判断是否撞到自己了,因为第3节可能拐不过来*/for(i=3;i;i+)ifi=0&i=0)GameOver0();=1;/*置蛇死标志*/break;

21、/*判断蛇是否撞到墙壁*/if0595|0455)GameOver0();=1;/*置蛇死标志*/if0190&0100&0130)GameOver0();=1;if0=&0=GameOver0();=1;if0=+10&0=GameOver0();=1;if0=+20&0=GameOver0();=1;*/if=1)/*break;if0=&0=setcolor(0);rectangle,+10,;=-20;=-20;+;/*蛇的身体长一节*/=1;/*画面需要出现新的食物*/=1;setcolor(0);rectangle,+30,;score+=10;/*没吃一个食物增加10分*/PrS

22、core();setcolor(5);rectangle0,0,0+10, 0-10);setcolor(4);/*for(i=1;i;i+)rectanglei,i,i+10, i-10);delay(gamespeed); /*行速度 */setcolor(0); /* rectangle, +10,-10);/*endwhileif=1) break;/*key=bioskey(0);/*if(key=ESC)/*break; elseif(key=UP1&!=4)画出红色蛇的循环体*/用延迟gamespeecHE秒,以控制蛇的爬用背景色黑色去除蛇的最后一节*/(! kbhit ) */

23、如果蛇死就跳出循环*/接收按键 */如果按ESC1就退出*/=3;/*判断是否往相反的方向移动*/elseif(key=RIGHT1&!=2)=1;elseif(key=LEFT1&!=1)=2;elseif(key=DOWN1&!=3)=4;/*endwhile(1)*/*游戏结束*/四程序的调试与运行结果说明(1) 游戏开始时的画面(2) 开始游戏时的画面(3)一下情况蛇死亡(蛇撞到墙或障碍)单人模式双人模式五课程设计总结我们按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功,修改成功

24、后,我们开始进行程序改进,在开始画面上加上我们组员的名字,把一条蛇改成了两条蛇,同时运行游戏,后来又在这个基础上给游戏加上了固定障碍和随机障碍,是我们的游戏更加有挑战性,更加完美。在设计这个程序中我主要学会了如何运用以下有关C语言的知识(1)函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增加了程序的可读性。(2)分析函数先从main()函数入手。Main()函数是C源程序编译时的开始,从main()函数开始读函数可将其他函数的功能理解得更透彻。( 3) 在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析

25、出来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。( 4) 我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行处理的函数,起功能我都有所了解。同时我也获得了许多宝贵的经验:1) 在设计程序之前,务必要对你所设计的题目和内容有一个系统的了解,知道所设计的题目和内容包含那些资源。2) 设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路和一个完整的软件流程图,因而,要先把设计原理与思路搞清楚,再把流程图画出来,这样设计起来就简单多了。3) 在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”是程序设计的必经之路,发现错误也是取得成绩的一

26、种。4) 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。六后记设计心得体会:经过短短两星期的课程设计,让我对C程序有了一个更深的了解,以前总认为C语言很枯燥,认为那些我们所设计的程序没有什么用处,但现在通过设计贪吃蛇游戏这个程序使我懂得了如何将所学的知识运用于生活当中。虽然在刚开始设计程序时不太明白如何去设计这程序,但当我看完C语言课程设计并用C语言做出这个贪吃蛇程序后,让我深深感受到C程序的神奇。通过贪吃蛇游戏的编程练习思考数据结构的使用,比如定义食物的坐标来控制它出现的位置,用函数rectangle来画出矩形

27、,用life变量的值表示蛇的生命,用direction变量的值表示蛇移动的方向等,还有用数组来存放蛇身各节的坐标,这些都让我们熟悉了对数组的操作,此外还熟悉了各种函数的应用。对于初学者来说,学习编写贪吃蛇的游戏对掌握C语言的知识有很大的帮助。通过编程实践,还能拓展思路,让我们去寻找需要调用那些函数,怎样提高程序的质量等。要写出好的程序,需要我们有扎实的基础,这样遇到一些基本算法的时候就会游刃有余了。在编译时我们要有丰富的想象力,不要拘泥于固定的思维方式,遇到问题时要多想几种解决问题的方案。丰富的想象力是建立在丰富的知识的基础上,所以我们要通过多个途径来帮助自己建立较丰富的知识结构。在编译时我们

28、遇到了很多困难,这就需要我们多与别人交流。在编译的过程中,我们也发现有良好的编译风格是十分重要的,至少在时间效率上就体现了这一点。养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致,这些都是提高我们编程能力的要点。还有在编程中最能体现简单的原则,简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。在进行课程设计的过程中我们也学到了许多别的东西。首先,我们学会了合作,要以别人的眼光看看问题,也许这样得到的会比各自得到的都要多;其次,我们学会了分工,分工是为了更好的合作,分工才能提高合作的效率;最后,我们学会了奋

29、斗,我们相信,通过四年的学习,我们一定能写出更精彩的程序,将来会描绘出更精彩的人生。参考文献1谭浩强,C程序设计题解与上机指导(第二版),北京,清华大学出版社,2000年9月。2徐金梧,杨德斌等,TURBO仅用大全,机械工程出版社,。3 李丽娟,C语言程序设计教程,人民邮电出版社。4 林华聪,C语言程序设计思想与实践,冶金工业出版社。5 张继温,C语言程序设计教程,高等教育出版社。6 孙家广等,计算机图形学(第三版),清华大学出版社,2004。7 陈元琰编着,计算机图形学实用技术,北京,科学出版社,2000。8 和青芳着,计算机图形学原理及算法教程,北京,清华大学出版社。9 陆润民,C语言绘图

30、教程,北京,清华大学出版社,1996。10郭翠英,C语言课程设计案例精编,中国水利水电出版社,七附录源程序:#include#include#include#include#include#include#include#include#defineN200#defineLEFT0x1e61#defineRIGHT0x2064#defineDOWN0x1f73#defineUP0x1177#defineLEFT10x4b00#defineRIGHT10x4d00#defineDOWN10x5000#defineUP10x4800#defineESC0x011b#definespace0x392

31、0#defineclosegrclosegraph#defineFILENAME1c:*/#defineFILENAME2c:/*定义一个文件名称,用来储存第二个排行榜的分数情况!#defineFILENAMEc:voidInitScoreFiles();voiddrawmat(char*mat,intmatsize,intx,inty,intcolor)/*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/inti,j,k,n;n=(matsize-1)/8+1;for(j=0;jmatsize;j+)for(i=0;in;i+)for(k=0;kk)/*测试为1的位则显示*/putpi

32、xel(x+i*8+k,y+j,color);/*单人游戏*/structperson/*得分结构体*/charname20;intscore;per5;intscore=0;/*记录游戏分数*/intsize;intscore;inti,key;intgamespeed=100000;/*游戏速度*/structSnow/*intx;inty;intspeed;snow100;intsnownum=0;intsize;intchange=10;void*save;structZhangintx;/*inty;/*intyes;/*zhang;structFood0intx;/*inty;/*

33、intyes;/*food0;structSnake0intxN;intyN;intnode;/*intdirection;/*intlife;/*snake0;voidInit(void);/*雪花结构体*/障碍的横坐标*/障碍的纵坐标*/判断是否要出现障碍的变量食物的横坐标*/食物的纵坐标*/判断是否要出现食物的变量蛇的节数*/蛇移动方向*/蛇的生命,0活着,1*/*/*/死亡*/voidClose(void);/*voidDrawK0(void);/*voidGameOver0(void);/*voidGamePlay(void);/*voidPrScore(void);/*/*输出欢迎

34、词并播放音乐图形结束*/开始画面*/结束游戏*/玩游戏具体过程*/输出成绩*/*/voidPr();voidpain_borad();/*绘制排行榜函数*/*下雪的动画并同时播放音乐函数*/voidDrawSnow()inti;intsx62;setlinestyle(SOLID_LINE,0,THICK_WIDTH);line(1,1,9,9);/*一次3行画出白色雪花的3条线*/line(0,5,10,5);line(9,1,1,9);save=malloc(200);/*在堆中申请200字节空间*/getimage(0,0,10,10,save); /*将雪花位图保存到 save 中 *

35、/cleardevice(); /*randomize(); /*清屏 */设置随机数的种子数 */计算雪花位置的横坐标数组 */for(i=0;i62;i+)sxi=(i+2)*10;/*/* 以下的键控制while(!kbhit() /*while循环控制播放音乐和下雪动画*/如果未按键,执行循环体*/drawmat(yi64S,64,100,100,BROWN);drawmat(ren64S,64,200,100,CYAN);Pr();/*调用Pr函数输出欢迎词并播放声音*/if(snownum!=100)snowsnownum.speed=2+random(5);i=random(62

36、);snowsnownum.x=sxi;/*取横坐标*/snowsnownum.y=10-random(100);/*计算纵坐标*/*循环放置snownum个雪花*/for(i=0;isnownum;i+)putimage(snowi.x,snowi.y,save,COPY_PUT);delay(100);/*延迟100ms以便看到雪花*/cleardevice();/*清屏*/Pr();/*调用Pr函数输出欢迎词并播放声音*/if(snownum!=100)snownum+;循环画出snownum个雪花*/setfillstyle(SOLID_FILL,15);for(i=0;i500)sn

37、owi.y=10-random(200);change+;if(change=140)change=10;nosound();/*关闭扬声器*/cleardevice();/*清屏*/voidDrawSnow2()inti;intsx62;setlinestyle(SOLID_LINE,0,THICK_WIDTH);line(1,1,9,9);/*一次3行画出白色雪花的3条线*/line(0,5,10,5);line(9,1,1,9);save=malloc(200);/*在堆中申请200字节空间*/getimage(0,0,10,10,save);/*将雪花位图保存到save中*/clear

38、device();/*randomize();/*for(i=0;i62;i+)sxi=(i+2)*10;/*/*以下的键控制while(!kbhit()/*while清屏*/设置随机数的种子数*/计算雪花位置的横坐标数组*/循环控制播放音乐和下雪动画如果未按键,执行循环体*/*/drawmat(er64S,64,100,100,BROWN);drawmat(ren64S,64,200,100,CYAN);Pr();/*调用Pr函数输出欢迎词并播放声音*/if(snownum!=100)snowsnownum.speed=2+random(5);i=random(62);snowsnownum

39、.x=sxi;/*取横坐标*/snowsnownum.y=10-random(100);/*计算纵坐标*/*循环放置snownum个雪花*/for(i=0;isnownum;i+)putimage(snowi.x,snowi.y,save,COPY_PUT);delay(100);/*延迟100ms以便看到雪花*/cleardevice();/*清屏*/Pr();/*调用Pr函数输出欢迎词并播放声音*/if(snownum!=100)snownum+;setfillstyle(SOLID_FILL,15);for(i=0;i500)snowi.y=10-random(200);change+;

40、if(change=140)change=10;nosound();/*关闭扬声器*/cleardevice();/*清屏*/voidPr()/*输出欢迎词并播放音乐*/ints15=0,100,150,200,250,150,250,300,250,150,100,250,350;setcolor(change/10);/*改变欢迎词颜色*/settextstyle(0,0,4);outtextxy(90,200,AREYOUREADY!);/*输出欢迎词*/drawmat(tan64S,64,300,100,YELLOW);drawmat(chi64S,64,400,100,RED);dr

41、awmat(she64S,64,500,100,GREEN);drawmat(zu24S,24,30,330,YELLOW);drawmat(zhang24S,24,60,330,GREEN);drawmat(lin48K,48,180,315,CYAN);drawmat(yang48K,48,240,315,BROWN);drawmat(bo48K,48,300,315,RED);drawmat(zu24S,24,30,410,YELLOW);drawmat(yuan24S,24,60,410,GREEN);drawmat(guo48K,48,100,400,CYAN);drawmat(zh

42、i48K,48,160,400,BROWN);drawmat(jia48K,48,220,400,RED);drawmat(wang48K,48,300,400,CYAN);drawmat(chun48K,48,360,400,BROWN);drawmat(xu48K,48,420,400,RED);drawmat(mou48K,48,500,400,CYAN);drawmat(ting48K,48,550,400,BROWN);drawmat(ting48K,48,600,400,YELLOW);sound(schange/10);/*使扬声器以schang/10的频率发声*/*图形驱动,图

43、形系统初始化函数*/voidInit(void)intgd=DETECT,gm;registerbgidriver(EGAVGA_driver);initgraph(&gd,&gm,c:programfileswinyestc20hbgi);cleardevice();/*游戏开始画面,左上角坐标为(50,40),右下角坐标为(60,460)的围墙*/voidDrawK0(void)cleardevice();setcolor(12);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/setfillstyle(1,9);bar(40,30,620,4

44、8);bar(40,452,620,470);bar(40,30,58,470);bar(602,30,620,470);for(i=203;i=297;i+=13)rectangle(i,103,i+13,116);for(i=40;i=600;i+=20)/*循环画围墙*/rectangle(i,30,i+20,48);/*上边*/rectangle(i,452,i+20,470);/*下边*/for(i=30;i0;i-)i=i-1;i=i-1;/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/switchcase1:0+=10;break;case 2: 0-=1

45、0;break;case 3: 0-=10;break;case 4: 0+=10;break;/*从蛇的第四节开始判断是否撞到自己了,因为第3节可能拐不过来*/for(i=3;i;i+)ifi=0&i=0)GameOver0();=1;/*置蛇死标志*/break;/*判断蛇是否撞到墙壁*/if0595|0455)GameOver0();=1;/*置蛇死标志*/if0190&0100&0130)GameOver0();=1;if0=&0=GameOver0();=1;if0=+10&0=GameOver0();=1;if0=+20&0=GameOver0();=1;if=1)/*以上判断后,

46、如果蛇死就跳出内循环*/break;if0=&0=setcolor(0);rectangle,+10,;=-20;=-20;+;/*蛇的身体长一节*/=1;/*画面需要出现新的食物*/=1;setcolor(0);rectangle,+30,;score+=10;/*PrScore();setcolor(5);rectangle0,0,0+10,0-10);setcolor(4);/*for(i=1;i;i+)rectanglei,i,i+10,i-10);delay(gamespeed);/*setcolor(0);/*rectangle,+10,-10);/*endwhileif=1)br

47、eak;/*key=bioskey(0);/*if(key=ESC)/*break;elseif(key=UP1&!=4)没吃一个食物增加10分*/画出红色蛇的循环体*/用延迟gamespeed毫秒,以控制蛇的爬行速度用背景色黑色去除蛇的最后一节*/(!kbhit)*/如果蛇死就跳出循环*/接收按键*/如果按ESC键就退出*/*/=3;/*判断是否往相反的方向移动*/elseif(key=RIGHT1&!=2)=1;elseif(key=LEFT1&!=1)=2;elseif(key=DOWN1&!=3)=4;/*endwhile(1)*/*游戏结束*/voidGameOver0(void)/

48、*游戏结束*/cleardevice();PrScore();setcolor(RED);settextstyle(0,0,4);outtextxy(200,200,GAMEOVER);getch();voidPrScore(void)/*输出成绩*/charstr10;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

49、();voidReadFiles1()FILE*fpread;if(fpread=fopen(FILENAME,ab+)=NULL)printf(cantopenthefile);exit(0);if(fgetc(fpread)=EOF)InitScoreFiles();rewind(fpread);fread(per,sizeof(structperson),5,fpread);fclose(fpread);voidWriteFiles(structperson*tmp)FILE*fpwrite;if(fpwrite=fopen(FILENAME,wb+)=NULL)printf(canto

50、penthefile);exit(0);fwrite(tmp,sizeof(structperson),5,fpwrite);fclose(fpwrite);voidInitScoreFiles()inti;structpersona5;for(i=0;i5;i+)ai.score=0;strcpy(ai.name,nobody);WriteFiles(a);voidCompareScore(structpersondes)inti,j;for(i=0;iperi.score)for(j=4;j=i;j-)perj=perj-1;peri=des;break;voidpain_board()/

51、*显示排行函数*/inti;charstring10;ReadFiles1();setfillstyle(1,9);bar(482,227,599,239);outtextxy(490,230,Highestboard);setcolor(15);rectangle(480,225,600,240);setcolor(8);rectangle(481,226,601,241);setfillstyle(1,7);bar(475,257,610,426);setcolor(15);line(475,257,610,257);line(475,257,475,426);setcolor(8);line(475,426,610,426);line(610,257,610,426);setcolor(1);outtextxy(480,260,namescore);for(i=0;iper4.score)setfillstyle(1,9);bar(14,14,447,419);outtextxy(50,250,Refueling!Your Score E

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!