------------ 大学C语言程序设计课程设计(论文)题目:贪吃蛇院(系):专业班级:学号:学生姓名:指导教师:教师职称:起止时间:课程设计(报告)任务及评语院(系):教研室:学号学生姓名专业班级程序设计(报告)题目贪吃蛇程序设计(报告)任务程序设计的任务与要求:(1)掌握C语言编程的基础知识。
(2)较熟练地编写C语言应用程序。
(3)了解C语言的常用标准函数、编程技巧、异常处理。
(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。
(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。
(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。
课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。
正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。
指导教师评语及成绩成绩:指导教师签字:2011年 1 月 4 日目录第1章 C语言课程设计的实训目的与要求 (1)1.1 C语言课程设计目的 (1)1.2 C语言课程设计的实验环境 (1)1.3 C语言课程设计的预备知识 (1)1.4 C语言课程设计要求 (1)第2章 C语言课程设计内容 (2)2.1程序功能介绍 (2)2.2程序整体设计说明 (2)2.2.1设计思路 (2)2.2.2数据结构设计及用法说明 (3)2.2.4各模块的功能及程序说明 (7)2.2.5程序结果 (8)2.3程序源代码及注释 (10)第3章 C语言课程设计总结 (17)参考资料.. (20)第1章 C语言课程设计的目的与要求1.1 C语言课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 C语言课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。
C语言程序设计及相应的开发环境。
1.3 C语言课程设计的预备知识熟悉C语言及C语言开发工具。
1.4 C语言课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章 C语言课程设计内容2.1程序功能介绍贪吃蛇游戏是一个经典小游戏,深受众多玩家喜爱,其规则是:一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。
此游戏不仅能锻炼人的思维敏捷性,而且还可以提高玩家的逻辑判断能力。
2.2程序整体设计说明任何一种游戏都必须具备开始部分,运行部分,结束部分。
但其核心是运行部分,它是整个游戏程序的中间力量,故其对程序设计的严密性要求极其严格。
2.2.1设计思路贪吃蛇游戏设计的虽然总体分为开始、运行、结束三个过程,但其内部程序非常之复杂具体包括开始时的状态,游戏进行中如果得分其分数的累加程序的设计,当玩家游戏结束时所出现的音频及图片效果等设计的程序主要包括主函数,printf()函数,scanf()函数等各种输入输出函数。
同时还运用了各种数据类型和运算符以及各种选择结构循环结构的重复使用。
特别是运用了数组结构(1.2.3维)和函数之间的调用是程序更为完整清楚简便,易于读懂。
这个程序的关键是表示蛇的图形以及蛇的移动。
用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。
移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。
如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有庆平的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来就像多一节身体,所以将蛇的最后一节用背景色覆盖。
食物的出现和消失也是由画矩形块和覆盖矩形块所覆盖。
这样一个贪吃蛇游戏程序在所学的C语言知识下便设计成功。
2.2.2数据结构设计及用法说明开始部分:由于贪吃蛇游戏是运行在图形模式下的,所以第一步一定是初始化图形模式,接着要有开始的界面,就像书有封面一样,由此我设置了一个游戏的标题画面,除了游戏标题画面我还设置了一个欢迎画面,这样玩游戏时比较有真实感,图像感。
标题画面以后,还要为游戏的运行部分作初始化,包括绘制游戏运行时的背景以及游戏运行时的音频效果,同时还要对游戏某些重要变量的初始化。
运行部分:该部分作为游戏的核心部分,这里包括的函数比较多,也就是模块比较多,首先让我以故事的方式模拟一下贪吃蛇的游戏基本模式:假如某个世界上突然出现一条蛇,它很短,它的运动神经异常,它没法停止自己的多动症在它的世界里就只有食物,它很饿,也很贪吃;同样在不明原因的情况下,食物从天而降,可惜的是没有落到嘴边;饥饿的主人公,不管它有没有毒,也不问食物的来历,径直向食物爬去;它吃到食物啦,它超出想象的同化能力让食物很快的成为自己身体的一部分,它的身子变长啦。
当它吃到第一颗食物时,上帝有给它第二颗,于是它吃了第二颗,于是又变长了,于是又有第三颗……它的身子是一直的加长,它不管自己过长身体的麻烦——转身不便,继续吃下去,现在它是直接把嘴巴张大,好让食物有个绿色通道。
但有时随着贪吃蛇的不断增长食物的停留时间也随之缩短,如果不及时吃掉的话食物就会消失。
此时你的分数停滞不前。
如果在某天,它不小心咬到了自己,它才想起自己是一条毒蛇,于是晕死过去(不是毒死);又或者它往食物冲锋的时候,它失去控制,撞到了墙,导致了昏死。
第一轮循环:第一步,出现食物;第二步,蛇不停运动;第三步,检查蛇是咬到自己或撞到墙壁;由第四步起游戏有两条支线(A、B):A :第四步,当蛇没有碰到自己或墙壁,蛇继续前进,绘制蛇的动作;第五步,判断蛇是否吃到食物,如果蛇吃到食物,身子变长,原来的食物消失;如果蛇没有在规定的时间内吃到食物,食物将自动消失。
第六步,让玩家输入控制指令,让蛇在下一轮循环的第二步改变运动方向;第七步,第二轮循环的第一步,重复第一轮的步骤;B:第四步,蛇碰到自己或墙壁,终止游戏。
结束部分:游戏结束时,显示“GAME OVER”背景图象,并配有比较忧伤的音乐,已经是约定俗成的规律了,我所设计的贪吃蛇游戏也不例外。
除了游戏结束画面外,我还设置了一个游戏退出画面,并提示玩家是否退出游戏或者是继续此前游戏。
有了上述的大致划分,我把整个程序划分成(13+2)个基本模块(其实就是函数的基本应用以及根据函数的用途所划分的小模块)2.2.3程序结构(流程图)总流程图开始游戏的标题画面为运行部分初始化运行部分NO撞墙或咬自己YES游戏结束继续游戏分流程图(模块)图2.1流程图在设计贪吃蛇游戏时依据所需要处理的任务要求,规划输入数据和输出结果,决定存放数据的数据结构。
C语言中数据结构集中体现在数据类型上,因此在进行C语言程序设计时,应统筹规划程序中所使用的变量,数组,函数,指针等,以及它们的类型等。
这点是很重要的,如果在此期间选择不合适的变量或者数组,将来修改就十分困难,所以在设计时要秉着简单易懂的理念来设计程序,并且要尽量失所编写的程序优化从而可以高速度运行程序。
START Initgra() Welcome() Title() Initgame()Drawfood(Drawbg() DrawsnakeSnakemoveEatfood(Close()Checkover()==0Control()==Gameover(End1No keyboard hityesnobreaknoyesyesno现在分析一下贪吃蛇游戏中的元素,继而得出与它们对应的在程序中的描述:蛇:基本描述:长度,颜色,位置。
对应数据与数据类型:长度—虽然可以用坐标表示,但是这样的话,运算量将很大,所以换算成较大的单位—节数,以固定长度的每节描述;坐标--整型;颜色--整型;位置--X,Y坐标。
增加的描述:蛇运动的方向,蛇的生命。
对应数据与数据类型:这些描述是为了与程序的按键的输入部分与判断游戏结束部分相联系而设的。
方向只有四个方向:上下左右。
可以设置与之对应的四个整型数:3、4、2、1。
贪吃蛇的生命就只有两种情况:死或生,对应的逻辑运算符为0或1及真假。
食物:基本描述:颜色,位置。
对应数据与数据类型:由于颜色设成固定的,所以不再讨论。
位置—X、Y坐标。
增加的描述:食物的存在。
对应数据与数据类型:这是为了避免重复出现食物而设置的,与绘制食物的函数有联系。
只有两个值:0或1(没有食物,有食物或食物消失)其他的元素:墙,由于它在显示上是作为背景而存在的,所以并没有什么说明实际的墙壁就是四条直线组成的边框,由坐标描述。
还需要的变量:键盘键入的键值(作为全局变量,整型);经常要使用的循环变量;自定义的填充图案;说明文字的字符数组;游戏的记分;游戏的速度(蛇的速度)。
图2.2蛇的不停运动的关键算法的流程图2.2.4各模块的功能及程序说明主要模块的实现思路和算法的流程图说明:总程序是整个贪吃蛇程序的一个概括其具体i=蛇的节数-1i--第i 节的y 坐标=第i-1节的y 坐标第i 节的x 坐标=第i-1节的x 坐标i>0snake.direct ion蛇的方向第0节的x 坐标加10第0节的x 坐标减10第0节的y 坐标减10第0节的y 坐标加10yesno1向右2向左3向上 4向下包括程序的开始,运行及结束和中间的具体细微的判断是否停止或继续进行此游戏。
下面是整个程序中极其重要的部分亦是核心部分。
关键所在——蛇不停移动的Snakemove():蛇的不停移动,就是蛇的下一节取代前一节的位置,在计算机中就是蛇下一节的位置坐标变成前一节的位置坐标。
在上文中,已定义蛇的位置坐标为数组类型,一组坐标对应一节的位置,假设有i+1节,由0到i节,第i节的坐标取第i-1节的坐标,第i-1节的坐标取第i-2节的坐标……直到第1节取第0节的坐标。
而第0节的坐标,即蛇头的坐标要往某个方向变化,变化量为蛇每节的长度。
蛇的这种坐标轮换需要循环语句使其继续下去。
还有在游戏开始或结束时所出现的背景图或者是音频效果在此过程中运用了函数的输入输出如printf(),scanf()函数等。