贪吃蛇代码求贪吃蛇的c语言代码,觉得挺好玩的

贪吃蛇代码  时间:2021-07-16  阅读:()

求贪吃蛇的c语言代码,觉得挺好玩的

#include <stdio.h> #include <graphics.h> #include <stdlib.h> #include <dos.h> /*引用的库函数*/ #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b/*宏定义键名*/ #define N 200 int i,key; int level;/*游戏等级*/ int score=0;/*得分*/ int gamespeed;/*游戏速度*/ struct Food { int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/ }food;/*食物的结构体*/ struct Snake { int x[N]; int y[N]; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/ }snake;/*蛇的结构体*/ void Choicelevle(void);/*选择游戏等级*/ void Init(void);/*图形驱动*/ void Close(void);/*图形结束*/ void DRAW(void);/*游戏区域*/ void GameOver(void);/*结束游戏*/ void GamePlay(void);/*玩游戏具体过程*/ void PrScore(void);/*输出成绩*/ /*主函数*/ void main(void) { Init();/*图形驱动*/ Choicelevle();/*选择游戏等级*/ DRAW();/*游戏区域*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/ } /*图形驱动*/ void Init(void) { int gd=DETECT,gm; initgraph(&gd,&gm,"\turboc2"); /*初始化图形系统*/ cleardevice(); /*清除图形界面*/ } /*选择游戏等级*/ void Choicelevle(void) {char name[20]; setcolor(YELLOW); settextstyle(0,0,6); outtextxy(150,150,"Snake"); setcolor(GREEN); settextstyle(0,0,1); outtextxy(200,250,"please put in your English name:"); outtextxy(200,270,"Choice levle from 1-9."); outtextxy(300,320,"name:yangzilong");/*制作人姓名*/ outtextxy(300,350,"number:0902060226");/*制作人学号*/ outtextxy(300,380,"puter science 0602");/*制作人班级*/ getch(); printf("please putin your name:"); gets(name); printf("please choice levle:"); scanf("%d",&level); gamespeed=100000-400*level-300*level*level; if(level>9||level<1) {cleardevice(); /*清除图形界面*/ setcolor(YELLOW); /*设置字体颜色*/ settextstyle(0,0,2); /*设置字体类型*/ outtextxy(150,200,"level input error"); /*显示文本*/ getch(); level=1; } } void DRAW(void) {cleardevice(); /*清屏*/ setcolor(2); setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ rectangle(45,45,465,325); } /*玩游戏具体过程*/ void GamePlay(void) {setcolor(5); setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ randomize();/*随机数发生器*/ food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/ snake.life=0;/*活着*/ 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(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/ { if(food.yes==1)/*需要出现新食物*/ { food.x=rand()%360+70; food.y=rand()%250+60; while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x++; while(food.y%10!=0) food.y++; food.yes=0;/*画面上有食物了*/ } if(food.yes==0)/*画面上有食物了就要显示*/ { setcolor(GREEN); rectangle(food.x,food.y,food.x+10,food.y-10); } 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; } 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; } } /*如果蛇头碰到墙壁,蛇头从对面墙出来*/ if(snake.x[0]<50) {snake.x[0]=450;/*如果蛇头越过左边界,则从右边界进入*/ snake.y[0]=snake.y[0];/*纵坐标不变*/ for(i=snake.node-1;i>0;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]>450) {snake.x[0]=50;/*如果蛇头越过右边界,则蛇头从左边界进入*/ snake.y[0]=snake.y[0];/*纵坐标不变*/ for(i=snake.node-1;i>0;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;i>0;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]>320) {snake.y[0]=60;/*如果蛇头越过下边界,则从上边界进入*/ snake.x[0]=snake.x[0];/*横坐标不变*/ for(i=snake.node-1;i>0;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&&snake.y[0]==food.y)/*吃到食物以后*/ { setcolor(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(score%100==0) {level++;gamespeed=100000-400*level-300*level*level;/*每吃掉10食物提升一级,速度加快*/ PrScore();/*输出新得分*/ setcolor(YELLOW); /*设置字体颜色*/ settextstyle(0,0,4); /*设置字体类型*/ outtextxy(150,200,"LEVEL UP"); /*显示文本*/ if(level==10) {level=1,gamespeed=100000-400*level-300*level*level;} delay(6000000); delay(6000000); delay(6000000); delay(6000000); delay(6000000); delay(6000000); delay(6000000); bar(50,55,455,315);/*bar是表示填充的范围的函数*/ } PrScore();/*输出新得分*/ } setcolor(4);/*画出蛇*/ for(i=0;i<snake.node;i++) rectangle(snake.x[i],snake.y[i],snake.x[i]+10, snake.y[i]-10); delay(gamespeed); /*控制游戏速度*/ setcolor(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)/*如果蛇死就跳出循环*/ 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 str1[20];/*设置字符型数组*/ setfillstyle(SOLID_FILL,0); bar(50,15,390,35); /*填充矩形框*/ setcolor(6); /*设置文本颜色*/ settextstyle(0,0,2); /*设置数组显示位置*/ sprintf(str1,"score %d level %d",score,level);/*显示数组内容*/ outtextxy(55,20,str1); setcolor(YELLOW); /*设置字体颜色*/ settextstyle(0,0,2); /*设置字体类型*/ outtextxy(250,400,"EXIT=ESC ");/*显示文本*/ } void Close(void) { closegraph(); }

10gbiz($2.36/月),香港/洛杉矶CN2 GIA线路VPS,香港/日本独立服务器

10gbiz发布了9月优惠方案,针对VPS、独立服务器、站群服务器、高防服务器等均提供了一系列优惠方面,其中香港/洛杉矶CN2 GIA线路VPS主机4折优惠继续,优惠后最低每月仅2.36美元起;日本/香港独立服务器提供特价款首月1.5折27.43美元起;站群/G口服务器首月半价,高防服务器永久8.5折等。这是一家成立于2020年的主机商,提供包括独立服务器租用和VPS主机等产品,数据中心包括美国洛...

棉花云1折起(49元), 国内BGP 美国 香港 日本

棉花云官网棉花云隶属于江西乐网科技有限公司,前身是2014年就运营的2014IDC,专注海外线路已有7年有余,是国内较早从事海外专线的互联网基础服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务(SaaS),拥有丰富的国内BGP、双线高防...

博鳌云¥799/月,香港110Mbps(含10M CN2)大带宽独立服务器/E3/8G内存/240G/500G SSD或1T HDD

博鳌云是一家以海外互联网基础业务为主的高新技术企业,运营全球高品质数据中心业务。自2008年开始为用户提供服务,距今11年,在国人商家中来说非常老牌。致力于为中国用户提供域名注册(国外接口)、免费虚拟主机、香港虚拟主机、VPS云主机和香港、台湾、马来西亚等地服务器租用服务,各类网络应用解決方案等领域的专业网络数据服务。商家支持支付宝、微信、银行转账等付款方式。目前香港有一款特价独立服务器正在促销,...

贪吃蛇代码为你推荐
stackoverflowerrorjava.lang.StackOverflowError该如何解决在线课堂钉钉群直播和在线课堂的区别?知识库管理系统销售易CRM知识库,这是干什么用的?radius认证PPPoE有认证的功能,RADIUS也有验证功能,两者有区别么??系统论坛安卓系统论坛哪个好?基础设施即服务城市基础设施、公共服务设施、市政设施有什么区别?文件系统类型在windows系统中,常见的文件类型主要由哪几种?酷源码怎样看源码下优酷视频clamwin杀毒软件ClamWin有用吗?有没有主动防御的?滚动条颜色滚动条颜色设置
虚拟主机软件 网站虚拟主机空间 独享100m 远程登陆工具 免费ftp空间申请 怎样建立邮箱 可外链网盘 网站在线扫描 域名与空间 smtp虚拟服务器 网购分享 谷歌台湾 iki 阿里云手机官网 学生服务器 免费php空间 netvigator 789电视剧网 镇江高防服务器 winds 更多