




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、测控技术与仪器专业课程设计题单班级0982011学生刘某某课程名称计算机课程设计课 题贪吃蛇游戏程序设计设计要求 1学习游戏设计有关知识。2设计贪吃蛇游戏程序。3.调试并修改程序。4完成课程设计论文。课题发给日期2011年6月25日课程设计完成日期2011年7月09日指导教师余某某评语:贪吃蛇游戏学生姓名:刘某某班级:0882011指导老师:余某某摘要:编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜 爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按 键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计 10分,接
2、着又出现食 物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到 自己的身体游戏结束。作为一个完整的程序,必须考虑人机交流与用户体验。游戏的界面不 能太丑,更不能连个简单的界面都没有。游戏应该有个比较漂亮的界面, 在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美 观。游戏的美观是一方面,游戏的内在素质是另一方面。一个游戏的优劣, 最终由玩家决定。在游戏与玩家见面之前,游戏开发者要设计一种让玩家 投入的游戏模式,并且在一定的游戏规则下进行。关键词:贪吃蛇 流程图 c语言 源程序1前言 12课设内容 32.1 课设目的32.2 设计功能32.3 结构设计73结论 11参
3、考文献 15附录 A 161前言C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强, 运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高” 可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流 程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必 修的科目。作为一位当代的大学生更要很好的利用它,学好一门设计语言, 实现学以至用。制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理 解和掌握,并且能够掌握C语言编程和程序调试的基本技能。通过游戏程序的设计训练可以提高自己的基本技能, 更好地掌握字符串的 表示方法和字符串函数的功能、Tc图形操作的
4、基本知识、键盘上特殊键 的获取以及图形方式下光标的显示, 提高自己编程兴趣与编程水平,学会 如何正确的书写程序设计说明文档,提高运用 C语言解决实际问题的能 力,巩固C语言语法规则的理解和掌握,学会通过源程序写出流程图,提 高自学以及查阅资料的能力。C语言课程应注重边学边练,但由于课堂教学和实验的深度和广度有 限,练习的深度也受到一定限制。为了弥补这一点,学校开设了本课程设 计。它比教学实验复杂一些,涉及的深度广些并更加接近实用。目的是通 过课程设计的综合训练,培养我们实际分析问题、编程和动手能力,最终 目标是想通过这种形式,帮助我们系统地掌握程序设计的主要内容, 更好 地完成学业。这次课程设
5、计的主要特点如下:1 函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程 序十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增加了程序的可读性。2.分析函数先从main()函数入手。Main()函数是C源程序编译时的开始, 从main()函数开始读函数可将其他函数的功能理解得更透彻。3在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。4我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行处理的函数,起功能我都有所了解。5 它独立于具体的C语言教科书,重点放在C语言的基本特征
6、上, 以 不变应万变,涵盖C语言的重要基础知识,让我们熟练掌握 C语言的 实际使用。6结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需 要。激发学习兴趣,调动我们主动学习的积极性,并会根据实际编程要求, 训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯。7提供综合的课程设计理念,以期进一步锻炼学生的动手能力。同时让 同学合作完成这些实验,以便锻炼互相合作精神,培养团队意识。8 通过观察网络的实例,循序渐进地启发学生完成设计。课程设计将要 求、算法和源程序分开,为学生创造独立思考的条件。学生在充分理解要 求和算法的前提下,设计自己的应用程序。同时我也获得了许多宝贵的经验:1
7、) 在设计程序之前,务必要对你所设计的题目和内容有一个系统的了解 , 知道所设计的题目和内容包含那些资源。2) 设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思 路和一个完整的软件流程图,因而,要先把设计原理与思路搞清楚,再把流 程图画出来,这样设计起来就简单多了。3)在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改 进”是程序设计的必经之路,发现错误也是取得成绩的一种。4)要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而 应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方 便。2课设内容2.1设计目的通过课程设计的综合训练,培养我们实际分
8、析问题、编程和动手能力, 据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过 调试典型例题或习题积累调试 C程序的经验;通过完成辅导教材中的编程 题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。最终目标 是想通过这种形式,帮助我们系统地掌握程序设计的主要内容, 更好地完 成学业。2.2设计功能在这次课射中,我选择的是贪吃蛇游戏的制作,游戏是人们生活中不 可或缺的,一个人从小到大,真正伴随他成长的东西,游戏占有着很重要的 地位.不论是一个玩具,还是一个能和伙伴一起开心的小游戏,都是能给我 们留下很多美好的回忆所以不论是什么样的游戏,只要它能迎合人们内 心的某种需求,它的市场
9、总会是好的,而贪吃蛇是一个深受人们喜爱的游 戏,一条蛇在密闭的围墙内,在围墙内随即出现一个食物,通过按键上的 四个光标键控制向上下左右四个方向移动, 蛇头撞到食物,则表示食物被 吃掉,这时蛇身体长一节,同时计 10分,接着又出现食物,等待被蛇吃 掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体则游 戏结束。本程序运行实现的主要技巧在二维数组的应用上, 程序运行时,游戏 界面如下图所示,边框表示围墙,黑色单独方块表示食物:II I f II II F III图2.1游戏界面2.3结构设计程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一 节身体,身体每长一节,增加一个矩形块
10、,蛇头用俩节表示。移动时必须 从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在 当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动 一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随 蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身 体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块 和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。2.3.1 数据结构表示食物和蛇的矩形都设计为10 X 10个像素单位,食物的基本数据 域为它所出现的位置,用X和y坐标表
11、示,则矩形块用函数 rectangle(x,y,x+10,y+10)或 rectangle(x,y,x+10,y-10)可以画出。由于每次只出现一个食物,而食物被吃掉后,才出现下一个食物,所以设定 yes表示是否要出现一个食物的变量。蛇的一节身体为一个矩形块,这样表示每个矩形块只需起点坐标x和y。身体是不断增长的,所以用数组存放每一节的坐标,最大设定为 N=200,node表示当 前节数。另外还需要保存蛇移动方向的变量 direction和表示生命的变量life ,一但life 为1,则蛇死,游戏结束。所以程序功能的实现就是数组的操作。#define N 200struct Foodint x
12、/*食物的横坐标*/int y/*食物的纵坐标*/int yes ; food ;/*struct sn akeint xN;/*int yN;/*int node;int directi on int life;snake ;232 ma in ()主函数/*判断是否出现食物的变量*/食物的结构体*/蛇的横坐标*/蛇的纵坐标*/* 蛇的节数*/;/* 蛇移动方向*/* 蛇生命,0活着,1死亡*/主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原 型说明,然后初始化图形系统,调用函数 DrawK()画出开始画面,调用函 数GamePlay(),即玩游戏的具体过程,游戏结束后调用Clo
13、se()关闭图形 系统,结束程序void mai n(void)/*主函数 */Init();/* 图形驱动*/DrawK();/*开始画面*/GamePlay();/*玩游戏具体过程*/Close();/* 图形结束*/void Init(void)/*图形驱动 */int gd=DETECT,gm;in itgraph(&gd,&gm,c:tc); /*第一个参数表示图形适配器的类型,第二个为在该类型下图形的显示模式,第三个参数指定驱动程序所在目录。*/cleardevice();233画界面函数DrawK ()主界面就是一个密封的围墙,用两个循环语句分别在水平方向和垂直 方向输出连续的宽
14、度和高度均为10个单位的矩形小方块,围成密闭图形,表示围墙,为了醒目,设置淡青颜色,用函数setl in estyle (SOLD_LINE, 0,THICK_WIDTH设置线型宽度为3个像素。设置3个像 素的围墙线,蛇在贴墙走的时候,会擦掉部分围墙线,使线变细,图形变 得不好看,如果不想这种情况出现,则将线型宽度设置为1个像素。void DrawK(void)/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙 */setbkcolor(O);/*设置当前背景颜色*/setcolor(YELLOW);/* 设置当前画线颜色*/setlinestyle(SOLID_L
15、INE,O,THICK_WIDTH);/*设置线型 */for(i=50;i=600;i+=10)/* 画围墙 */recta ngle(i,40,i+10,49); /*上边 */recta ngle(i,451,i+10,460);/*下边 */for(i=40;i0;i-)/*蛇的每个环节往前移动,贪吃蛇的关键算法*/sn ake.xi=s nake.xi-1;sn ake.yi=s nake.yi-1;switch(snake.direction)/* 定义1,2,3,4 表示右,左,上,下四个方向, 通过这个判断来移动蛇头*/case 1:s nake.x0+=10;break;ca
16、se 2: sn ake.x0-=10;break;case 3: sn ake.y0-=10;break;case 4: sn ake.y0+=10;break;for(i=3;is nake .n ode;i+)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/if(sn ake.xi=s nake.x0&sn ake.yi=s nake.y0)GameOver();/*显示失败 */sn ake.life=1;break;if(sn ake.x0595|s nake.y0455)/*蛇是否撞到墙壁*/GameOver();/* 本次游戏结束*/sn ake.l
17、ife=1; /*蛇死 */if(snake.life=1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/break;if(snake.x0=food.x&snake.y0=food.y)/*吃到食物以后 */setcolor(0);/*把画面上的食物东西去掉*/recta ngle(food.x,food.y,food.x+10,food.y-10);sn ake.xs nake .no de=-20;s nake.ys nake .no de=-20; /*-20表示尾巴长一节*/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/snake.node+;/*蛇的身体长一节
18、*/food.yes=1;/* 画面上需要出现新的食物*/score+=10;PrScore();/* 输出新得分*/setcolor(4);for(i=0;is nake. node;i+)/*画出蛇 */recta ngle(s nake.xi,s nake.yi,s nake.xi+10,sn ake.yi-10);delay(gamespeed);setcolor(0);/*用黑色去除蛇的的最后一节*/recta ngle(s nake.xs nake. no de-1,s nake.ys nake. no de-1,sn ake.xs nake .no de-1+10,s nake.
19、ys nake .no de-1-10); /*endwhile(! kbhit)*/if(snake.life=1)/*如果蛇死就跳出循环*/break;key=bioskey(0);/* 接收按键 */if(key=ESC)/* 按 ESC键退出 */break;elseif(key=UP&sn ake.directio n!=4)/*判断是否往相反的方向移动*/sn ake.directi on=3;elseif(key=RIGHT&sn ake.directio n!=2)sn ake.direct ion=1;elseif(key=LEFT&sn ake.directio n!=1)
20、sn ake.direct ion=2;elseif(key=DOW N&sn ake.directio n!=3)sn ake.directi on=4;/*en dwhile(1)*/2.3.5 游戏结束函数GameOver ()游戏结束,清除屏幕,输出分数,显示游戏结束信息void GameOver(void)/* 游戏结束 */cleardevice();PrScore();setcolor(RED);settextstyle(0,0,4);outtextxy(200,200,guojia n);getch();void PrScore(void)/* 输出成绩 */char str1
21、O;setfillstyle(SOLID_FILL, WHITE);bar(50,15,200,35);setcolor(6);settextstyle(0,0,2);spri ntf(str,score:%d,score);outtextxy(55,20,str);void Close(void)/*图形结束 */getch();closegraph();2.3.6 输出分数函数PrScore ()在指定的位置利用sprintf ()将整数转换为字符串,用outtextxy () 输出,bar ()函数的应用是为了覆盖原来的值。2.3.7 图形结束函数Close ()在显示游戏结束信息的画面
22、时,按任意键关闭图形系统,程序结束。2.3.8系统总体方案介绍贪吃蛇原理:游戏贪吃蛇就是在液晶屏幕上画出蛇,同时随机地给出食物。游戏者通过键盘操作控制贪吃蛇的移动,去吃食物,吃到后食物消失,然后再随机给出食物同时蛇的身体增长。画蛇的原理就是利用人眼的视觉效应先将 蛇头向前移动一格,然后所有蛇身依次向前移动一格,最后再擦除蛇尾。 这样在人眼看来好像蛇在向前移动。食物的给出,首先需要产生一个随机 数,然后通过这个随机数计算得到食物的横纵坐标,在液晶屏上显示出来。控制蛇的移动方向,需要扫描键盘,然后根据键值改变蛇的移动方向239 游戏流程图进入游戏#include #in elude #defi n
23、e LEFT 0x4b00#defi ne RIGHT 0x4d00#defi ne DOWN 0x5000#defi ne UP 0x4800#defi ne ESC 0x011bint i,key;int score=0;/* 得分 */int gamespeed=50000;/*游戏速度自己调整*/struct Food int x;/*食物的横坐标*/int y;/*食物的纵坐标*/int yes;/*判断是否要出现食物的变量*/food;/* 食物的结构体*/struct Sn akeint xN;int yN;int node;/* 蛇的节数*/int direction;/*蛇移
24、动方向 */int life;/*蛇的生命,0活着,1死亡*/sn ake;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();/*图形结束*/*图形驱
25、动*/void In it(void)int gd=DETECT,gm;in itgraph(&gd,&gm,c:tc);cleardevice();void DrawK(void)/*setbkcolor(LIGHTGREEN);*/setcolor(11);设置线型*/setli nestyle(SOLID_LINE,O,THICK_WIDTH);/*for(i=50;i=600;i+=10)/* 画围墙 */recta ngle(i,40,i+10,49); /*上边 */recta ngle(i,451,i+10,460);/*下边 */for(i=40;i0;i-)/*蛇的每个环节往
26、前移动,也就是贪吃蛇的关键算法*/sn ake.xi=s nake.xi-1;sn ake.yi=s nake.yi-1;/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/switch(s nake.directio n)case 1:s nake.x0+=10;break;case 2: sn ake.x0-=10;break;case 3: sn ake.y0-=10;break;case 4: sn ake.y0+=10;break;for(i=3;is nake. node;i+)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/if(sn ake.xi=s nake.x 0&sn ake.yi=s nake.yO)GameOver();/*显示失败 */sn ake.life=1;break;if(sn ake.x0595|s nake.y0455)/*蛇是否撞到墙壁*/GameOver();/*sn ake .1 ife=1; /* if(s nake.life=1)/* 开始*/break;本次游戏结束*/蛇死*/以上两种判断以后,如果蛇死就跳出内循环,重新if(s nake.x0=food.x&s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创办企业科学管理
- 内蒙古自治区赤峰市2023-2024学年高二下学期7月期末生物试题 含解析
- 管理沟通中的会议沟通
- 文化市场消防安全培训
- 压疮的居家护理
- 雷火灸常见病治疗
- 中班课件:动物睡觉的方式
- 2025届河北省唐山市玉田县第一中学高三下学期模拟预测英语试题
- 人教版小学一年级语文上册期末考试试卷
- 住院医师规范化培训师资要求
- 国企控股公司所属公司经理层成员任期制和契约化管理办法(试行)
- 海地软件帮助
- 现代纺织技术专业调研报告
- 粮安工程粮库智能化升级改造 投标方案(技术标)
- 浅析《山海经》的鬼神形象
- 部编版六年级语文下册期末专题复习课件全套
- 高三化学复习【有机合成与推断】课件
- 机械通气常见并发症的预防与处理课件
- 妇产科医疗质量与安全管理制度
- 食堂每日巡检表
- 2023春期国开电大行政管理本科选修课《政治学原理》形考、终考试题及答案
评论
0/150
提交评论