C语言贪吃蛇程序设计说明书
C语言贪吃蛇程序设计说明书

C语言贪吃蛇程序设计说明书题目:贪吃蛇游戏学校: 系别: 专业班级: 姓名: 学号: 指导老师: 日期:一、设计题目:贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。
每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。
二、功能设计:本游戏要求实现以下几个功能:(1) 用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长;(2) 用户可以调节蛇的运行速度来选择不同的难度;(3) 游戏分多个难度级别;(4) 用户可自选颜色;(5) 记录成绩前五名的游戏玩家;(6) 增加背景音乐;(7) 提高障碍物和游戏级别。
三、程序模块图:贪吃蛇游戏初画控设帮始图制置助模模模模化块块块块墙蛇食移食死变成等音体身物动物亡长绩级效2四、算法流程图:开始初始化界面和蛇身放置食物获取按键开始运动碰到边界是否否蛇吃到食是蛇长大蛇死亡是继续否结束3五、函数原型与功能 1.主函数:void main()启动程序,触动其他函数。
2.初始化:void init ()设置背景框大小、蛇体初始值,随机产生食物。
3.随机产生食物:void setfoodcrd()设置食物生成坐标,0表示食物被吃。
4.画食物:void showfood()用矩形框来画食物5.画蛇:void showsnake()根据蛇的坐标和节数,循环用矩形框来画蛇。
6.蛇移动:void snakemove() 根据按键,重设坐标7.改变蛇的方向:void changeskdir()响应用户的运动方向8.判断蛇是否死亡:void judgeslod判断蛇是否碰到自己或墙。
9.判断蛇是否吃到食物:void judgefood()判断是否吃到食物,吃食后变0,蛇增长一节。
10.结束游戏:void gameover()结束话语,并执行下一步。
六、基本代码#include<graphics.h> #include<conio.h>#include<stdio.h>#pragma comment(lib,"Winmm.lib")#include "MyTimer.h" #define SIZEMAX 100 /*蛇最大长度*/ #define SPEED 100 /*初始速度*/ #define len 20 /*蛇宽度*/#define lm 10 /*蛇每次移动距离*/ #define initlen 600 /*初始化窗口正方形的长度*/ #define Min_snakelen 2 /*蛇的最小长度*/typedef struct {int x,y;}DIR;int snakelen=Min_snakelen; /*蛇的长度*/4int isfood=1; /*食物状态*/ int isover=0; /*游戏状态*/int ispause=1; /*暂停状态*/int ismusic=1; /*音乐播放状态*/ char dir; /*记录蛇运动的方向*/ char c='d';DIR snake[500],food; /*定义蛇节点和食物的类型*/ int speed=SPEED;void drawmap() /*画地图函数*/ {IMAGE img;char str[10];loadimage(&img,"贪吃蛇.jpg"); /*游戏界面*/putimage(0,0,&img);loadimage(&img,"7.jpg"); /*侧栏提示*/putimage(600,0,&img);sprintf(str,"%d",snakelen);setfont(30,0,"宋体");setbkmode(TRANSPARENT);outtextxy(620,10,"操作说明:");setfont(20,0,"宋体");outtextxy(615,50,"awsd控制方向键");outtextxy(615,80,"p键暂停");outtextxy(615,110,"o键继续");outtextxy(615,200,"esc键退出");outtextxy(615,140,"l键暂停音乐");outtextxy(615,170,"k键继续播放");outtextxy(730,250,str);outtextxy(620,250,"蛇当前长度");}void init() /*初始化蛇函数*/ {int i;IMAGE img;snake[0].x=9*len+lm;snake[0].y=4*len+lm;loadimage(&img,"1.jpg");putimage(snake[0].x-lm,snake[0].y-lm,&img); for(i=1;i<snakelen;i++){snake[i].x=len*(9-i)+lm;snake[i].y=len*4+lm;5loadimage(&img, "2.jpg");putimage(snake[i].x-lm,snake[i].y-lm, &img); }}void showsnake() /*画蛇函数*/ {int i;IMAGE img;loadimage(&img, "1.jpg");putimage(snake[0].x-lm,snake[0].y-lm , &img);loadimage(&img, "2.jpg");for(i=1;i<snakelen;i++)putimage(snake[i].x-lm,snake[i].y-lm, &img); }void snakemove() /*画动蛇函数*/ {int i;int mx=snake[0].x;int my=snake[0].y;switch(dir){case 'a':mx-=len;break;case 'd':mx+=len;break;case 'w':my-=len;break;case 's':my+=len;break;default:break;}for(i=snakelen-1;i>=0;i--){snake[i+1].x=snake[i].x;snake[i+1].y=snake[i].y;}snake[0].x=mx;snake[0].y=my;showsnake();}int ceshiover() /*检测游戏结束函数*/ {int i;if(snake[0].x<0||snake[0].x>30*len-lm||snake[0].y<0||snake[0].y>30*len-lm)return 1;for(i=1;i<snakelen;i++)6{if(snake[0].x==snake[i].x&&snake[0].y==snake[i].y) return 1;}return 0;}int foodinsnake() /*检测食物是否在蛇上函数*/ {for(int i=0;i<snakelen;i++)if(food.x==snake[i].x&&food.y==snake[i].y)return 1;elsereturn 0;}void showfood() /*画食物函数*/{IMAGE img;do{food.x=(rand()%30)*len+lm;food.y=(rand()%30)*len+lm;}while(foodinsnake());loadimage(&img, "3.jpg");putimage(food.x-lm,food.y-lm , &img);isfood=0;}void kmusic(){if(ismusic==0)mciSendString("pause mymusic",NULL,0,NULL);if(ismusic==1)mciSendString("resume mymusic",NULL,0,NULL);}void playbkmusic() /*播放背景音乐函数*/{mciSendString("open 超级玛丽.mp3 alias mymusic", NULL, 0, NULL); mciSendString("play mymusic repeat", NULL, 0, NULL);}void playgame() /*玩游戏函数*/{c='d'; //蛇开始向右移动isover=0;7snakelen=Min_snakelen;dir='d';IMAGE img;MyTimer t; //定义精确延时对象int T=200; // 延长时间drawmap(); //画游戏地图init(); //画小蛇初始位置while(!isover){if(ispause){snakemove();FlushBatchDraw(); //批量绘图EndBatchDraw(); //结束批量绘图if(snake[0].x==food.x&&snake[0].y==food.y){ snakelen++;isfood=1;}if(isfood)showfood();if(snakelen<35)T=200-3*snakelen;t.Sleep(T);BeginBatchDraw(); // 开始批量绘图模式,防止闪烁问题drawmap();loadimage(&img, "3.jpg"); // 加载食物图片putimage(food.x-lm,food.y-lm , &img);};//按键控制if(kbhit())c=getch();switch(c){case 'a':if(dir!='d'){dir=c;}break;case 'd':if(dir!='a'){dir=c;}break;case 'w':if(dir!='s'){8dir=c;}break;case 's':if(dir!='w'){dir=c;}break;case 27: exit(0); break; //游戏退出case 'p': ispause=0;break; //p暂停case 'o': ispause=1;break; //o继续游戏case 'l': ismusic=0;break; //l暂停音乐case 'k': ismusic=1;break; //k继续播放default:break;}kmusic(); //音乐控制播放//判断游戏结束if(ceshiover())isover=1;//判断是否重新再来HWND wnd = GetHWnd(); //获取窗口句柄if(isover)if (MessageBox(wnd, "游戏结束。
C语言课程设计报告——贪吃蛇源程序

C 语止课程安排之阳早格格创做(小游戏贪吃蛇的步调安排报告)安排人:班级:201年月号目录一:概括1:钻研背景及意思2:安排的任务与需要知识面3:简曲完毕安排真量二:需要领会1:功能需要2:支配要领三:总体安排1:模块区分2:数据结构安排四:仔细安排1:主空摸块安排2:画造游戏界里3:游戏的简曲历程4:游戏的中断处理5:隐现排止榜疑息模块五:步调的调试与尝试1:动画与音乐共步2:蛇的运止3:末止步调六:论断七::中断语八:步调浑单九:参照文献一.概括本课程安排以硬件工程要领为指挥,采与了结构化,模块化的步调安排要领,以C谈话技能为前提,使用TurboC++3.0为主要启垦工具,对付贪吃蛇游戏举止了需要领会,总体安排,仔细安排,最后完毕系统的真止与尝试.1.1 钻研的背景及意思随着社会的死少,人们死计的节奏日益加快,越去越多的人加进了寰球化的天下.人们不再拘泥与一小块天天,加班,出好成了新颖人不可预防的公务.而此时一款不妨随时随天娱乐的游戏成为了人们的需要.此次课程安排完毕的贪吃蛇小游戏,正是为了谦脚上述需要而安排出去的.贪吃蛇游戏虽小,却安排诸多的知识面.通过启垦贪吃蛇游戏系统,可使读者收端相识使用硬件工程的战那个收,技能战工具启垦硬件的历程,进一步掌握结构化,模块化的步调安排要领战步调,进一步掌握总体数据结构安排,模块区分要领,掌握局部变量,齐部变量,结构体,共用体,数组,指针,文献等数据结构的使用要领,掌握图形,声音,随机数等多种库函数的使用要领,教习动画,音乐,窗心,菜单,键盘等多项编程技能,进一步教会硬件调试,尝试,组拆等硬件尝试要领,为后绝课程的教习战将去本量硬件启垦挨下脆真的前提.1.2 安排的任务战需要的知识面1.2.1 课程安排主要完毕的任务1).通过编写“贪吃蛇游戏”步调,掌握结构化,模块块化步调安排的思维,培植办理本量问题的本领.2) 有共步播搁动画,声音效验.3) 安排佳数组元素与蛇,食物的对付应关系.4) 随机爆收食物.5) 有分数统计,排止榜,分数保存等功能.通过此次课程安排,期视使读者能更深进的明黑战掌握课程教教中的基础观念,培植读者应用基础技能办理本量问题的本领,进而进一步普及领会问题妥协决问题的本领.1.2.3本次课程安排需要掌握战使用如下的知识面:1) 数组的应用.2) 齐部变量的使用.3) 按键处理.4)结构体的应用.5)图形,音乐战动画的有关知识.6)随即函数的使用.7)文献的基础出支配.8) 结构化,模块化的安排要领.正在本次课程安排中需要完毕的任务有:包罗下令,齐部变量的定义战宏定义,函数声明等(50止),主控模块(MAIN函数,14止),动画,音乐播搁模块(DRAWSNOW函数,33止),画出游戏启初界里模块,简曲游戏历程模块,游戏中断处理模块.启垦中处事量约为215止源代码.二 .需要领会贪吃蛇游戏是个简朴的小游戏,能让游戏者的身心得到娱乐,进而不妨更佳天加进到教习或者处事核心.虽然目前市里上出去那百般百般的游戏版本,但是贪吃蛇那类的小游戏其商场仍旧相称大的,果为它玩法简朴易止,不管是脚机,仍旧小游戏机,皆能很成功的运止.对付于正在中闲碌的人,不可能耗费洪量时间正在娱乐上,庞大游戏是止短亨的,那样的小游戏刚刚佳迎合了他们的需要.要启垦贪吃蛇游戏步调,最先要领会改步调应真止哪些功能.对付贪吃蛇游戏步调的功能需要可形貌如下:步调运止后隐现动画,音乐,按ESC 键退出游戏界里后,左边有一个矩形区,中游戏天区,正在矩形区中有食物战贪食蛇,上圆有统计分数及关数隐现天区.蛇正在启关围墙利用绿色矩形表示,围墙里随机的出现一个食物,通过按键盘四个光标键统造蛇进与,下,安排四个目标移动,蛇头碰到食物,则食物被吃掉,蛇身体少一节,接着又出现食物,等待蛇去吃.食物用一个面表示,而且屡屡食物的位子皆是随机出现的.游戏中要使贪吃蛇尽大概的少,然而是不克不迭使贪吃蛇碰到四里的墙壁,而且蛇的身体不克不迭碰到所有,可则游戏中断.游戏中每吃掉一个食物要有积分,随着分数的减少可加进下一关,纵然速度会加快.游戏中断时,如果分数加进前5名则沉新排榜并保存.隐现排止榜.由于有关贪吃蛇战食物的数据较多,而且关系稀切,贪吃蛇及食物皆是定义结构体数据典型,那样定义便于支配与处理.2.2 支配要领三 总体安排决定贪吃蛇游戏体捆绑构,给出总体模块结构图,决定步调的主要函数及之间的调用关系,共时安排蛇与游戏者等的数据结构.3.1 模块区分本步调采与结构化步调安排的要领,依照自顶背下,逐步细化的要领对付要办理的问题举止逐层领会.最先画出顶层模块,即主控模块,之完毕对付下层模块的调用功能,即调用其余的功能模块;接着,按需要领会中的功能需要安排第一层模块,有音乐动画,图形启动,画主界里,游戏历程,中断处理,退出品级6个主要功能;接着,画出第二层模块.总体模块结构如图6-1所示.3.1.1. 主控模块. 3.1.2. 动画音乐模块 3.1.3. 画主界里模块 3.1.4. 游戏历程模块 3.1.5. 游戏中断处理模块 3.1.6. 读与记录模块 3.1.7. 结果排序模块 3.1.8. 写进文献模块 3.1.9. 排止榜模块 3.1.10. 退出3.2 总体数据结构安排安排思路:测序的关键正在于表示蛇的图形及蛇的移动.用一个小限造性圆块表示蛇的一节主 控 模 板 读与记录结果排序写进文献排止榜动画音乐图形启动退出中断处理 游戏历程画主界里身体,身体每少一节,减少一个矩形块,蛇头业用共样的一节小矩形圆块表示移动时必须从蛇不妨上背前爬止,档案下灵验目标键后,应先决定蛇头的位子,而后蛇的身体虽蛇头移动,图形的真止是从身体新位子启初画出蛇.那时,由于已浑屏的本果,本去的蛇的位子战新蛇的位子好一节蛇身,即瞅起去蛇多一节身体,所以将蛇的末尾一节用背景致覆盖.食物的出现与消得意识画矩形块战覆盖矩形块.为了便于明黑,定义二个结构体:食物与蛇.底下介绍贪吃蛇游戏步调的主要数据结构.3.2.1 食物与蛇的数据结构表示食物与蛇的矩形块安排为10*10个像素单位,食物的基础数据域为它所出现的位子,用X战Y坐标表示,则矩形块用函数RECTANGLE(X,Y,X+10,Y+10)或者RECTANGLE(X,Y,X+10,Y-10)不妨画出.由于屡屡只出现一个食物,所以设定YES表示是可需要出现食物.YES=1表示不食物或者食物已经被蛇吃掉,需要画出食物.搁置食物后,置YES=0.蛇的一节身体为一个矩形块,表示矩形块只需左上角面坐标(X,Y).由于正在游戏历程中蛇的身体不竭删少,需用数组存搁每节坐标,最大设定为N=200,NODE表示目前节数.DIRECTION是保存蛇的移动目标的变量,其值可为1、2、3、4之一,分别表示左、左、上、下的目标.LIFE是表示死命的变量,LIFE=0表示蛇活着,一朝LIFE=1,一朝LIFE=1,表示蛇死,中断游戏.#define N 200Struct Food{ int x;int y;Int yes;}food;Struct Snake{ int x[N];Int y[N];Int node;Int derection;Int life;}snake;3.2.2 排止榜中劣胜者的数据结构排止榜主要记录劣胜者的姓名战结果.为了存搁排止榜疑息,可定义如下的结构体典型,其中字符数组name成员存搁劣胜者的姓名,整型变量score成员存搁劣胜者的结果.Struct person{ char name[20];Int score;};3.2.3 其余齐部变量的定义Struct person per[5];Int score=0;Int gamespeed=400;3.2.4 标记常量的宏定义#define LEFT 0x4b00;#define RIGHT 0x4d00;#define DOWN 0x5000;#define UP 0x4800#define ESC 0x011b#define FILENAME四. 仔细安排根据总体安排的模块功能战结构,完毕所负担的步调模块的算法安排.给出每个模块的仔细的算法,算法分别用保守过程图战笔墨证明去形貌.4.1 主控模块main函数主函数是步调的主控模块.最先初初化图形系统,而后使用drawsnow函数播搁动画战声音,接着调用init函数初初化图形系统,之后调用drawk函数画出游戏启初画里,正在调用g ameplay函数,即启初了游戏的简曲历程,游戏中断后调用endplay函数举止游戏中断处理;从文献中读与记录疑息,排序,隐现排止榜疑息,末尾关关图形系统,中断步调.主控模块的过程图如图6-2所示.其中戴有二个横线的矩形框表示对付自定义函数的调用.4.2函数主界里便是一个启关的围墙,用二个循环语句分别正在火仄目标战笔曲目标输出连绝的宽度战下的均为10个像素单位的距止小圆块,围成启关图形表示围墙,为了醉目,树坐为浓青色,用函数setlinestyle设曲线型宽度为3个像素,树坐3个像素的围墙线,.末尾,正在界里的左上部输出游戏步调的版本疑息,正在左上部输出游戏结果(score)战关(level)的表头.4.3 游戏简曲历程gameplay函数该函数是游戏的核心部分.游戏简曲历程gameplay函数的大概算法过程图如图6-4所示.余下过程图正在下页4.3.1那24.3.21 0个4.3.3那里的易面是表示蛇的新位子并与消前一次的图形.采与的要领是屡屡移动的时间从末尾一节启初到第二节,将前一节的坐标值赋给后一节的坐标,移动后只消把末尾一节用背景致揩出即可,果为新位子0到n-1节仍旧要出目前画里上的.那里用一个for循环去决定蛇身的新坐标.4.3.4 吃到食物后的处理蛇吃到食物后,最先将食物揩除,即用背景致画出该食物,而后给蛇的节数加1,树坐需要食物标记,是游戏结果加10分,如果结果达到50分的倍数,则给关数加1,并加快游戏速度.4.3.5 有按键推断蛇的目标那是一个内嵌的嵌套的条件采用结构,根据安东上下安排键去设定蛇的移动目标.其中1=背左,2=背左,3=进与,4=背下.推断是还思量好异的目标键无效,比圆蛇正正在进与爬止,按下一键目标是无效的.4.4 游戏的中断处理木块ENDPLAY函数游戏中断时,该当用ENDPLAY函数举止游戏中断处理,其算法过程图如图6-5所示I 其次,推断游戏者的结果是可不妨上排止榜.如果不妨上榜,则画出浓蓝色矩形界里,正在界里中输进游戏者姓名,对付结果举止赋值,而后调用CompareScore 函数对付记录排序,并调用Writefiles 函数将记录写进排止榜助文献;如果不克不迭上榜,则间接正在游戏界里输出不克不迭上榜疑息.末尾,调用 pain_board 函数隐现排止榜疑息.函数void pain_board完毕排止榜的画造.五. 步调的调试与尝试调试与尝试硬件的目标便是创造并改正潜伏的过得.一个步调,必须通过认果然调试战尝试,才搞尽管缩小过得、包管步调谦脚功能、本能需要,达到最初的安排、使用央供,进而包管步调的启垦品量.仔细安排完毕后,便不妨用C谈话根据各个模块的算法去安排步调,每个模块皆要安排成一个自定义函数.几个模块不妨搁正在所有形成一个本函数步调文献,也不妨一个模块形成一个源步调文献.本步调安排佳后,输进到估计机中,并保存到磁盘上;而后对付每个源步调文献皆举止了独力编译战调试(简曲代码不妨参瞅步调浑单);并针对付分歧的模块步调安排尝试用例举止单元尝试;末尾,将几个分别启垦的模块组拆正在所有,产死一个完备的步调,举止集成尝试,进而创造并改正了步调步调中存留的一些潜躲的过得,并使步调的容错本领大大巩固.5.1 动画与音乐的共步播搁预期截止:①片头正在隐现动画得共时播搁音乐;②按任性键后加进游戏主界里;③加进游戏主界里后动画音乐共时停止.本量运止效验:谦脚①战②,不谦脚③,即加进游戏后仍旧播搁片头音乐.过得领会:步调中使用循环播搁动画,并正在其循环体中拔出收声函数以达到音乐战动画的共步.由于正在中断动画时不关关扬声器,所以加进游戏界里后仍旧收声.建改:正在动画播搁完后加一条“nosound();”语句将扬声器关关,问题得到办理. 建改后步调运止的本量效验与预期效验普遍.5.2 蛇的运止5.2.1 蛇碰到墙预期截止:蛇运止时如果碰到墙壁,则游戏中断.本量运效验:超出安排墙壁后步调中断,然而超出上头墙壁后仍旧运止,如图6-9所示.过得领会:过得步调段正在蛇运止中的条件推断语句中,其推断条件是:if(snake.x[0]<55|| snake.x[0]>595),即少了上、下二个目标的推断.建改:正在蛇的运止历程中增加二个逻辑表黑式,推断蛇是可闯到上下的围墙.代码:If( snake.x[0]<55|| snake.x[0]>595|| snake.y[0]<55|| snake.y[0]>455)建改后的步调运止截止与预期的截止普遍.5.2.2 蛇头闯到蛇身预期的截止:当蛇得头部与蛇身相碰时,游戏应核心断. 本量运止效验:蛇头碰到蛇身时,步调本去不末止.过得领会:正在蛇的运止推断的步调堕落,其代码如下Fori=3;i<snake.node;i++){ if(snake.x[i]=snake.x[0]&&snake.y[i]=snake.y[0]){snake.life=0;break;}}建改:将循环体中的snake.life=0改为snake.life=1;建改后的截止与预期截止普遍.5.3 末止循环通过对付各个模块的调试战单元尝试并建改了过得后,将各个模块组拆成一个系统,并举止集成尝试.正在集成的历程中创造了一些过得,比圆齐部变量沉复定义、函数沉复声明等,分别举止了改正.末尾连绝运止了5次,以便尝试该游戏步调的功能、本能是可达到了预期的目标,并根据所使用的简曲呆板对付蛇的爬止速度举止适合的安排.尝试真量包罗蛇的运止、分数、关数、排止榜及排序、文献保存、音乐动画等功能,情况均仄常.六. 论断通过2周的课程安排,正在启垦小组共共的齐力下,毕竟完毕了贪吃蛇游戏步调的启垦任务.该游戏步调真止了用目标键统造蛇正在围墙内爬止、随机爆收食物、统造蛇吃掉食物并加分、统造游戏中闯关的数目战蛇的运止速度、真时隐现得分战关数、中断时处理战隐现排止榜等功能.该游戏步调具备界里友佳、支配便当、统造准确战容错本领强等特性.那个贪吃蛇游戏还存留一些缺陷,还该当正在如下几个圆里加以矫正.1)加进游戏后,到蛇牺牲,只可玩一次便会退出步调.应加进多次游戏的统造本领.2)蛇的格式不好瞅,应将蛇头、蛇尾战蛇身进一步好化,使其更像真正在的蛇.3)当分数达到400分时,蛇的速度变得非常快,一下子便碰到围墙上了,应适合统造蛇的速度战关数,以便使游戏更具备吸引力.贪吃蛇游戏的编程训练思索数据结构:定义食物的坐标去统造它出现的位子,用一系列的函数时举止表示,比圆用函数rectangle去画出矩形,用life变量的值表示蛇的死命,用direction变量的值表示蛇移动的目标等,另有用数组去存搁蛇身各节的坐标,那些皆让咱们认识了对付数组的支配,别的还认识了百般函数的应用.贪吃蛇的安排有很多助闲,教习编写贪吃蛇的游戏对付掌握C谈话的知识有很大的助闲.通过编程试验,还能拓展思路,让咱们去觅找需要调用那些函数,何如普及步调的品量等. 要写出佳的步调,需要咱们有扎真的前提,那样逢到一些基础算法的时间便会游刃有余了.正在编程时咱们要有歉富的设念力,不要拘泥与牢固的思维办法,逢到问题的时侯要多念几种办理问题的规划.歉富的设念力是建坐正在歉富的知识前提上,所以咱们要通过多个道路去助闲自己建坐较歉富的知识结构.正在编程是咱们碰倒了很多的艰易,那便需要咱们多与他人接流.正在编程的历程中,咱们也创造有良佳的编程风格是格中要害的,起码正在时间效用上便体现了那一面.养成良佳的习惯,代码的缩进编排,变量的命名准则要末究脆持普遍,那些皆是普及咱们编程本领的重心.正在举止课程安排的历程中咱们也教到了许多别的物品.最先,咱们教会了合做,要以他人的视线瞅瞅问题,也许那样得到的会比各得意到的皆要多;其次,咱们教会了单干,单干是为了更佳天合做,单干才搞普及合做的效用;末尾,咱们教会了搏斗,咱们疑赖,通过四年的教习,咱们一定能写出更粗彩的步调,将去会描画出更粗彩的人死.正在那里,咱们要感动指挥课程安排的弛凤君教授,赋予咱们粗心的指挥.教授多次询问编写进程,并为咱们指面迷津,助闲咱们启拓钻研思路,粗心面拨、关切饱励.教授敷衍了事的处事做风,宽紧供真的做风,踩踩真真的粗神,不然而受尔以文,而且教尔搞人,给以末死受益无贫之讲.尔还要感动咱们启垦小组的其余共教,正在安排中他们给尔很大的助闲.正是由于咱们团结协做,才成功的完毕了课程安排任务.八.程序浑单/*贪吃蛇游戏步调浑单*/#include<stdio.h>#include<string.h>#include<time.h>#include<bios.h>#include<graphics.h>#include<conio.h>#include<stdlib.h>#include<dos.h>#define filename "c:\\person.dat" /*排止榜文献的文献齐名*/#define esc 0x011b /*esc键*/#define n 200 /*蛇的最大节数*/#define left 0x4b00 /*左移目标键*/#define right 0x4d00 /*左移搁背键*/#define down 0x5000 /*下移目标键*/#define up 0x4800 /*上移目标键*//*排止榜结构体*/struct person{int score; /*游戏者分数*/char name[20]; /*游戏者姓名*/}per[5];/*小蘑菇结构体*//*自定义的函数声明*/void drawmogu(); /*动画音乐函数*/void readfiles(); /*从文献中读与记录疑息*/void writefiles(struct person *) ; /*将记录写进文献中*/void initscorefiles(); /*初初化记录文献*/void comparescore(struct person); /*排止榜按分数举止排序*/void endplay(); /*游戏中断处理函数*/void paihb(); /*画造排止榜函数*//*输出欢迎词汇并播搁声音函数*/void pr(){ int s[15]={0,100,150,200,250,300,250,150,100,250,350};setcolor(change/10);/*改变欢迎词汇颜色*/settextstyle(0,0,4);outtextxy(20,200,"WELCOME TO OUR GAME");/*输出欢迎词汇*/sound(s[change/10]);/*使扬声器以括号内的频次收声*/}/*下雪的动画并共步播搁音乐函数*/void DrawSnow(){ int i;int sx[62];selinestyle(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;i<62;i++)sx[i]=(i+2)*10/*估计雪花位子的横坐标数组*//*以下的键控while循环统造播搁音乐战下雪动画*/while(!kbhit())/*如果已按键,真止循环体*/{ Pr();/*调用Pr函数输出欢迎词汇并播搁声音*/if(snownum!=100){snow[snownum].speed=2+random(5);i=random(62);snow[snownum].x=sx[i];/*与横坐标*/snow[snownum].y=10-random(100);/*与纵坐标*/}/*循环搁置snownum个雪花*/for(i=0;i<snownum;i++)putimage(snow[i].x,snow[i].y,save,COPY_PUT);delay(100);/*延缓100ms以便瞅到雪花*/cleardevice();/*浑屏*/Pr(); /*调用Pr函数输出欢迎词汇并播搁声音*/if(snownum !=100) snownum++;setfillstyle(SOLID_FILL,15);for(i=0;i<snownum;i++) /*循环画出snownum个雪花*/{ snow[i].y+=snow[i].speed;putimage(snow[i].x,snow[i].y,save,COPY_PUT);if(snow[i].y>500)snow[i].y=10-random(200);}change++;if(change==140) change=10;}nosound(); /*关关扬声器*/cleardevice();/*浑屏*/}/*图像系统初初化函数*/void init(void){ int gd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc3\\BGI");cleardevice(); /*浑屏*/}/*游戏启初界里,左上角坐标为(50,40),左下角坐标(610,460)的围墙*/ void drawk(void){int i;setcolor(BLUE);setlinestyle(SOLID_LINE,0,THICK_WIDTH); /*树坐线性*/for(i=50;i<=600;i+=10) /*用循环画围墙*/{setcolor(2*i+1);circle(i,40,5); /*画上边*/circle(i,451,5);circle(i,460,5); /*画下边*/}for(i=40;i<=450;i+=10){setcolor(2*i+1);circle(50,i,5); /*画左边*/circle(601,i,5);}for(i=40;i<=460;i+=10){setcolor(2*i+1);circle(41,i,5); /*画左边*/circle(610,i,5);}setcolor(LIGHTCYAN);setlinestyle(SOLID_LINE,0,THICK_WIDTH);outtextxy(20,5," GREEDY SNAKE GAMES ji 11_1"); /*输出版本*/ outtextxy(480,10,"score level "); /*输出此文本*/}/*玩游戏简曲历程*/void gameplay(void){food.yes=1; /*0表示苹果已经存留,1表示需要出现新苹果*/snake.life=0; /*蛇活着*/int level=1; /*记录游戏品级*/char buffer[10]; /*字符数组用于变换整形数据*/randomize(); /*树坐随机数的种子数*/snake.direction=1; /*目标背左*/snake.x[0]=110;snake.y[0]=100; /*蛇头坐标初值*/snake.x[1]=100;snake.y[1]=100; /*蛇身1节坐标初值*/snake.x[2]=90;snake.y[2]=100; /*蛇身2节坐标初值*/snake.node=3; /*蛇节数初值*/while(1) /*玩游戏死循环,按esc键或者蛇死时中断*/{ while(!kbhit()) /*正在不按键的情况下,蛇自己移动身体*/{if(food.yes==1) /*需要出现新苹果*/{food.x=rand()%400+60; /*正在墙内随机爆收苹果横坐标*/food.y=rand()%350+60; /*正在墙内随机爆收苹果纵坐标*//*真物随机爆收后必须让苹果不妨正在整格上,那样才搞吃到*/ while(food.x%10!=0) food.x++;while(food.y%10!=0) food.y++;food.yes=0; /*画里上有苹果了*/}if(food.yes==0) /*画里上有苹果便要画出去*/{setcolor(GREEN);setfillstyle(SOLID_FILL,GREEN);circle(food.x,food.y,5);fillellipse(food.x,food.y,5,5);}setfillstyle(1,BLUE);bar(475,18,590,35); /*画出隐现分数及关数蓝色矩形条*/setcolor(WHITE);itoa(score,buffer,10); /*将整形数据分数变换成字符串*/outtextxy(480,20,buffer); /*输出分数*/itoa(level,buffer,10); /*将整形数据关数变换成字符串*/outtextxy(560,20,buffer); /*输出关数*//*循环使蛇的每一节往前移动,那是贪吃蛇的“关键算法”*/for(i=snake.node-1;i>0;i--){snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}/*1、2、3、4表示左、左、上、下四个目标,通过那个推断去移动蛇头*/ switch(snake.direction){case 1:snake.x[0]+=10;break;case 2:snake.x[0]-=10;break;case 3:snake.y[0]-=10;break;case 4:snake.y[0]+=10;break;}/*推断蛇是可碰到墙*/if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<45||snake.y[0]>445){snake.life=1; /*置蛇死标记*/break;}/*从蛇的第四节启初推断是可碰到自己,*/for(i=3;i<snake.node;i++){ if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]){snake.life=1; /*置蛇死标记*/break;}}if(snake.life==1) /*以上二种推断以去,如果蛇死便跳出内循环*/break; /*跳出while(!kbhit)*/if(snake.x[0]==food.x&&snake.y[0]==food.y) /*吃到苹果以去*/{setcolor(BLACK); /*把画里上的苹果揩除*/circle(food.x,food.y,5);snake.node++; /*蛇的身体少一节*/food.yes=1; /*画里上需要出现新的苹果*/score+=10; /*出吃一个苹果减少10分*/if(score%50==0) /*吃够5个苹果加进下一关*/{level+=1; /*关数加1*/gamespeed-=60; /*统造速度的值缩小60,以便加赶快度*/}}setcolor(RED); /*画出红色蛇的循环*/setfillstyle(SOLID_FILL,RED); /*用圆画出红色蛇头*/fillellipse(snake.x[0],snake.y[0],5,5);setcolor(GREEN);setfillstyle(SOLID_LINE,GREEN);circle(snake.x[0],snake.y[0],1); /*对付蛇头弥补绿色小圆动做眼睛*/setcolor(RED);setfillstyle(SOLID_FILL,BLUE);for(i=1;i<snake.node;i++) /*用圆画出红色蛇身*/{setcolor(RED);setfillstyle(SOLID_FILL,BLUE);fillellipse(snake.x[i],snake.y[i],5,5); /*对付每节蛇身用蓝色弥补*/setcolor(CYAN);circle(snake.x[i],snake.y[i],1); /*用青色小圆画正在每节蛇身上*/}delay(gamespeed); /*延缓gamespeed毫秒,以便统造蛇的爬止速度*/setcolor(BLACK); /*用背景致乌色去除蛇的末尾一节*/circle(snake.x[snake.node-1],snake.y[snake.node-1],5) ;setfillstyle(SOLID_FILL,BLACK);fillellipse(snake.x[snake.node-1],snake.y[snake.node-1],5,5);}if(snake.life==1) break; /*如果蛇死便跳出循环*/key=bioskey(0); /*接支按键*/if(key==esc) break; /*按esc键退出*//*推断是可往好异的目标疏通*/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 readfiles(){FILE * fpread;/*如果文献不存留,则创造1个空文献,可则挨启该文献*/if((fpread=fopen(filename,"ab+"))==NULL){printf("cant't open the file person.dat! ");exit(0);}if(fgetc(fpread)==EOF) /*如果文献真量为空*/initscorefiles(); /*调用函数举止记录初初化处事*/rewind(fpread); /*沉新复位文献位子指针*/fread(per,sizeof(struct person),5,fpread);fclose(fpread); /*关关排止榜文献*/}/*写进文献支配函数*/void writefiles(struct person *tmp){FILE * fpwrite;/*以读写办法挨启文献,文献内本有的数据将被浑空*/if((fpwrite=fopen(filename,"wb+"))==NULL){printf("cant't open the file person.dat! ");exit(0);}fwrite(tmp,sizeof(struct person),5,fpwrite);fclose(fpwrite);}/*初初化记录函数*/void initscorefiles(){int i;struct person a[5];for(i=0;i<5;i++){a[i].score=0; /*5人的分数为0*/strcpy(a[i].name,"nobody"); /*5人的名为nobody*/}writefiles(a); /*调用记录写进函数*/}/*排序函数,如果玩家分数超出最矮记录,则将玩家分数拔出到符合的位子,共时简略本先的最矮记录 */void comparescore(struct person des)。
C语言课程设计报告(贪吃蛇)

C语言课程设计报告(项目:贪吃蛇)学号:姓名:课程设计题目:贪吃蛇游戏专业班级:核工程与核技术4班报告人姓名:学号:同组组长:同组其他成员:课程教师:实验地点:95101实验室完成起止日期:2011年3月7日至2011年3 月15日一、课程设计概述(目的、任务、开发环境、参考资料)课程目的:1.熟悉二维数组的应用2.图形库文件中图形函数的使用3.通过游戏程序增加编程兴趣,提高编程水平课程任务:1.数组元素为结构体的数组应用2.全局变量应用3.按键处理4.数组元素与蛇食物对应关系5.图形方式开发环境:turbo C参考资料:《C语言课程设计案例精编》郭翠英等编著中国水利水电出版社二、项目的可行性研究项目流程图三、项目设计的基本原理和采用的主要方法与技术1.项目流程图2.graphics.h库函数中的矩形函数rectangle()等图形函数的应用3.二维数组的应用4.按键控制5.全局变量四、本人实现项目的过程与步骤1.画出项目流程图(如上图)2.写出主函数的整个运行过程3.整理函数运行过程中所需要的函数及定义如:(1).矩形图形函数rectangle()(2).定义蛇和实物的二维数组结构体struct Snake{int x[N]; int y[N]; int node; int direction;int life;}snake;(3).按键定义#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b4.定义各函数,分配功能void Init(void);图形驱动void Close(void);图形结束void DrawK(void);开始画面void GameOver(void);游戏结束void GamePlay(void);游戏过程void PrScore(void);输出成绩5.各函数的编辑开始画面函数(画围墙)游戏过程函数(蛇移动的算法蛇吃食物的算法按键算法等)游戏结束及成绩输出函数6.定义与各函数的整合嵌入7.编译调试8.对程序的扩展功能的调整9.完成实验报告五、个人遇到的困难与获得的主要成果(一)遇到的主要主要困难1.程序结构的理解由于长时间对C语言与数据结构没有接触,使我们对这些有一些相对陌生,主要是二维数组的引用以及循环的控制方面,如:(1) for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}(2)for(i=3;i<snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/ {if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) {GameOver();/*显示失败*/snake.life=1;break;}}2.graphics.h图形库函数的陌生第一次接触graphics.h库函数,对其一无所知通过查阅资料找到graphics.h库函数中几个关键函数的功能及用法。
c语言贪吃蛇课程设计

c语言贪吃蛇课程设计一、教学目标本课程旨在通过学习C语言实现贪吃蛇游戏,让学生掌握C语言编程的基本技能,培养学生的逻辑思维能力和问题解决能力。
具体的教学目标如下:1.理解C语言的基本语法和数据类型。
2.掌握C语言的运算符和表达式。
3.学习C语言的控制结构,包括条件语句和循环语句。
4.了解C语言的函数和数组。
5.能够使用C语言编写简单的程序。
6.能够使用C语言实现贪吃蛇游戏的基本功能,包括蛇的移动、食物的生成和 collision检测。
7.能够优化代码,提高游戏的性能和可读性。
情感态度价值观目标:1.培养学生的团队合作意识和沟通能力,通过小组合作完成游戏项目。
2.培养学生的创新思维和问题解决能力,鼓励学生进行游戏的创意设计和优化。
3.培养学生的学习兴趣和自信心,通过完成游戏项目感受到编程的乐趣和成就感。
二、教学内容根据课程目标,本课程的教学内容主要包括C语言的基本语法和数据类型、运算符和表达式、控制结构、函数和数组。
具体的教学大纲如下:1.第一章:C语言概述•C语言的发展历史和特点•C语言的基本语法和结构2.第二章:数据类型和运算符•基本数据类型和变量•运算符和表达式3.第三章:控制结构4.第四章:函数和数组•函数的定义和调用•一维数组和多维数组5.第五章:贪吃蛇游戏实现•蛇的移动和食物的生成•collision检测和游戏结束条件•游戏界面的设计和美化三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法。
1.讲授法:通过教师的讲解和演示,向学生传授C语言的基本语法和编程技巧。
2.讨论法:通过小组讨论和分享,培养学生的团队合作意识和沟通能力。
3.案例分析法:通过分析具体的贪吃蛇游戏案例,引导学生思考和解决问题。
4.实验法:通过编写代码和调试程序,培养学生的动手能力和问题解决能力。
四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:1.教材:《C语言程序设计》2.参考书:《C语言编程实例解析》3.多媒体资料:PPT课件、视频教程4.实验设备:计算机、编程环境(如Visual Studio、Code::Blocks等)通过以上教学资源的使用,将丰富学生的学习体验,提高学生的学习效果。
c语言贪吃蛇小游戏程序课程设计

学生课程设计报告一、课程设计内容贪吃蛇小游戏程序设计(贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中身体交叉蛇头撞倒自己身体则游戏结束。
)二、技术路线使用VC++6.0作为开发环境,采用控制台的形式完成整个游戏的开发,没有用到MFC。
加入了pcc32.h的头文件及库文件,用于对控制台打印效果的控制。
同时也加入了PlaySound()函数,实现了对菜单选择,游戏开始,游戏结束的音效控制。
游戏栏和输出栏的同时打印,数据的更新打印效果,没有采用双线程的方法实现。
接收用户键盘输入信息,实现游戏暂停,重新开始,菜单选择和进入菜单。
三、设计与实现1.游戏基本功能:游戏有开始菜单界面,并有开始游戏,游戏帮助,关于游戏,退出游戏四个选项游戏初始化后,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个方向键控制蛇移动,蛇在移动过程中撞到墙壁将不会死亡,而是穿过围墙继续行进,但是如果蛇身体交叉蛇头撞到自己的身体,则游戏结束。
同时,游戏过程中可暂停游戏,并有积分系统,且积分每满一定值,蛇的运行速度也会逐步增加。
2.函数定义和声明(1)头文件#include<iostream>#include<windows.h>#include<conio.h>#include<time.h>#include<stdlib.h>#include "mmsystem.h" #pragma comment (lib,"winmm.lib")#include"pcc32.h"#pragma comment(lib, "pcc32_vc6.lib") using namespace std; #define UP 72//定义上下左右常量#define DOWN 80#define LEFT 75#define RIGHT 77#define ESC 27#define SPACE 32//空格#define ENTER 13//回车(2)函数声明void GamePrint();//游戏开始画面函数void Gameinit();//游戏初始化函数void Sweep_Screem();//清屏函数void Gotoxy(int , int); //光标移动函数void Hid_Cursor();//光标隐藏函数void Snake_Move();//蛇运动函数int Create_Food();//食物产生函数void Pwall();//画墙函数void Key();//键盘操作和处理函数void Hit_Wall();//判断是否撞墙void Eat_Itself();//判断是否咬到自己void Whether_Eat();//判断蛇是否吃到食物void GameRun();//游戏运行函数void SurFace();//开始菜单界面void GameOver(); //游戏结束判断函数void Pause();//游戏暂停函数void MyCount1();//统计边栏,用来做提示void MyCount2();//统计边栏,用来做一些统计void Menu( int );//开始界面void Inti_Data();//初始化数据(3)变量声明int X, Y;//食物坐标int Map[79][24]={{0}};//地图尺寸,其实有食物记为1int over = 0;//用来标记游戏结束int score = 0;//记录分数int speed = 130;//记录速度int ColoArray[15]={15,1,2,3,4,5,6,7,8,9,10,11,12,13,14} ;//自己定义的用来控制颜色的数组int length = 3;//初始化蛇的长度为3int Key_Menu;//开始菜单界面用的零时按键3.主函数int main()int main() //主函数{START:Inti_Data();fixConsoleSize(18,15);Hid_Cursor();SurFace();PlaySound(TEXT("m22.wav"), NULL, SND_FILENAME | SND_ASYNC );fixConsoleSize(105,25);GamePrint();Gameinit();GameRun();while(over) //如果游戏结束了,是否重新开始。
贪食蛇c语言课程设计

贪食蛇c语言课程设计一、课程目标知识目标:1. 让学生掌握C语言的基本语法,包括变量声明、数据类型、运算符、控制语句等。
2. 帮助学生理解贪食蛇游戏的逻辑和规则,掌握游戏的编程实现。
3. 使学生了解如何在C语言中实现数组和链表,以及它们在贪食蛇游戏中的应用。
技能目标:1. 培养学生运用C语言进行问题分析和程序设计的能力。
2. 培养学生通过编写代码实现贪食蛇游戏,提高编程实践能力。
3. 培养学生具备调试和优化程序的能力,提高程序性能。
情感态度价值观目标:1. 激发学生对编程的兴趣和热情,培养良好的编程习惯。
2. 培养学生面对问题积极思考、主动探究的精神,增强解决问题的自信心。
3. 培养学生团队协作精神,提高沟通与表达能力。
分析课程性质、学生特点和教学要求,本课程目标将分解为以下具体学习成果:1. 学生能够独立编写C语言程序,实现贪食蛇游戏的基本功能。
2. 学生能够运用数组和链表解决贪食蛇游戏中遇到的问题。
3. 学生能够通过编程实践,掌握C语言编程技巧,提高编程能力。
4. 学生在课程学习中,形成积极向上的学习态度,乐于分享和帮助他人。
二、教学内容1. C语言基础回顾:变量、数据类型、运算符、控制语句(条件语句、循环语句)。
2. 数组的使用:一维数组、二维数组,数组在贪食蛇游戏中的应用。
3. 链表原理与实现:单向链表、双向链表,链表在贪食蛇游戏中的运用。
4. 函数定义与调用:编写自定义函数,实现游戏模块化设计。
5. 编程实现贪食蛇游戏:- 游戏逻辑设计:食物、墙壁、蛇的移动、增长和死亡判断。
- 界面设计:控制台输出,方向键控制。
- 程序优化:减少内存消耗,提高程序运行效率。
6. 调试与测试:程序调试技巧,编写测试用例,确保游戏功能完善。
教学内容安排和进度:第一周:C语言基础回顾,数组的使用。
第二周:链表原理与实现,函数定义与调用。
第三周:贪食蛇游戏逻辑设计,界面设计。
第四周:程序优化,调试与测试。
教材章节关联:《C程序设计》第一章至第四章:C语言基础语法。
超简单贪吃蛇c语言代码编写

超简单贪吃蛇c语言代码编写贪吃蛇其实就是实现以下几步——1:蛇的运动(通过“画头擦尾”来达到蛇移动的视觉效果)2:生成食物3:蛇吃食物(实现“画头不擦尾”)4:游戏结束判断(也就是蛇除了食物,其余东西都不能碰)#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<conio.h>#include<time.h>#define width 60#define hight 25#define SNAKESIZE 200//蛇身的最长长度int key=72;//初始化蛇的运动方向,向上int changeflag=1;//用来标识是否生成食物,1表示蛇还没吃到食物,0表示吃到食物int speed=0;//时间延迟struct {int len;//用来记录蛇身每个方块的坐标int x[SNAKESIZE];int y[SNAKESIZE];int speed;}snake;struct{int x;int y;}food;void gotoxy(int x,int y)//调用Windows的API函数,可以在控制台的指定位置直接操作,这里可暂时不用深究{COORD coord;coord.X = x;coord.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); }//■○void drawmap(){//打印图框for (int _y = 0; _y < hight; _y++){for (int x = 0; x < width; x+=2){if (x == 0 || _y == 0 || _y == hight - 1 || x == width - 2){gotoxy(x, _y);printf("■");}}}//打印蛇头snake.len=3;snake.x[0]=width/2;snake.y[0]=hight/2;gotoxy(snake.x[0],snake.y[0]);printf("■");//打印蛇身for(int i=1;i<snake.len;i++){snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1]+1;gotoxy(snake.x[i],snake.y[i]);printf("■");}//初始化食物的位置food.x=20;food.y=20;gotoxy(food.x,food.y);printf("○");}/**控制台按键所代表的数字*“↑”:72*“↓”:80*“←”:75*“→”:77*/void snake_move()//按键处理函数{int history_key=key;if (_kbhit()){fflush(stdin);key = _getch();key = _getch();}if(changeflag==1)//还没吃到食物,把尾巴擦掉{gotoxy(snake.x[snake.len-1],snake.y[snake.len-1]);printf(" ");}for(int i=snake.len-1;i>0;i--){snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}if(history_key==72&&key==80)key=72;if(history_key==80&&key==72)key=80;if(history_key==75&&key==77)key=75;if(history_key==77&&key==75)key=77;switch(key){case 72:snake.y[0]--;break;case 75:snake.x[0]-= 2;break;case 77:snake.x[0]+= 2;break;case 80:snake.y[0]++;break;}gotoxy(snake.x[0],snake.y[0]);printf("■");gotoxy(0,0);changeflag=1;}void creatfood(){if(snake.x[0] == food.x && snake.y[0] == food.y)//只有蛇吃到食物,才能生成新食物{changeflag=0;snake.len++;if(speed<=100)speed+=10;while(1){srand((unsigned int) time(NULL));food.x=rand()%(width-6)+2;//限定食物的x范围不超出围墙,但不能保证food.x 为偶数food.y=rand()%(hight-2)+1;for(int i=0;i<snake.len;i++){if(food.x==snake.x[i]&&food.y==snake.y[i])//如果产生的食物与蛇身重合则退出break;}if(food.x%2==0)break;//符合要求,退出循环}gotoxy(food.x,food.y);printf("○");}}bool Gameover(){//碰到围墙,OVERif(snake.x[0]==0||snake.x[0]==width-2)return false;if(snake.y[0]==0||snake.y[0]==hight-1) return false;//蛇身达到最长,被迫OVERif(snake.len==SNAKESIZE)return false;//头碰到蛇身,OVERfor(int i=1;i<snake.len;i++){if(snake.x[0]==snake.x[i]&&snake.y[0]==snake.y[i])return false;}return true;}int main(){system("mode con cols=60 lines=27");drawmap();while(Gameover()){snake_move();creatfood();Sleep(350-speed);//蛇的移动速度}return 0;}。
贪吃蛇游戏程序的设计说明

测控技术与仪器专业课程设计题单班级0982011 学生某某课程名称计算机课程设计课题贪吃蛇游戏程序设计设计要求 1.学习游戏设计有关知识。
2.设计贪吃蛇游戏程序。
3.调试并修改程序。
4.完成课程设计论文。
课题发给日期2011年6月25日课程设计完成日期2011年7月09日指导教师余某某评语:贪吃蛇游戏学生:某某班级:0882011指导老师:余某某摘要:编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙,在围墙随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。
作为一个完整的程序,必须考虑人机交流与用户体验。
游戏的界面不能太丑,更不能连个简单的界面都没有。
游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。
游戏的美观是一方面,游戏的在素质是另一方面。
一个游戏的优劣,最终由玩家决定。
在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。
关键词:贪吃蛇流程图c语言源程序目录1 前言 (1)2 课设容 (3)2.1课设目的 (3)2.2设计功能 (3)2.3结构设计 (7)3结论 (11)参考文献 (15)附录A (16)1 前言C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。
作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。
制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。
(完整版)基于C语言的贪吃蛇游戏开发与设计毕业论文

毕业设计说明书(论文)题目:基于C语言的贪吃蛇游戏开发与设计毕业设计说明书(论文)中文摘要毕业设计说明书(论文)外文摘要目录前言 (1)第一章概述………………………………………………………………………41.1中国手机游戏产业现状 (4)1.2中国手机游戏的产业局势及其种类的多元化 (5)1.3中国手机游戏的未来展望 (7)第二章开发工具的简介 (9)2.1 Visual C++6.0简介 (9)2.2 Visual C++6.0安装 (10)2.3 Visual C++ 6.0开发过程 (12)第三章需求分析 (13)3.1可行性分析 (13)3.2 功能性分析 (13)第四章概要设计 (16)4.1功能介绍 (16)4.2概要设计图 (16)第五章详细设计 (18)5.1程序设计分析 (18)5.2主要函数 (19)5.3主要代码 (19)5.4其他函数代码 (30)第六章运行与测试 (35)6.1 运行程序 (35)6.2程序的调试与测试 (37)第七章结论 (40)致谢…………………………………………………………………………………42参考文献 (43)附录A (44)前言C语言是目前世界上流行、使用最广泛的高级程序设计语言。
C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。
C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。
常用的编译软件有Microsoft Visual C++,Borland C++,WatcomC++ ,Borland C++, Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++, Lccwin32 C Compiler 3.1,Microsoft C,High C,等等......C语言的发展历史C语言的发展颇为有趣。
c贪吃蛇程序课程设计

c 贪吃蛇程序课程设计一、课程目标知识目标:1. 让学生理解贪吃蛇游戏的原理和基本算法。
2. 使学生掌握运用编程语言(如Python)编写简单的贪吃蛇程序。
3. 帮助学生掌握程序中的循环、条件判断和变量等基本概念。
技能目标:1. 培养学生运用编程解决问题的能力,提高逻辑思维和动手实践能力。
2. 培养学生团队合作意识,学会与他人共同分析问题、解决问题。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养主动探索和创新的意识。
2. 培养学生面对困难时勇于尝试、不断调整心态,形成积极向上的学习态度。
课程性质:本课程为信息技术课程,结合实际操作,注重培养学生的动手能力和逻辑思维能力。
学生特点:六年级学生具备一定的计算机操作能力,对编程有一定的好奇心,但注意力容易分散,需要结合实际案例激发学习兴趣。
教学要求:通过讲解、演示、实践相结合的方式,让学生在掌握基本知识的同时,提高编程实践能力。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 理论知识:- 简介贪吃蛇游戏的起源和发展。
- 讲解贪吃蛇程序的基本原理,包括游戏规则、程序结构等。
- 介绍编程语言(如Python)的基本语法和编程环境。
2. 实践操作:- 编写简单的贪吃蛇程序,实现蛇的移动、食物的生成等功能。
- 学习使用循环、条件判断和变量等编程元素,优化贪吃蛇程序。
- 引导学生通过团队协作,共同完成贪吃蛇程序的设计与调试。
3. 教学大纲:- 第一课时:介绍贪吃蛇游戏及编程语言,让学生了解课程内容。
- 第二课时:讲解贪吃蛇程序的基本原理,引导学生学习编程语法。
- 第三课时:实践编写贪吃蛇程序,指导学生掌握基本操作。
- 第四课时:优化贪吃蛇程序,提高学生编程技能和团队协作能力。
4. 教材章节:- 《信息技术》六年级上册:第三章 计算机编程,第三节 常用编程语言。
教学内容安排和进度:本课程共4课时,每课时45分钟。
第一、二课时为理论讲解,第三、四课时为实践操作。
c贪吃蛇课程设计

c 贪吃蛇课程设计一、教学目标本课程旨在通过学习贪吃蛇的基本概念和编程技巧,使学生掌握以下知识目标:1. 理解贪吃蛇游戏的规则和基本操作;2. 掌握使用C语言编写简单的贪吃蛇游戏程序;3. 了解贪吃蛇游戏的算法和数据结构。
技能目标方面,学生需要能够:1. 使用C语言编写简单的贪吃蛇游戏程序;2.分析和解决贪吃蛇游戏编程过程中遇到的问题;3. 调试和优化贪吃蛇游戏程序。
情感态度价值观目标方面,学生应该:1. 培养对编程和游戏的兴趣,提高主动学习和探索的精神;2. 培养团队合作意识,学会与人合作解决问题;3. 培养良好的编程习惯,注重编程规范和代码的可读性。
二、教学内容本课程的教学内容主要包括以下几个部分:1. 贪吃蛇游戏的基本概念和规则;2. C语言的基本语法和编程技巧;3. 贪吃蛇游戏的算法和数据结构;4. 贪吃蛇游戏的编程实践。
具体的教学大纲安排如下:第1课时:介绍贪吃蛇游戏的基本概念和规则;第2课时:学习C语言的基本语法,掌握基本的输入输出操作;第3课时:学习C语言的条件语句和循环语句,掌握基本的控制流程;第4课时:学习C语言的数组和指针,掌握基本的数据管理和操作;第5课时:学习贪吃蛇游戏的算法和数据结构;第6课时:进行贪吃蛇游戏的编程实践,完成一个简单的贪吃蛇游戏程序。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括:1. 讲授法:讲解贪吃蛇游戏的基本概念和规则,C语言的基本语法和编程技巧;2. 讨论法:引导学生进行小组讨论,共同解决问题;3. 案例分析法:分析典型的贪吃蛇游戏程序,引导学生理解和掌握编程技巧;4. 实验法:让学生动手编写贪吃蛇游戏程序,提高实践能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1. 教材:《C语言程序设计》;2. 参考书:《C语言编程实例教程》;3. 多媒体资料:贪吃蛇游戏的视频教程和演示程序;4. 实验设备:计算机和编程环境。
贪吃蛇设计说明书

贪吃蛇设计说明书摘要本贪吃蛇(Snake)游戏仿照以往的贪吃蛇游戏,尽管在图形界面方面存在一定的缺陷,但能够基本实现游戏的功能。
本游戏分为10个级别,玩家通过方向键对蛇的运动进行控制,如果蛇吃到食物,得分加10分,并且到一定的程度级别会上升。
此外,用户可以根据需要选择速度、界面以及播放的音乐,并且在游戏中保存了以往前三名玩家的记录,供玩家参考。
关键字:主页面,快捷键,方向键,解决方案目录第一章:ATM系统概述1.1系统的主要任务1.2 基本要求1.3 主要功能1.4 设计方法及涉及知识点1.4.1 设计方法1.4.2 涉及知识点1.5 系统开发的目的第二章:系统分析2.1分析问题和定义类,给出类的定义和联系,2.2系统开发平台的选择2.3程序设计语言的选择2.4 操作平台第三章:总体设计3.1系统的结构图(总图)3.2函数模块说明(每个函数的原型、功能说明)3.3系统运行界面截图第四章:系统评价4.1系统的特点4.2系统的缺点4.3将来可能提出的要求第五章:小结第六章:参考文献第一章 ATM系统概述1.系统的主要任务本游戏主要提供给玩家进行娱乐。
2.基本要求1.要求利用面向对象的方法以及C#程序设计语言来完成该系统的设计;2.要求在设计的过程中,建立清晰的类的层次;3.在系统中建立相关的类,每个类中都要有各自的属性和方法;4.程序运行结果正确,操作方面,界面美观,逻辑层次清楚,程序结构合理,文档规范清晰。
3.主要功能该系统具备以下功能:控制蛇运动方向:用键盘上的↑、↓、←、→控制蛇的运动方向。
当蛇向一个方向运动时,它的反向键被锁定。
不能通过连续按住某个方向键而加快蛇的运动。
若在游戏中,蛇头碰了墙或是自己的身体,则游戏结束。
蛇吃食物:蛇每吃一个食物增长一节,并且得分加10分,总共为100节。
蛇每增长10节游戏上升一个级别。
游戏结束:如果在游戏过程中,蛇头碰墙或是碰到了自己的身体,则游戏结束。
如果在游戏过程中,用户选择退出游戏,则提醒用户游戏正在进行,是否要退出。
贪吃蛇c课程设计

贪吃蛇c 课程设计一、教学目标本课程旨在让学生了解并掌握“贪吃蛇”游戏的编程原理和技巧,培养学生的计算机编程兴趣和能力。
具体目标如下:知识目标:使学生了解“贪吃蛇”游戏的基本原理和编程方法,包括游戏循环、事件处理、图形绘制等;理解并掌握面向对象编程的基本概念,如类、对象、属性、方法等。
技能目标:培养学生运用Python编程语言编写“贪吃蛇”游戏的能力,提高学生的编程实践能力;培养学生运用编程思维解决实际问题的能力,提高学生的创新意识和动手能力。
情感态度价值观目标:培养学生对计算机编程的兴趣,激发学生主动探索科学知识的欲望;培养学生团队合作精神,学会在实践中互相学习、互相帮助,培养良好的职业道德和行为规范。
二、教学内容本课程的教学内容主要包括以下几个部分:1.Python编程基础:介绍Python编程语言的基本语法和操作,如变量、数据类型、运算符、控制结构等。
2.面向对象编程:讲解类、对象、属性、方法等基本概念,并通过实例让学生掌握面向对象编程的方法。
3.“贪吃蛇”游戏原理:介绍游戏循环、事件处理、图形绘制等基本原理,使学生了解游戏开发的本质。
4.“贪吃蛇”游戏编程实践:引导学生动手编写游戏代码,让学生在实践中掌握编程技巧和方法。
5.游戏优化与调试:讲解如何对游戏进行优化和调试,提高游戏的性能和可玩性。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:用于讲解编程基础知识,使学生掌握Python编程语言的基本语法和操作。
2.讨论法:针对游戏编程中的问题,学生进行讨论,培养学生的团队合作精神和解决问题的能力。
3.案例分析法:分析经典游戏案例,使学生了解游戏开发的原理和方法。
4.实验法:引导学生动手编写游戏代码,培养学生的实践能力和创新意识。
四、教学资源为了支持本课程的教学内容和教学方法,我们将准备以下教学资源:1.教材:《Python编程:从入门到实践》等,用于引导学生学习编程基础知识。
C语言程序设计课程设计(论文)-贪吃蛇

C语言程序设计课程设计(论文)-贪吃蛇------------ 大学C语言程序设计课程设计(论文)题目: 贪吃蛇院(系):专业班级:学号:学生姓名:指导教师:教师职称:起止时间:课程设计(报告)任务及评语院(系): 教研室:学号学生姓名专业班级程序设计(报告)贪吃蛇题目程序设计的任务与要求:(1)掌握C语言编程的基础知识。
(2)较熟练地编写C语言应用程序。
(3)了解C语言的常用标准函数、编程技巧、异常处理。
程序(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。
设(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能计)力都有一个很大的提高。
报告(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素) 质的提高起一个积极的推动作用。
任务课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。
正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。
指导教师评语及成绩成绩: 指导教师签字:2011年 1 月 4 日辽宁工业大学 C 语言课程设计说明书(论文)目录第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设计思路 ......................................................22.2.2数据结构设计及用法说明 ........................................32.2.4各模块的功能及程序说明 ........................................72.2.5程序结果 ......................................................82.3程序源代码及注释 (10)第3章 C语言课程设计总结 .................................................. 17 参考资料.. .................................................................20辽宁工业大学 C 语言课程设计说明书(论文)第1章 C语言课程设计的目的与要求 1.1 C语言课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。
《C语言程序设计(贪吃色)》课程设计任务书 -1

《C语言程序设计(贪吃蛇)》课程设计任务书贪吃蛇任务书一、设计目的通过此次课程设计将课堂上学到的内容与应用结合在一起,掌握C语言程序设计与数据的存储机制,并极大地促进对C程序设计的认识和掌握,更加系统的学习和了解如何从整体上设计和实现一个程序。
二、功能介绍简易贪吃蛇:(1)实现游戏界面边框设计与分数显示(2)实现上下左右按键控制贪吃蛇的运动(3)实现食物的自动生成,并位置随机(在此位置有所限制)(4)实现蛇头碰撞蛇身或边框死亡的功能三、概要设计3.1 设计方法说明该程序设置了两个int类型一维数组,共同用于存储蛇的坐标,设置了一个int类型变量用于存储蛇身长度。
每当吃到食物时就将长度计数器加1,此时,食物变成了蛇头,原先的蛇头变成了蛇身,食物又随机出现在了边框内的任意位置上(注:该位置无其它物体),在一旁的分数显示上要同步更新。
当蛇头碰撞到蛇身或者边框时,游戏结束,在此可选择重新游戏,将初始化游戏。
四、详细设计4.1贪吃蛇功能图碰撞结束4.2界面设计简易贪吃蛇注:Q为食物,o为蛇头部,x为蛇身4.3关键代码设计#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <conio.h>void printgamemap(char gm[20][20],int len,int x[],int y[],int fcount,int fx,int fy);void movesnake(char s[],char gm[20][20],int *len,int x[],int y[],int *fcount,int *fx,int *fy,int *score);void addfruit(int *fcount,int *fx,int *fy,int len,int x[],int y[]);int gameover(int len,int x[],int y[],int score);int main(void){RE: char gm[20][20]; //定义地图,RE: goto函数标志,当游戏结束后选择重新开始游戏则跳转到此处int x[400]={0},y[400]={0}; //定义蛇的坐标int len=0; //定义蛇的长度int fx=0,fy=0; //定义水果的坐标int fcount=0; //定义水果的数量int score=0; //获得的分数int re = 0; //重新开始游戏标志srand(time(NULL)); //随机数种子x[len]=9; //蛇头的x坐标y[len]=9; //蛇头的y坐标len++;x[len]=9; //蛇身的坐标y[len]=8;len++;//调用添加水果自定义函数打印出第一个水果addfruit(&fcount,&fx,&fy,len,x,y);//调用地图自定义函数打印出游戏地图printgamemap(gm,len,x,y,fcount,fx,fy);//进行循环输入,整个程序一直在这个while里面循环执行while(1){return 0 ;}// 移动函数void movesnake(char s[],char gm[20][20],int *len,int x[],int y[],int *fcount,int *fx,int *fy,int *score){int i;// 蛇身是否移动标志,如果为 1 则允许移动,否则不允移动int move=0;int cx[400]; // 备份蛇身X坐标数组int cy[400]; // 备份蛇身Y坐标数组//备份函数,将所有蛇身节点坐标进行备份memcpy(cx,x,sizeof(int)*(*len));memcpy(cy,y,sizeof(int)*(*len));// 如果接受到方向值与 w a s d 相匹配,则允许进行移动,置move标志为 1 if(s[0] == 'w'){move=1;x[0]=x[0]-1;}else if(s[0] == 's'){move=1;x[0]=x[0]+1;}else if(s[0] == 'a'){move=1;y[0]=y[0]-1;}else if(s[0] == 'd'){move=1;y[0]=y[0]+1;}if(move==1){// 如果蛇头坐标与食物坐标重合,表示已经吃到食物if((*fcount)&&x[0]==(*fx)&&y[0]==(*fy)){// 如果吃到食物,打印地图时食物变成蛇头,之前蛇身不动。
c贪吃蛇程序课程设计

c 贪吃蛇程序课程设计一、教学目标本课程旨在通过编写“贪吃蛇程序”,让学生掌握C语言编程的基本语法,理解面向对象编程的基本思想,提高问题解决能力,培养逻辑思维和团队合作精神。
1.掌握C语言的基本语法。
2.理解面向对象编程的基本概念。
3.学习使用数据结构实现贪吃蛇游戏。
4.能够使用C语言编写简单的程序。
5.能够使用面向对象的方式设计程序。
6.能够独立或团队合作完成贪吃蛇游戏的编写。
情感态度价值观目标:1.培养对编程的兴趣和热情。
2.培养团队合作和解决问题的能力。
3.培养严谨的科学态度和良好的编程习惯。
二、教学内容本课程的教学内容主要包括C语言的基本语法、面向对象编程思想和贪吃蛇游戏的设计与实现。
1.C语言的基本语法:数据类型、变量、运算符、控制结构等。
2.面向对象编程:类与对象、构造函数、成员函数、继承与多态等。
3.贪吃蛇游戏设计与实现:游戏逻辑、数据结构选择、算法实现等。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:用于讲解C语言的基本语法和面向对象编程的基本概念。
2.案例分析法:通过分析已有的贪吃蛇游戏代码,让学生理解游戏的设计与实现。
3.实验法:让学生通过编写代码,实践贪吃蛇游戏的制作,巩固所学知识。
四、教学资源1.教材:选择适合初中生的C语言编程教材。
2.多媒体资料:提供相关的编程教程和贪吃蛇游戏的示例代码。
3.实验设备:提供计算机和网络环境,让学生能够在线编程和测试。
五、教学评估本课程的评估方式包括平时表现、作业、考试和项目演示。
1.平时表现:评估学生在课堂上的参与度、提问回答和团队合作表现。
2.作业:布置编程练习,评估学生的编程能力和理解程度。
3.考试:进行期中和期末考试,评估学生的综合理解和应用能力。
4.项目演示:学生团队合作编写贪吃蛇程序,进行演示,评估学生的实践能力。
评估方式应客观、公正,能够全面反映学生的学习成果。
教师应及时给予反馈,帮助学生提高。
C语言贪吃蛇游戏需求分析说明书

项目需求规格说明书当前版本号:1.0最后更新日期:作者:目录1.引言 (3)1.1. 目的 (3)1.2. 背景 (3)1.3. 参考资料 (3)1.4. 开发人员 (3)2. 任务概述 (3)2.1目标 (3)2.2 假定与约束 (4)3.游戏总体需求说明 (5)3.1. 功能需求 (5)3.2. 性能需求 (5)3.3 界面需求 (6)3.4 运行环境需求 (6)1.引言1.1.目的本文档分析和说明贪吃蛇游戏的总体需求①:展示游戏的结果,以及游戏的价值;②:总结反思,为后续游戏做的更好进行复盘。
③:明确游戏的功能、性能、界面等方面的需求,为游戏的开发和设计提供指导;1.2.背景项目委托单位:开发单位:主管部门:1.3.参考资料1、贪吃蛇游戏现有版本2、相关书籍与文档3、网络上的相关资源和资料4、严蔚敏. 数据结构(c语言版). 清华大学出版. 2007年.5、谭浩强. C程序设计(第4版). 清华大学出版社. 2010年6月.1.4.开发人员2. 任务概述2.1目标①开发的意图:为了提供一款经典有趣的游戏,让玩家可以通过控制蛇的移动来获取食物并不断增加长度,增强反应能力和策略思维。
②应用目标:主要是娱乐和休闲。
通过游戏,玩家可以在放松身心的同时享受游戏带来的挑战和成就感。
③作用范围:贪吃蛇游戏适用于各种游戏平台,包括电脑、手机、平板等。
它可以在个人设备上单人游戏,也可以通过网络连接与其他玩家进行多人对战。
④背景资料:贪吃蛇游戏最早出现于20世纪70年代末期,是一款经典的电子游戏。
最初的贪吃蛇游戏是在黑白屏幕上展示,玩家通过操纵一个小蛇吃食物,并随着吃食物的数量增加而变长。
随着游戏的发展,贪吃蛇游戏在不同的平台上得到了广泛的推广和发展,衍生出了各种版本和变种。
如今,贪吃蛇游戏仍然受到许多玩家的喜爱,并成为了经典的游戏之一。
⑤软件系统与其它系统的关系:贪吃蛇软件系统通常是一个独立的游戏系统,与其他系统没有直接的依赖关系。
C++贪吃蛇说明

C语言课程设计报告题目:贪吃蛇指导教师:**院系:电气信息工程学院班级: 01 *名:***学号: 15目录1程序设计目的.......................................... 错误!未定义书签。
2程序设计具体要求...................................... 错误!未定义书签。
3程序功能.............................................. 错误!未定义书签。
4设计思路.............................................. 错误!未定义书签。
5程序清单.............................................. 错误!未定义书签。
6总结与体会............................................ 错误!未定义书签。
7结束语................................................ 错误!未定义书签。
1、课程设计目的:1.进一步掌握和利用C语言进行行程设计的能力;2.进一步理解和运用结构化程序设计的思想和方法;3.初步掌握开发一个小型实用系统的基本方法;4.学会调试一个较长程序的基本方法;5.学会利用流程图表示算法;6.掌握书写程序设计开发文档的能力(书写课程设计报告)。
2、课程设计具体要求:贪吃蛇是一种风靡全球的小游戏,就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的蛋,越吃越长。
只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇就立即毙命。
和别的游戏不同,贪食蛇是一个悲剧性的游戏。
许多电子游戏都是打通关到底,游戏操作者以胜利而告终。
而贪食蛇的结局却是死亡。
“贪食蛇”,要命的就在一个“贪”字上。
所以,有时候真的需要及时收手,不要逼人太甚。
如果没有余地,就算你的手再快,面临的结局也是——崩盘。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言贪吃蛇程序设计说明书题目:贪吃蛇游戏学校: 系别: 专业班级: 姓名: 学号: 指导老师: 日期:一、设计题目:贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。
每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。
二、功能设计:本游戏要求实现以下几个功能:(1) 用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长;(2) 用户可以调节蛇的运行速度来选择不同的难度;(3) 游戏分多个难度级别;(4) 用户可自选颜色;(5) 记录成绩前五名的游戏玩家;(6) 增加背景音乐;(7) 提高障碍物和游戏级别。
三、程序模块图:贪吃蛇游戏初画控设帮始图制置助模模模模化块块块块墙蛇食移食死变成等音体身物动物亡长绩级效2四、算法流程图:开始初始化界面和蛇身放置食物获取按键开始运动碰到边界是否否蛇吃到食是蛇长大蛇死亡是继续否结束3五、函数原型与功能 1.主函数:void main()启动程序,触动其他函数。
2.初始化:void init ()设置背景框大小、蛇体初始值,随机产生食物。
3.随机产生食物:void setfoodcrd()设置食物生成坐标,0表示食物被吃。
4.画食物:void showfood()用矩形框来画食物5.画蛇:void showsnake()根据蛇的坐标和节数,循环用矩形框来画蛇。
6.蛇移动:void snakemove() 根据按键,重设坐标7.改变蛇的方向:void changeskdir()响应用户的运动方向8.判断蛇是否死亡:void judgeslod判断蛇是否碰到自己或墙。
9.判断蛇是否吃到食物:void judgefood()判断是否吃到食物,吃食后变0,蛇增长一节。
10.结束游戏:void gameover()结束话语,并执行下一步。
六、基本代码#include<graphics.h> #include<conio.h>#include<stdio.h>#pragma comment(lib,"Winmm.lib")#include "MyTimer.h" #define SIZEMAX 100 /*蛇最大长度*/ #define SPEED 100 /*初始速度*/ #define len 20 /*蛇宽度*/#define lm 10 /*蛇每次移动距离*/ #define initlen 600 /*初始化窗口正方形的长度*/ #define Min_snakelen 2 /*蛇的最小长度*/typedef struct {int x,y;}DIR;int snakelen=Min_snakelen; /*蛇的长度*/4int isfood=1; /*食物状态*/ int isover=0; /*游戏状态*/int ispause=1; /*暂停状态*/int ismusic=1; /*音乐播放状态*/ char dir; /*记录蛇运动的方向*/ char c='d';DIR snake[500],food; /*定义蛇节点和食物的类型*/ int speed=SPEED;void drawmap() /*画地图函数*/ {IMAGE img;char str[10];loadimage(&img,"贪吃蛇.jpg"); /*游戏界面*/putimage(0,0,&img);loadimage(&img,"7.jpg"); /*侧栏提示*/putimage(600,0,&img);sprintf(str,"%d",snakelen);setfont(30,0,"宋体");setbkmode(TRANSPARENT);outtextxy(620,10,"操作说明:");setfont(20,0,"宋体");outtextxy(615,50,"awsd控制方向键");outtextxy(615,80,"p键暂停");outtextxy(615,110,"o键继续");outtextxy(615,200,"esc键退出");outtextxy(615,140,"l键暂停音乐");outtextxy(615,170,"k键继续播放");outtextxy(730,250,str);outtextxy(620,250,"蛇当前长度");}void init() /*初始化蛇函数*/ {int i;IMAGE img;snake[0].x=9*len+lm;snake[0].y=4*len+lm;loadimage(&img,"1.jpg");putimage(snake[0].x-lm,snake[0].y-lm,&img); for(i=1;i<snakelen;i++){snake[i].x=len*(9-i)+lm;snake[i].y=len*4+lm;5loadimage(&img, "2.jpg");putimage(snake[i].x-lm,snake[i].y-lm, &img); }}void showsnake() /*画蛇函数*/ {int i;IMAGE img;loadimage(&img, "1.jpg");putimage(snake[0].x-lm,snake[0].y-lm , &img);loadimage(&img, "2.jpg");for(i=1;i<snakelen;i++)putimage(snake[i].x-lm,snake[i].y-lm, &img); }void snakemove() /*画动蛇函数*/ {int i;int mx=snake[0].x;int my=snake[0].y;switch(dir){case 'a':mx-=len;break;case 'd':mx+=len;break;case 'w':my-=len;break;case 's':my+=len;break;default:break;}for(i=snakelen-1;i>=0;i--){snake[i+1].x=snake[i].x;snake[i+1].y=snake[i].y;}snake[0].x=mx;snake[0].y=my;showsnake();}int ceshiover() /*检测游戏结束函数*/ {int i;if(snake[0].x<0||snake[0].x>30*len-lm||snake[0].y<0||snake[0].y>30*len-lm)return 1;for(i=1;i<snakelen;i++)6{if(snake[0].x==snake[i].x&&snake[0].y==snake[i].y) return 1;}return 0;}int foodinsnake() /*检测食物是否在蛇上函数*/ {for(int i=0;i<snakelen;i++)if(food.x==snake[i].x&&food.y==snake[i].y)return 1;elsereturn 0;}void showfood() /*画食物函数*/{IMAGE img;do{food.x=(rand()%30)*len+lm;food.y=(rand()%30)*len+lm;}while(foodinsnake());loadimage(&img, "3.jpg");putimage(food.x-lm,food.y-lm , &img);isfood=0;}void kmusic(){if(ismusic==0)mciSendString("pause mymusic",NULL,0,NULL);if(ismusic==1)mciSendString("resume mymusic",NULL,0,NULL);}void playbkmusic() /*播放背景音乐函数*/{mciSendString("open 超级玛丽.mp3 alias mymusic", NULL, 0, NULL); mciSendString("play mymusic repeat", NULL, 0, NULL);}void playgame() /*玩游戏函数*/{c='d'; //蛇开始向右移动isover=0;7snakelen=Min_snakelen;dir='d';IMAGE img;MyTimer t; //定义精确延时对象int T=200; // 延长时间drawmap(); //画游戏地图init(); //画小蛇初始位置while(!isover){if(ispause){snakemove();FlushBatchDraw(); //批量绘图EndBatchDraw(); //结束批量绘图if(snake[0].x==food.x&&snake[0].y==food.y){ snakelen++;isfood=1;}if(isfood)showfood();if(snakelen<35)T=200-3*snakelen;t.Sleep(T);BeginBatchDraw(); // 开始批量绘图模式,防止闪烁问题drawmap();loadimage(&img, "3.jpg"); // 加载食物图片putimage(food.x-lm,food.y-lm , &img);};//按键控制if(kbhit())c=getch();switch(c){case 'a':if(dir!='d'){dir=c;}break;case 'd':if(dir!='a'){dir=c;}break;case 'w':if(dir!='s'){8dir=c;}break;case 's':if(dir!='w'){dir=c;}break;case 27: exit(0); break; //游戏退出case 'p': ispause=0;break; //p暂停case 'o': ispause=1;break; //o继续游戏case 'l': ismusic=0;break; //l暂停音乐case 'k': ismusic=1;break; //k继续播放default:break;}kmusic(); //音乐控制播放//判断游戏结束if(ceshiover())isover=1;//判断是否重新再来HWND wnd = GetHWnd(); //获取窗口句柄if(isover)if (MessageBox(wnd, "游戏结束。