// 贪吃蛇大战2.cpp : Defines the entry point for the console application.
//// 贪吃蛇大作战1.cpp : Defines the entry point for the console application.
//// 贪吃蛇大作战.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include "stdio.h"
#include "time.h"//随机数
#include "windows.h"//文字颜色、坐标位置
#include "stdlib.h"
#include "conio.h"//接受键盘的输入输出//宏定义
#define U 1
#define D 2
#define L 3
#define R 4//全局变量
typedef struct snake
{int x;int y;struct snake *next;
}snake;
int score=0,add=10;
int HighScore=0;
int status,sleeptime = 200;
snake *head,*food,*q;
int endgamestatus=0;//游戏结束的状态
HANDLE hOut;/*********函数声明********/
void gotoxy(int x,int y);   //设置光标位置
int color(int c);           //设置文字颜色
void printsnake();          //蛇的字符画
void welcometogame();       //开始界面
void createMap();           //绘制地图
void scoreandtips();        //游戏界面右侧的得分和小提示
void initsnake();           //初始化蛇身,画蛇身
void createfood();          //创建并随机出现食物
int biteself();             //判断是否咬到了自己
void cantcrosswall();       //设置蛇撞墙的情况
void speedup();             //加速
void speeddown();           //减速
void snakemove();           //控制蛇的前进方向
void keyboardControl();     //控制键盘按键
void Lostdraw();            //游戏结束界面
void endgame();             //游戏结束
void choose();              //游戏失败之后的选择
void File_out();            //在文件中读取最高分
void File_in();             //储存最高分的文件
void explation();           //游戏说明int color(int c)//设置文字颜色
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);return 0;
}void gotoxy(int x,int y)//获得控制台的坐标位置
{COORD c;c.X=x;c.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}void printsnake() //绘制字符画 --蛇
{system("cls");//清屏gotoxy(35, 1);color(6);printf("/^\\/^\\");      //蛇眼睛gotoxy(34, 2);printf("|__|  O|");      //蛇眼睛gotoxy(33, 2);color(2);printf("_");gotoxy(25, 3);color(12);printf("\\/");         //蛇信gotoxy(31, 3);color(2);printf("/");gotoxy(37, 3);color(6);printf(" \\_/");      //蛇眼睛gotoxy(41, 3);color(10);printf(" \\");gotoxy(26, 4);color(12);printf("\\____");    //舌头gotoxy(32, 4);printf("_________/");gotoxy(31, 4);color(2);printf("|");gotoxy(43, 4);color(10);printf("\\");gotoxy(32, 5);color(2);printf("\\_______");    //蛇嘴gotoxy(44, 5);color(10);printf("\\");gotoxy(39, 6);printf("|     |                  \\");  //下面都是画蛇身gotoxy(38, 7);printf("/      /                   \\");gotoxy(37, 8);printf("/      /                    \\ \\");gotoxy(35, 9);printf("/      /                       \\ \\");gotoxy(34, 10);printf("/     /                          \\  \\");gotoxy(33, 11);printf("/     /             _----_         \\   \\");gotoxy(32, 12);printf("/     /           _-~      ~-_         |  |");gotoxy(31, 13);printf("(      (        _-~    _--_    ~-_     _/  |");gotoxy(32, 14);printf("\\     ~-____-~    _-~    ~-_    ~-_-~    /");gotoxy(33, 15);printf("~-_           _-~          ~-_       _-~");gotoxy(35, 16);printf("~--______-~                ~-___-~");}void welcometogame()//欢迎界面
{int n;int i,j=1;color(11);gotoxy(43,18);printf("贪 吃 蛇 大 作 战");color(14);for(i=20;i<=26;i++){for(j=27;j<=74;j++){gotoxy(j,i);if(i==20||i==26){printf("-");}else if(j==27||j==74)printf("|");}}color(12);gotoxy(35,22);printf("1.开始游戏");gotoxy(55,22);printf("2.游戏说明");gotoxy(35,24);printf("3.退出游戏");color(3);gotoxy(29,27);printf("请选择[1 2 3]; [ ]\b\b");color(14);scanf("%d",&n);switch(n){case 1:system("cls");createMap();initsnake();createfood();keyboardControl();break;case 2:explation();break;case 3:exit(0);break;}}void createMap()//绘制欢迎地图
{int i,j;for(i=0;i<58;i+=2){gotoxy(i,0);color(5);printf("□");gotoxy(i,26);printf("□");}for(i=0;i<26;i++){gotoxy(0,i);printf("□");gotoxy(56,i);printf("□");}for(i=2;i<56;i+=2){for(j=1;j<26;j++){gotoxy(i,j);color(3);printf("■\n\n");}}
}void scoreandtips()//绘制游戏右边的东西
{File_out();color(11);gotoxy(64,4);printf("☆最高纪录☆:%d分",HighScore);color(14);gotoxy(64,8);printf("得分:%d",score);color(13);gotoxy(73,11);printf("小 提 示");color(6);gotoxy(60,13);printf("╬-------------------------------╬");gotoxy(60,25);printf("╬-------------------------------╬");color(3);gotoxy(64,14);printf("每个食物得分:%d分",add);gotoxy(64,16);printf("不能穿墙,不能咬到自己");gotoxy(64,18);printf("用↑ ↓ ← →分别控制蛇的移动");gotoxy(64,20);printf("F1 为加速,F2 为减速");gotoxy(64,22);printf("space;暂停游戏");gotoxy(64,24);printf("ESC : 退出游戏");
}void File_out()//在文件中读取最高分
{FILE *fp;fp=fopen("save.txt","a+");fscanf(fp,"%d",&HighScore);fclose(fp);
}void initsnake()//绘制蛇身
{snake *tail;int i;tail=(snake *)malloc(sizeof(snake));tail->x=24;tail->y=5;for(i=1;i<=4;i++){head=(snake *)malloc(sizeof(snake));head->next=tail;head->x=24+2*i;head->y=5;tail=head;}while(tail!=NULL){gotoxy(tail->x,tail->y);color(14);printf("★");tail=tail->next;}
}void createfood()  //生成随机食物
{snake *food_1;srand((unsigned)time(NULL));food_1=(snake *)malloc(sizeof(snake));srand((unsigned)time(NULL));while((food_1->x%2)!=0){food_1->x=rand()%52+2;}food_1->y=rand()%24+1;q=head;while(q->next== NULL){if((q->x==food_1->x)&&(q->y==food_1->y)){free(food_1);createfood();}q=q->next;}gotoxy(food_1->x,food_1->y);food=food_1;color(12);printf("●");}int biteself()//判断是否撞到了自己
{snake *self;self=head->next;while(self!=NULL){if(self->x==head->x&&self->y==head->y){return 1;}self=self->next;}return 0;
}void cantcrosswall(){if(head->x==0||head->x==56||head->y==0||head->y==26){//如果蛇头碰到了墙壁endgamestatus=1;//返回第一种情况endgame();//添加新的代码}
}void speedup()//蛇加速前进
{if(sleeptime>=50){sleeptime-=50;add+=2;}
}void speeddown()//蛇减速前进
{if(sleeptime<350){sleeptime+=50;add-=2;if(sleeptime==350){add=1;}}
}void snakemove()
{snake *nexthead;cantcrosswall();nexthead=(snake *)malloc(sizeof(snake));if(status==U){nexthead->x=head->x;nexthead->y=head->y-1;nexthead->next=head;head=nexthead;q=head;if(nexthead->x==food->x&&nexthead->y==food->y){while(q!=NULL){gotoxy(q->x,q->y);color(14);printf("★");q=q->next;}score=score+add;speedup();createfood();}else{while(q->next->next!=NULL){gotoxy(q->x,q->y);color(14);printf("★");q=q->next;}gotoxy(q->next->x,q->next->y);color(3);printf("■");free(q->next);q->next=NULL;}}if(status==D){nexthead->x=head->x;nexthead->y=head->y+1;nexthead->next=head;head=nexthead;q=head;if(nexthead->x==food->x&&nexthead->y==food->y){while(q!=NULL){gotoxy(q->x,q->y);color(14);printf("★");q=q->next;}score=score+add;speedup();createfood();}else{while(q->next->next!=NULL){gotoxy(q->x,q->y);color(14);printf("★");q=q->next;}gotoxy(q->next->x,q->next->y);color(3);printf("■");free(q->next);q->next=NULL;}}if(status==L){nexthead->x=head->x-2;nexthead->y=head->y;nexthead->next=head;head=nexthead;q=head;if(nexthead->x==food->x&&nexthead->y==food->y){while(q!=NULL){gotoxy(q->x,q->y);color(14);printf("★");q=q->next;}score=score+add;speedup();createfood();}else{while(q->next->next!=NULL){gotoxy(q->x,q->y);color(14);printf("★");q=q->next;}gotoxy(q->next->x,q->next->y);color(3);printf("■");free(q->next);q->next=NULL;}}if(status==R){nexthead->x=head->x+2;nexthead->y=head->y;nexthead->next=head;head=nexthead;q=head;if(nexthead->x==food->x&&nexthead->y==food->y){while(q!=NULL){gotoxy(q->x,q->y);color(14);printf("★");q=q->next;}score=score+add;speedup();createfood();}else{while(q->next->next!=NULL){gotoxy(q->x,q->y);color(14);printf("★");q=q->next;}gotoxy(q->next->x,q->next->y);color(3);printf("■");free(q->next);q->next=NULL;}}if(biteself()==1){endgamestatus=2;endgame();}
}void keyboardControl()
{status=R;while(1){scoreandtips();if(GetAsyncKeyState(VK_UP)&&status!=D){status=U;}else if(GetAsyncKeyState(VK_DOWN)&&status!=U){status=D;}else if(GetAsyncKeyState(VK_LEFT)&&status!=R){status=L;}else if(GetAsyncKeyState(VK_RIGHT)&&status!=L){status=R;}if(GetAsyncKeyState(VK_SPACE)){while(1){Sleep(300);if(GetAsyncKeyState(VK_SPACE)){break;}}}else if(GetAsyncKeyState(VK_ESCAPE)){endgamestatus=3;break;}else if(GetAsyncKeyState(VK_F1)){speedup();}else if(GetAsyncKeyState(VK_F2)){if(sleeptime<350){sleeptime=sleeptime+30;add=add-2;if(sleeptime==350){add=1;}}}Sleep(sleeptime);snakemove();}
}void Lostdraw(){system("cls");int i;gotoxy(45,2);color(6);printf("\\\\\\|///");//小人的头发gotoxy(43,3);printf("\\\\");gotoxy(47,3);color(15);printf(".-.-");//眉毛gotoxy(54,3);color(6);printf("//");gotoxy(44,4);color(14);printf("(");//左耳gotoxy(47,4);color(15);printf(".@.@");//眼睛gotoxy(54,4);color(14);printf(")");//右耳gotoxy(17,5);color(11);printf("+-----------------------");//上边框gotoxy(35,5);color(14);printf("oOOo");//左手gotoxy(39,5);color(11);printf("----------");//上边框gotoxy(48,5);color(14);printf("(_)");//嘴gotoxy(51,5);gotoxy(61,5);color(14);printf("oOOo");//右手gotoxy(65,5);color(11);printf("-----------------------+");//上边框for(i=6;i<=19;i++){//竖边框gotoxy(17,i);printf("|");gotoxy(82,i);printf("|");}gotoxy(17,20);printf("+--------------------------------------");//上边框gotoxy(52,20);color(14);printf("☆☆☆”");gotoxy(60,20);color(11);printf("-------------------+");//下边框}void endgame(){system("cls");if(endgamestatus==1){//如果蛇撞到了墙Lostdraw();gotoxy(35,9);color(12);printf("对不起,您撞到墙了。游戏结束!");}else if(endgamestatus==2){//如果蛇咬到了自己Lostdraw();gotoxy(35,9);color(12);printf("对不起,您咬到自己了。游戏结束!");}else if(endgamestatus==3){//如果按ESC键退出Lostdraw();gotoxy(40,9);color(12);printf("您已经结束游戏了!");}gotoxy(43,12);color(13);printf("您的得分是 %d,score");if(score>=HighScore){//如果分数高于最高分color(10);gotoxy(33,16);printf("创纪录啦!最高分被你刷新了,真棒!!!");File_in();//把最高分写入文件}else{//如果分数低于最高分color(10);gotoxy(33,16);printf("继续努力吧 你离最高分还差 %d",HighScore-score);}choose();//边框下面的分支选项}void File_in(){//将最高分存储于文件中FILE *fp;fp=fopen("save.txt","w+");//以读写的方式建立一个名为save.txt的文件fprintf(fp,"%d",score);//把分数写进文件fclose(fp);//关闭文件
}void choose(){int n;gotoxy(25,23);color(12);printf("我要重新玩一把 -------- 1");gotoxy(52,23);printf("不玩了,退出吧 -------- 2");gotoxy(46,25);color(11);printf("选择:");scanf("%d",&n);switch(n){case 1:system("cls");score=0;//分数归零sleeptime=200;//设定初始速度add=10;//使add设定未初值,吃一个食物得10分printsnake();//返回欢迎界面welcometogame();break;case 2:exit(0);//退出游戏break;default:gotoxy(35,27);color(12);printf("***您的输入有误,请重新输入***");system("pause>nul");//按任意键endgame();choose();break;}}void explation(){int i,j=1;system("cls");color(13);gotoxy(44,3);printf("游戏说明");color(2);for(i=6;i<=22;i++){for(j=20;j<=75;j++){gotoxy(j,i);if(i==6||i==22)printf("||");if(j==20||j==25) printf("||");}}color(3);gotoxy(30,8);printf("tip1:不能穿墙,不能咬到自己");color(10);gotoxy(30,11);printf("tips2:用↑↓←→分别控制蛇的移动");color(14);gotoxy(30,14);printf("tip3:F1为加速,F2为减速");color(11);gotoxy(30,17);printf("tip4:按空格键暂停游戏,在按空格键继续");color(4);gotoxy(30,20);printf("tip5:ESC:退出游戏。space:暂停游戏");getch();system("cls");printsnake();welcometogame();}int main()
{system("mode con cols=100 lines=30");printsnake();welcometogame();File_out();keyboardControl();endgame();return 0;
}

贪吃蛇贪吃蛇代码--c语言版 visual c++6.0打开相关推荐

  1. 餐厅管理系统代码c语言,酒店管理系统代码(C语言版)

    <酒店管理系统代码(C语言版)>由会员分享,可在线阅读,更多相关<酒店管理系统代码(C语言版)(7页珍藏版)>请在人人文库网上搜索. 1.include #include #i ...

  2. 贪吃蛇分析和代码(详细版)

    贪吃蛇分析: 1, 构造蛇移动的地图====>PC端的游戏 浏览器上运行程序(JS) (1)使用div 创建地图元素 (2)添加到body中 (3)设置地图的元素的样式:js实现 (4)调用地图 ...

  3. c语言贪吃蛇最简单代码_C语言指针,这可能是史上最干最全的讲解啦(附代码)!!!...

    点击上方"大鱼机器人",选择"置顶/星标公众号"福利干货,第一时间送达!指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机 ...

  4. vs五子棋c语言代码,五子棋代码C语言版.doc

    #include #include #include #include #include struct rcd;//声明节点结构 typedef struct rcd* Record;//节点指针别名 ...

  5. 门诊挂号c语言程序代码,C语言版医院管理系统

    #include "stdio.h" #include "string.h" #include "stdlib.h" #include &q ...

  6. Mongo DB Codex Debug 代码-Python语言版-立哥开发

    Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 22:45:29) [MSC v.1916 32 bit (Intel)] on win32 Type ...

  7. 酒店管理系统的代码c语言,酒店管理系统代码C语言版.doc

    #include #include #include //房间信息结构体 struct Node { int Count; //指示该房间有多少个房客 char nameOne[20]; //房客1的 ...

  8. bat贪吃蛇游戏代码_C语言写个贪吃蛇游戏

    贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情.这个游戏我写完后放在知乎,竟然点赞的人数超级多.我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强的. 我试了说 ...

  9. 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(代码实现)

    软件实习项目2--贪吃喵(猫吃鱼版贪吃蛇)(代码实现) 类变量的定义以及类的初始化__init__ 一.游戏的逻辑 1.猫头的生成 2.鱼的生成 3.猫头和鱼骨的移动 4.按下键盘,改变方向 二.主窗 ...

  10. 贪吃蛇(C语言版)链表实现

    贪吃蛇 gitee:贪吃蛇C语言版: Snake 蛇的结构 typedef struct Snake {int x;int y;struct Snake *next; }; 游戏开始欢迎界面 //游戏 ...

最新文章

  1. Python代码:数字图像处理(DIP)7.1.1图像金字塔example7.1
  2. Java面向对象part2
  3. 未来计算机打蜡机,电脑洗车机的未来发展方向:多样化or精简化?
  4. airdrop 是 蓝牙吗_您可以在Windows PC或Android手机上使用AirDrop吗?
  5. JMM模型到并发编程
  6. java获取api接口新浪数据,新浪短网址API接口的获取以及API接口的调用文档分享...
  7. 一文看清深圳云栖阿里云重磅产品发布
  8. 谈MicroMessageTest的开始创建
  9. Spring Boot接口返回的字段名和实体类中定义的字段名不一致
  10. 调整自己,必须调整自己了
  11. Delphi创建ActiveX控件,实现安全接口及无界面代码
  12. c#、cefsharp 获取、提取 img、image 图片标签二进制数据
  13. Cabbage教学(1)——IO和变量
  14. 魅族ROOT在线申请地址
  15. 基于Spring的微服架构实战之问题记录
  16. MySQL数据库输入密码后闪退问题的解决方法
  17. 【已解决】将CentOS7系统安装至U盘(一):系统安装与使用
  18. ::before 和:before 区别
  19. Ubuntu下3G上网配置详解
  20. 3d打印热床的PEI/玻璃/晶格玻璃/柔性平台/弹簧钢板如何选择

热门文章

  1. Yandex浏览器 - 可以在手机上安装chrome插件的浏览器
  2. (一)使用RED5搭建流媒体服务器
  3. OPPOA83_OPPOA83T_官方线刷包_救砖包_解账户锁
  4. 一句话搞懂JavaSE、JavaEE和JavaME之间的区别
  5. 【Python爬虫实战】微信爬虫
  6. cad布局怎么用_【CAD】CAD布局怎么用?
  7. Tomcat安装与配置教程(图文教学)
  8. 【优化求解】基于布谷鸟算法CS实现单目标求解matlab源码
  9. 【74系列芯片的Verilog重现(一)】------74HC00
  10. 移动平均法,滑动平均模型法(Moving average,MA)