c语言课设贪吃蛇.doc_第1页
c语言课设贪吃蛇.doc_第2页
c语言课设贪吃蛇.doc_第3页
c语言课设贪吃蛇.doc_第4页
c语言课设贪吃蛇.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

辽 宁 工 业 大 学 C语言程序设计 课程设计(论文)题目: 贪吃蛇 院(系): 软件学院 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 起止时间:2010.12.20至2010.12.31 课程设计(报告)任务及评语院(系):软件学院 教研室:软件教研窒学 号学生姓名专业班级程序设计(报告)题目 贪吃蛇程序设计(报告)任务程序设计的任务与要求:(1)掌握C语言编程的基础知识。(2)较熟练地编写C语言应用程序。(3)了解C语言的常用标准函数、编程技巧、异常处理。(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: 2011 年 1 月 4 日辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)目 录第1章 课程设计的目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章 课程设计内容22.1程序功能介绍22.2程序整体设计说明22.2.1设计思路22.2.2数据结构设计及用法说明32.2.3程序结构(流程图)42.2.4各模块的功能及程序说明52.2.5程序结果52.3程序源代码及注释6第3章 课程设计总结15 参考资料.17第1章 课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完程序设计语言(C)课程后进行的一次全面的综合练习。本课程设计的目的和任务: 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。1.3 课程设计的预备知识熟悉C语言及C语言开发工具。1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章 课程设计内容2.1程序功能介绍贪吃蛇是一个小游戏,在封闭围墙里,随机出现一个食物,通过按键盘上下左右四个光标键控制蛇移动方向,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,如果蛇在移动中撞到墙或身体交叉蛇头撞到自己身体,则游戏结束。2.2程序整体设计说明2.2.1设计思路用一个小矩形块表示蛇的一节身体,每增加一个矩形块,蛇身长一节,蛇头用俩节表示。必须从蛇头开始移动,所以蛇不能向相反的方向移动,如果不按光标键,蛇将自行在当前方向向前移动,但是当按有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按有效方向键后,应先确定蛇头的位置,然后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置相差一个单位,所以看起来蛇就会多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇表示食物与蛇的矩形块设计为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,表示蛇死,则游戏结束。 2.2.2数据结构设计及用法说明int key;按键的获得int score=0;得分int gamespeed=50000;游戏速度自己调整struct Food int x;食物的横坐标 int y;食物的纵坐标 int yes;判断是否要出现食物的变量food;食物的结构体struct Snake int xN; int yN; int node;蛇的节数 int direction;蛇移动方向 int life;蛇的生命,0活着,1死亡snake;2.2.3程序结构(流程图)2.2.4各模块的功能及程序说明主函数定义常数,全局变量,函数原型说明,初始化图形系统,调用drawk()画开始画面。调用gameplay()关闭图形系统,成语结束。画界面函数drawk用 主面是一个封闭的围墙,两循环语句分别在水平和垂直方向输出连续的宽度和高度均为10单位的矩形方块,表示围墙,函数setlinestyle(solid-line,thick-width)设置线形宽度3像素。设置3像素围墙线。游戏函数gameplay(),每次移动时重最后一节到倒数第2节,将前一节坐标付给后一节坐标移动后把最后一节用颜色覆盖,然后蛇头按方向键更改位置。游戏结束函数gameover(),函数结束,清屏,输出分数,显示游戏结束信息。Prscore()输出分数,在指定位置用Prscore()将整数转为字符串,用outtextxy()函数输出。void main() 游戏主程序算法如下:(1)设置初始值。食物要设置随机数发生器。初始时,蛇只有蛇头,设定一个开始方向。(2)循环执行,按esc退出。1)没按键时循环执行。若没有食物,随机出现食物;有食物,显示食物;蛇移动身体,根据蛇移动的方向改变坐标,并判断蛇是否撞到墙或自己,是则蛇死,调用结束函数gameover(),结束本游戏,重新开始。若蛇吃到食物,蛇身体长一节,数组元素增加一个,身体节数和分数都增加。在新位置画出蛇。2)如果有按键,识别键值。按键ESC结束游戏,按键为方向键,则根据该键改变代表蛇方向的变量direction的值,反方向键无效。游戏结束函数gameover()游戏结束,清屏,输出分数,显示游戏结束信息。prscore()输出分数在指定位置用sprintf()将整数转为字符串,用outtextxy()输出,bar()函数的用处是覆盖原来的值。close()图形结束显示游戏结束信息画面时,按任意键关闭图形系统,程序结束。2.2.5程序结果下图为贪吃蛇运行图,在运行中按方向键上,下,左,右。来控制蛇身的运行方向,若蛇吃到食物则蛇身加长,继续游戏。若蛇身体交叉蛇头撞到自己的身体或撞到墙则蛇死,游戏结束。如图2.2.5.1和图2.2.5.2所示图2.2.5.1 贪吃蛇运行过图图2.2.5.2贪吃蛇运行结果图2.3程序源代码及注释#define N 200#include #include #include #define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score=0;/*得分*/int gamespeed=50000;/*游戏速度自己调整*/struct Food int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/food;/*食物的结构体*/struct Snake int xN; int yN; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*开始画面*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*/*主函数*/void main(void) Init();/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/*图形驱动*/void Init(void) int gd=DETECT,gm; registerbgidriver(EGAVGA_driver); initgraph(&gd,&gm,c:program fileswinyestc20hbgi); cleardevice();/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/void DrawK(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;i0;i-)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ snake.xi=snake.xi-1; snake.yi=snake.yi-1; /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction) case 1:snake.x0+=10;break; case 2: snake.x0-=10;break; case 3: snake.y0-=10;break; case 4: snake.y0+=10;break; for(i=3;isnake.node;i+)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/ if(snake.xi=snake.x0&snake.yi=snake.y0) GameOver();/*显示失败*/ snake.life=1; break; if(snake.x0595|snake.y0455)/*蛇是否撞到墙壁*/ GameOver();/*本次游戏结束*/ snake.life=1; /*蛇死*/ if(snake.life=1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break;if(snake.x0=food.x&snake.y0=food.y)/*吃到食物以后*/ setcolor(0);/*把画面上的食物东西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.xsnake.node=-20;snake.ysnake.node=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node+;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新的食物*/ score+=10; PrScore();/*输出新得分*/ setcolor(4);/*画出蛇*/ for(i=0;isnake.node;i+) rectangle(snake.xi,snake.yi,snake.xi+10, snake.yi-10); delay(gamespeed);setcolor(0);/*用黑色去除蛇的的最后一节*/ rectangle(snake.xsnake.node-1,snake.ysnake.node-1, snake.xsnake.node-1+10,snake.ysnake.node-1-10); /*endwhile(!kbhit)*/if(snake.life=1)/*如果蛇死就跳出循环*/ break;key=bioskey(0);/*接收按键*/if(key=ESC)/*按ESC键退出*/ break; else if(key=UP&snake.direction!=4)/*判断是否往相反的方向移动*/ snake.direction=3; else if(key=RIGHT&snake.direction!=2) snake.direction=1; else if(key=LEFT&snake.direction!=1) snake.direction=2; else if(key=DOWN&snake.direction!=3) snake.direction=4; /*endwhile(1)*/*游戏结束*/void GameOver(void) cleardevice(); PrScore(); setcolor(RED); settextstyle(0,0,4); outtextxy(200,200,GAME OVER); getch();/*输出成绩*/void PrScore(void) char str10; setfillstyle(SOLID_FILL,YELLOW); bar(50,15,220,35); setcolor(6); settextstyle(0,0,2); sprintf(str,score:%d,score); outtextxy(55,20,str);/*图形结束*/void Close(void) getch(); closegraph();第3章 课程设计总结 通过这次的课程设计,我学到了很多关于计算机方面的知识。同时通过这次的实际操作,让我对C语言有了更进一步的了解,也更加喜欢这一学科。同样也有了一次锻炼的机会。 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。在设计的过程中遇到问题,可以说得上是困难重重,这毕竟是第一次做,难免会遇到过各种各样的问题。同时在这次课程设计中让我们认识到做程序设计这项工作中我们要具备以下素质:1.很强的团队精神和协作能力和文档习惯。我从来不相信车到山前必有路的说法,认为那只是懒惰者自寻懒惰的借口,我们要积极,要把握,要努力。我们自己能做到的仅此而已,因为人力也有所不能及。我觉得,用到的程序段不必太高级,因为天下事有高低之分,决定优劣的不是集体中某部分的强弱,起决定作用的是组合内各元素的和谐,要能在一个集体中各能尽其用,每个人都能发挥长处,避免自己的短处,那么这个集体的实际组合能量是最优的良好的。文档是正规研发流程中非常重要的环节,缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。此外编程是一项高精度的工作所以我们要有规范化,标准化的代码编写习惯。通过这次编程我们深深的感受到对代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同人员之间的协作。2.我们还要有模块化思维能力。模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,3.学习和总结。善于总结,也是学习能力的一种体现,每次完成一个编程任务,一段代码,都应当有目的的跟踪该程序的应用状况,随时总结,找到自己的不足,这样所编写的程序才能逐步提高,生活就是这样,汗水预示着结果也见证着收获。在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明,这次实际操作必将成为我们人生旅途上一个非常美好的回忆!通过本次论文的设计,我初步学会了论文

温馨提示

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

评论

0/150

提交评论