求蛇的C语言毕业论文
#包含?& ltstdio.h & gt#包含?& ltgraphics.h & gt#包含?& ltstdlib.h & gt#包含?& ltdos.h & gt?/*引用的库函数*/#define?向左?0x4b00 #定义?对吗?0x4d00 #定义?下来?0x5000 #定义?向上?0x4800 #定义?ESC?0x0011b/*宏定义键名*/#define?n?200int?我,关键;int?水平;/*游戏等级*/int?得分= 0;/*分数*/int?gamespeed/*游戏速度*/struct?Food{int?x;/*食物横坐标*/int?y;/*食物的纵坐标*/int?有;/*判断食物的变量是否会出现*/}食物;/*食物的结构*/struct?Snake{int?x[N];int?y[N];int?节点;/*一条蛇的结数*/int?方向;/*蛇移动方向*/int?生活;/*?蛇命,0活着,1死*/}蛇;/*蛇的结构*/void?choice leve(void);/*选择游戏关卡*/void?init(void);/*图形驱动*/void?关闭(无效);/*图文End */void?DRAW(作废);/*游戏区*/void?game over(void);/*结束游戏*/void?游戏性(void);/*玩游戏的具体流程*/void?PrScore(void);/*输出等级*/*主函数*/void?main(void){ Init();/*图形驱动*/choice lev();/*选择游戏关卡*/DRAW();/*游戏区域*/GamePlay();/*玩游戏的具体流程*/Close();/*图形结束*/}/*图形驱动*/void?Init(void){int?gd=DETECT,GM;init graph(& amp;gd,& ampgm," \ \ turbo 2 ");?/*初始化图形系统*/clear device();?/*清空图形界面*/}/*选择游戏关卡*/void?choice leve(void){ char?名称[20];setcolor(黄色);settextstyle(0,0,6);outtextxy(150,150,“蛇”);setcolor(绿色);settextstyle(0,0,1);outtextxy(200,250,"拜托?放?在?你的?英语?姓名:“);outtextxy(200,270,“选择?莱弗?从哪里?1-9.");outtextxy(300,320,“姓名:杨子龙”);/*生产者名称*/Outtextxy(300350,"编号:0902060226 ");/*制作人的学号*/outtextxy (300,380,“班级:计算机?科学?0602");/*生产者类*/getch();printf("拜托?普京?你的?姓名:“);获取(名称);printf("拜托?选择?levle:“);scanf("%d ",& amp水平);gamespeed = 100000-400 *级别-300 *级别*级别;if(level & gt;9 | | level & lt1){ clear device();?/*清除图形界面*/setcolor(黄色);?/*设置字体颜色*/settextstyle(0,0,2);?/*设置字体类型*/outtextxy (150,200,"级别?输入?错误”);?/*显示文本*/getch();level = 1;} }作废?DRAW(void){ clear device();?/*清屏*/set color(2);setlinestyle(SOLID_LINE,0,THICK _ WIDTH);/*设置线型*/rectangle(45,45,465,325);}/*玩游戏的具体流程*/void?游戏性(void){ set color(5);setlinestyle(SOLID_LINE,0,THICK _ WIDTH);/*设置线型*/randomize();/*随机数生成器*/food . yes = 1;/*1表示新的食物需要出现,0表示食物已经存在*/snake . life = 0;/* alive */snake . direction = 1;/*向右的方向*/snake . x[0]= 320;snake . y[0]= 240;/*蛇头*/snake . x[1]= 330;snake . y[1]= 240;?/*第二段蛇的位置*/snake . node = 3;/*节数*/PrScore();/*输出分数*/while(1)/*可以反复玩游戏按ESC结束*/{while(!Khit ())/*蛇不按键自己移动*/{if(food.yes==1)/*新的食物需要出现*/{ food . x = rand()% 360+70;food . y = rand()% 250+60;而(food.x%10!=0)/*食物随机出现后,食物必须在整个网格内,这样蛇才能吃到*/food . x++;而(food.y%10!= 0)food . y++;food . yes = 0;/*屏幕上有食物*/}if(food.yes==0)/*如果屏幕上有食物,则显示*/{ set color(GREEN);矩形(food.x,food.y,food.x+10,food . y-10);} for(I = snake . node-1;我& gt0;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;打破;案子?2:?snake . x[0]-= 10;打破;案子?3:?snake . y[0]-= 10;打破;案子?4:?snake . y[0]+= 10;打破;} for(I = 3;我& ltsnake .节点;I++)/*从蛇的第四节判断是否打到自己,因为蛇头有两节,不可能在第三节掉头*/{ if(snake . x[I]= = snake . x[0]&;& ampsnake . y[I]= = snake . y[0]){ game over();/*显示失败*/snake . life = 1;?/*蛇死*/break;}}/*如果蛇头碰到墙壁,蛇头从对面墙壁出来*/If(snake . x[0]< 50){ snake . x[0]= 450;/*蛇头越过左边界,就从右边界进入*/snake . y[0]= snake . y[0];/*纵坐标不变*/for(I = snake . node-1;我& gt0;I-){ snake . x[I]= snake . x[I-1];snake . y[I]= snake . y[I-1];?/*蛇前进的其他路段*/}{setfillstyle(SOLID_FILL,0);?/*设置填充模式和颜色,其中0表示黑色*/bar(50,55,455,315);/*bar是一个函数*/} } else if(snake . x[0]& gt;450){ snake . x[0]= 50;/*如果蛇头越过右边界,蛇头从左边界进入*/snake . y[0]= snake . y[0];/*纵坐标不变*/for(I = snake . node-1;我& gt0;I-){ snake . x[I]= snake . x[I-1];snake . y[I]= snake . y[I-1];?/*蛇前进的其他路段*/}{setfillstyle(SOLID_FILL,0);?/*设置填充模式和颜色,其中0表示黑色*/bar(50,55,455,315);/*bar是函数*/} } else if(snake . y[0]< 60){ snake . y[0]= 320;/*如果蛇头越过上边界,则从下边界进入*/snake . x[0]= snake . x[0];/*横坐标不变*/for(I = snake . node-1;我& gt0;I-){ snake . x[I]= snake . x[I-1];snake . y[I]= snake . y[I-1];?/*蛇前进的其他路段*/}{setfillstyle(SOLID_FILL,0);?/*设置填充模式和颜色,其中0表示黑色*/bar(50,55,455,315);/*bar是一个函数*/} } else if(snake . y[0]& gt;320){ snake . y[0]= 60;/*如果蛇头越过下边界,则从上边界进入*/snake . x[0]= snake . x[0];/*横坐标不变*/for(I = snake . node-1;我& gt0;I-){ snake . x[I]= snake . x[I-1];snake . y[I]= snake . y[I-1];?/*蛇前进的其他路段*/}{setfillstyle(SOLID_FILL,0);?/*设置填充模式和颜色,其中0表示黑色*/bar(50,55,455,315);/*bar是表示填充范围的函数*/}}if(snake.life==1)/*如果蛇死了,跳出内循环重新开始*/break;if(snake . x[0]= = food . x & amp;& ampSnake.y[0]==food.y)/*吃完饭*/{ set color(0);/*移除图片中的食物*/rectangle (food.x,food.y,food.x+10,food . y-10);?/*用当前线型和颜色绘制矩形*/snake . x[snake . node]=-20;snake . y[snake . node]=-20;/*先将新节放在一个不可见的位置,在下一个循环中取前一节的位置*/snake . node++;/*蛇的身体有很长的一段*/food . yes = 1;/*新食物需要出现在屏幕上*/score+= 10;?/*每吃一次食物,分数累计到10分*/if(分数% 100 = = 0){ level++;gamespeed = 100000-400 *级别-300 *级别*级别;/*每吃10的食物,就提升一级,速度加快*/PrScore();/*输出新分数*/setcolor(黄色);?/*设置字体颜色*/settextstyle(0,0,4);?/*设置字体类型*/outtextxy (150,200,"级别?UP”);?/*显示文本*/if(level = = 10){ level = 1,gamespeed = 100000-400 * level-300 * level * level;}延迟(6000000);?延时(6000000);?延时(6000000);?延时(6000000);?延时(6000000);延时(6000000);?延时(6000000);bar(50,55,455,315);/*bar是指示填充范围的函数*/} PrScore();/*输出新分数*/?}?set color(4);/*画蛇*/?for(I = 0;我& ltsnake .节点;i++)?矩形(snake.x[i],snake.y[i],snake.x[i]+10,?snake . y[I]-10);?延迟(gamespeed);?/*控制游戏速度*/set color(0);rectangle(snake . x[snake . node-1],snake.y[snake.node-1],?snake . x[snake . node-1]+10,snake . y[snake . node-1]-10);?}?/*endwhile(!kbhit)*/?/*用黑色去掉蛇的最后一段*/?If(snake.life==1)/*如果蛇死了,跳出循环*/?打破;?key = BIOS key(0);/*接收按钮*/?If(key==ESC)/*按ESC退出*/?打破;?不然呢?if(key = = UP & amp;& amp蛇,方向!=4)?/*判断是否反方向移动*/?snake . direction = 3;?不然呢?if(key = = RIGHT & amp;& amp蛇,方向!=2)?snake . direction = 1;?不然呢?if(key = = LEFT & amp;& amp蛇,方向!=1)?snake . direction = 2;?不然呢?if(key = = DOWN & amp;& amp蛇,方向!=3)?snake . direction = 4;?}/*endwhile(1)*/?}?/*游戏结束*/?作废?GameOver(void)?{?clear device();?/*清屏*/PrScore();?setcolor(红色);?/*设置字体颜色*/settextstyle(0,0,4);?/*设置字体类型*/outtextxy(200,200,"游戏?过”);?/*显示文本*/getch();?}?/*输出结果和游戏等级*/?作废?PrScore(void)?{?夏尔?str 1[20];/*设置字符数组*/?setfillstyle(SOLID_FILL,0);?吧(50,15,390,35);?/*填充矩形框*/set color(6);?/*设置文本颜色*/settextstyle(0,0,2);?/*设置数组显示位置*/sprintf(str1," score?%d?水平?%d”,分数,级别);/*显示数组的内容*/outtextxy(55,20,str 1);?setcolor(黄色);?/*设置字体颜色*/settextstyle(0,0,2);?/*设置字体类型*/outtextxy(250,400," EXIT=ESC?");/*显示文本*/}?作废?关闭(作废)?{?closegraph();?}