您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 贪吃蛇C语言课程设计
本科课程设计论文题目用C语言实现贪吃蛇系别信息科学与技术系专业班级姓名学号指导教师年月日信息科学与技术系-1-目录摘要..........................................................................................-2-第一章绪论..............................................................................-3-第二章需求分析..........................................................................-4-2.1功能需求.........................................................................-4-2.2性能需求.........................................................................-4-第三章程序设计........................................................................-5-3.1总体设计.......................................................................-5-3.2详细设计................................................................................................-5-第四章调试与测试....................................................................-20-第五章总结与心得....................................................................-22-附录..........................................................................................-24--2-摘要贪吃蛇游戏是一个深受人们喜爱的游戏,一条在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。经过分析,我使用C语言开发工具,通过TC软件来实现,在掌握C语言的基础知识:数据类型(整型.实型.字符型.指针.数组.结构等);运算类型(算术运算.逻辑运算.自增自减运算.赋值运算等);程序结构(顺序结构.判断选择结构.循环结构);大程序的功能分解方法(即函数的使用)等.进一步掌握各种函数的应用以及文件的读写操作等.关键字:贪吃蛇光标键数据类型运算类型程序结构TC软件-3-第一章绪论贪吃蛇游戏是一个深受人们喜爱的游戏,一条在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。表示食物与蛇的矩形块设计为10*10个像素单位,食物的基本数据域为他所出现的位置,用x和y座标表示,则矩形块用函数rectangle(x,y,x+10,y+10)或rectangle(x,y,x+10,y-10)可以画出。由于每次只出现一个食物,所以设定yes表示是否要出现食物。蛇的一节身体为一个矩形块,表示矩形块只需起点座标x,y。身体不断增长,用数组存放每节座标,最大设定为N=200,node表示当前节数。保存蛇的移动方向的变量direction和生命的变量life,一旦life为1,表示蛇死,结束。本系统的主要功能主要有:1.初始图形系统2.开始画面3.玩游戏的具体过程4.游戏结束后5.关闭图形系统6.结束程序-4-第二章需求分析2.1功能需求:根据主界面显示内容进行选择并进一步执行相应操作。一、初始图形:通过函数Init(),初始画面、二、开始画面:通过函数DrawK(),主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度的矩形方块。三、玩游戏的具体过程:通过函数GamePlay(),通过按键盘上四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,接着又出现食物,等待被蛇吃掉,小蛇继续运动。四、游戏结束:通过函数GameOver(),蛇碰到墙壁或者碰蛇身,游戏结束,清除屏幕,输出分数显示游戏结束信息。五、关闭图形系统:通过函数Close(),关闭图形界面。六、结束程序七、退出系统2.2性能需求:具有良好的可靠性和安全性。对于系统要求比较低。使用范围比较广。-5-需在TC下运行。第三章程序设计3.1概要设计将此系统化分为如下模块:1、初始图形模块:可用函数Init()函数来实现此操作。2、开始画面模块:用DrawK()函数来实现。出现运行界面。3、玩游戏的具体过程模块:可用GamePlay()函数来实现。通过按键盘上四个光标键控制蛇向上下左右四个方向移动,小蛇在移动的过程中吃食。4、游戏结束后模块:用GameOver()函数来实现。5、输出分数模块:用PrScore()函数来实现。输出游戏的得分。6、关闭图形系统模块:用Close()函数来实现。关闭图形运行界面。7、结束程序模块:用Close()函数来实现。结束程序。8、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。数据结构设计:程序设计中用到的结构体类型:intstr。3.2详细设计1.主函数main()主函数是程序的住流程,首先定义使用到得常数、全局变量及函数原型说明,然后初始图形系统,调用函数DrawK()画出开始画面,调用GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序。编码:-6-voidmain(void){Init();/*图形驱动*/DrawK();/*开始画面*/GamePlay();/*玩游戏具体过程*/Close();//图形结束}对应流程图:系统流程图1开始图形驱动开始画面玩游戏具体过程图形结束结束-7-开始蛇吃到食物?蛇长大死亡?继续?退出界面初始界面和蛇身游戏者按键选择放置食物蛇开始运动YN系统流程图2YyNYYN-8-2.图形驱动函数Init()编码:voidInit(void){intgd=DETECT,gm;initgraph(&gd,&gm,c:\\tc);cleardevice();}对应流程图:3.画界面函数DrawK()主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度的矩形方块,表示围墙,为了设计醒目,可设置自己所需颜色。编码:voidDrawK(void){setbkcolor(LIGHTGREEN);/*设置当前背景颜色(为淡绿色)*//*界面的颜色,界面颜色为明亮的绿色。*/setcolor(11);/*设置当前画线颜色*/setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/for(i=50;i=600;i+=10)/*画围墙*//*小蛇每走一步,得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函数求出矩形大小。*/*/rectangle(601,i,610,i+10);/*右边*/}}对应流程图:Intgd=DETECT,gm-9-i+=10i=450rectangle(50,I,59,i+10);i+=10i=50i=6000rectangle(i,40,i+10,49)i=40-10-4.游戏具体过程函数GamePlay()这是游戏的主要组成部分,它采用将前一节的坐标赋给后一节的坐标,用背景颜色将最后节去除,当蛇头的坐标与食物相等时,表示食物被吃掉了。编码:voidGamePlay()//玩游戏的具体过程//{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;/*节数(蛇的节数为2)*/PrScore();/*输出得分*/while(1)/*可以重复玩游戏,压ESC键结束*/{while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/{if(food.yes==1)/*需要出现新食物*/{food.x=rand()%400+60;food.y=rand()%350+60;/*食物坐标x=随机数/400+60,食物坐标y=随机数/350+60.时,才可确保食物出现在整格内*/while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/food.x++;while(food.y%10!=0)food.y++;food.yes=0;/*画面上有食物了*/}if(food.yes==0)/*画面上有食物了就要显示*/{setcolor(ORANGE);/*食物的颜色*/rectangle(food.x,food.y,food.x+10,food.y-10);}for(i=snake.node-1;i0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/{snake.x[i]=snake.x[i-1];/*小蛇向左移动一步*/snake.y[i]=snake.y[i-1];/*小蛇向上移动一步*/}/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/switch(snake.direction)-11-{case1:snake.x[0]+=10;break;/*蛇向右移动一步,蛇身长为初值后,x[0]=x[0]+10返回*/case2:snake.x[0]-=10;break;/*蛇向左移动一步,蛇身长为初值后,x[0]=x[0]+10返回*/case3:snake.y[0]-=10;break;/*蛇向上移动一步,蛇身长为初值后,y[0]=y[0]+10返回*/case4:snake.y[0]+=10;break;/*蛇向下移动一步,蛇身长为初值后,y[0]=y[0]+10返回*/}for(i=3;isnake.nod
本文标题:贪吃蛇C语言课程设计
链接地址:https://www.777doc.com/doc-6102244 .html