#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                        //蛇的状态 U:上 D:下 L:左 R:右
typedef struct snake               //蛇身的一个节点
{int x;                        //节点的x坐标 int y;                        //节点的y坐标struct snake *next;           //蛇身的下一个节点 }snake;int score=0,add=10;              //总得分和每吃一次食物的得分 int highscore=0;                 //最高分 int status,sleeptime=200;        //蛇前进状态,每次运行的时间间隔 snake *head,*food;               //蛇头指针,食物指针 snake *q;                        //遍历蛇时用的指针 int endgamestatus=0;             //游戏结束时的状态 HANDLE hOut;                      //控制台句柄 void gotoxy(int x,int y);int color(int c);void printsnake();void wlcome();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();main(){ system("mode con cols=100 lines=30");printsnake();wlcome();file_out();keyboardcontrol();endgame();}void gotoxy(int x,int y)//设置光标位置 {COORD c;c.X=x;c.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c); //定位光标的位置 }int color(int c)//设置颜色 {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);return 0;} void printsnake()//打印字符蛇 {gotoxy(2,5);color(3);printf("姓名:张小艾");gotoxy(2,6);color(3);printf("学号:1910101099");  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 wlcome()//欢迎界面 {int n;int i,j=1;gotoxy(43,18);color(11);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.退出游戏");gotoxy(29,27);color(3);printf("请选择1 2 3\n");color(14);scanf("%d",&n);switch(n){case 1: system("cls");//清屏 createmap();initsnake();createfood();keyboardcontrol();break;case 2:explation();break;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();gotoxy(64,4);color(11);printf("*最高纪录*: %d",highscore);gotoxy(64,8);color(14);printf("得分: %d ",score);color(13);gotoxy(73,11);printf("小提示");gotoxy(60,13);color(6);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;tail->next=NULL;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));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为蛇身上除蛇头以外的节点 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=sleeptime-10;add=add+2;}
}void speeddown()//减速
{if(sleeptime<350){sleeptime=sleeptime+30;add=add-2;if(sleeptime==350){add=1;}}
}void snakemove()//控制方向
{snake *nexthead;cantcrosswall();nexthead=(snake*)malloc(sizeof(snake));if(status==U)//上{nexthead->x=head->x;         //向上前进时,x不变,y-1 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; }//经过上面的循环 ,q指向蛇尾,蛇尾的下一步就是蛇走过去的位置 gotoxy(q->next->x,q->next->y);color(3);printf("■");//恢复走过的位置 free(q->next);q->next=NULL; }     } if(status==D){nexthead->x=head->x;         //向下前进时,x不变,y+1 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; }//经过上面的循环 ,q指向蛇尾,蛇尾的下一步就是蛇走过去的位置 gotoxy(q->next->x,q->next->y);color(3);printf("■");//恢复走过的位置 free(q->next);q->next=NULL; }}if(status==L)//左 {nexthead->x=head->x-2;         //向左前进时,x不变,y+1 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; }//经过上面的循环 ,q指向蛇尾,蛇尾的下一步就是蛇走过去的位置 gotoxy(q->next->x,q->next->y);color(3);printf("■");//恢复走过的位置 free(q->next);q->next=NULL; }   }if(status==R){nexthead->x=head->x+2;         //向上前进时,x不变,y-1 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; }//经过上面的循环 ,q指向蛇尾,蛇尾的下一步就是蛇走过去的位置 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();//GetAsyncKeyState函数用来判断函数调用指定虚拟键的状态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函数,令进程停止,直到达到其中设定的参数时间 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,j;gotoxy(17,5);color(11);printf("+------------------------");gotoxy(35,5);color(14);printf("o00o");gotoxy(39,5);color(11);printf("----------");gotoxy(48,5);color(14);printf("---");gotoxy(51,5);color(11);printf("----------");gotoxy(61,5);color(14);printf("o00o");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(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){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(); } choose();     }void file_in()//将最高分存储到文件中 {FILE *fp;fp=fopen("save.txt","w+");//以读写的方式建立文件 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;printsnake();wlcome();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("=");else if(j==20||j==75)printf("||");}}color(3);gotoxy(30,8);printf("1、不能穿墙,不能咬到自己");color(3);gotoxy(30,8);printf("1、不能穿墙,不能咬到自己");color(10);gotoxy(30,11);printf("2、用↑↓←→分别控制蛇的移动");color(14);gotoxy(30,14);printf("3、F1为加速,F2为减速");color(11);gotoxy(30,17);printf("4、按空格键暂停游戏,再按空格键继续");color(4);gotoxy(30,20);printf("5、ESC:退出游戏,space:暂停游戏");getch();//按任意键返回主界面system("cls");printsnake();wlcome(); }

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

  1. 贪吃蛇代码c语言改分,刚学C语言,想写一个贪吃蛇的代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; stru ...

  2. 贪吃蛇代码c 语言,刚学C语言,想写一个贪吃蛇的代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; stru ...

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

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

  4. stm32贪吃蛇代码c语言,STM32实现贪吃蛇

    本帖最后由 akwkevin2011 于 2012-7-14 14:47 编辑 STM32学习笔记二   竹天笑 呵呵,界面非常简单 要点:1.触摸屏校准信息保存在SD卡,不必每次开机都校准.(读写S ...

  5. c语言程序员写贪吃蛇代码28,厉害了,程序员28行代码写贪吃蛇游戏,附源码!...

    对于贪吃蛇游戏,大家基本上都玩过,但是作为一个程序员,大家是否想过要自己去写一个贪吃蛇,毕竟玩别人写的游戏和自己写的游戏是两种截然不同的感受,而且也可以通过制作来提升自己的技术! 其实贪吃蛇的逻辑并不 ...

  6. c语言联机游戏,C/C++ 游戏 贪吃蛇双人对战版

    贪吃蛇双人对战版--C语言 最近写的,用于交最后一次结构化程序设计课的作业,闲暇之余传到网上,仅供参考,新手上路,请多指教. 话不多说,先附上下载链接.http://download.csdn.net ...

  7. c语言安卓贪吃蛇代码下载,C语言贪吃蛇代码

    c语言编写贪吃蛇源代码,简单易懂,文件为VC源代码.如果你正在学习c语言,就来下载吧.很经典的 C语言贪吃蛇代码部分 #include #include #include#include #defin ...

  8. 贪吃蛇的c语言程序码,C语言贪吃蛇代码下载_C语言贪吃蛇代码官方下载-太平洋下载中心...

    C语言编写贪吃蛇源代码,简单易懂,文件为VC源代码.如果你正在学习c语言,就来下载吧.很经典的. C语言贪吃蛇代码原理: 产生一个固定大小没有边界的游戏区域,蛇从区域的中心开始,由玩家通过键盘控制蛇的 ...

  9. C语言贪吃蛇游戏(进阶版)

    一,实验游戏流程图(由结构与数组实现) 1.贪吃蛇游戏思路流程图(自作) 二,实验贪吃蛇全部代码(借鉴+修改) #include <stdio.h> #include <Window ...

  10. c语言字符蛇代码,C语言实现贪吃蛇代码

    本文实例为大家分享了C语言实现贪吃蛇代码的具体代码,供大家参考,具体内容如下 #include"stdafx.h" #include #include #include #incl ...

最新文章

  1. PInvoke复习之深入理解char*与wchar_t*与string以及wstring之间的相互转换
  2. linux前10ip,检查网口流量与前10名流量大IP
  3. mysql ef 随机排序_EFCore+Mysql倉儲層建設(分頁、多字段排序、部分字段更新)
  4. XML基础——extensible markup language
  5. PAT (Basic Level) Practice1020 月饼
  6. win10商店下载位置_win10应用商店下载的东西在哪
  7. 微软简体和繁体字体转换
  8. idea中Empty tag doesn‘t work in some browsers 浏览器中一片空白,没有渲染样式,
  9. WIFI系列协议--802.11s--Mesh网络
  10. 搜索引擎优化的优势及发展问题
  11. Java使用poi将list<Map>导出为表格
  12. 计算机硬件介绍之CPU与多线程
  13. 成熟才是男人应该有的标志//2021-2-15
  14. java web短信验证码_在Web项目中手机短信验证码实现的全过程记录
  15. 人生一定要知道的十大“博弈”!
  16. outlook邮件路径更改_如何在Outlook中更改电子邮件的“答复”地址
  17. 数据挖掘与分析——回归模型
  18. C语言初阶数据结构(四)栈(详细图解,简单上手,通俗易懂)
  19. 正式-日常作息(2020.11)
  20. WMS云端转型 势在必行

热门文章

  1. 小程序--模板的使用 说明--详细版的
  2. 前端高效开发不得不知道的一些JavaScript库!
  3. xps文件服务器端,XPS文档读取查看器
  4. 神经网络可以计算任何函数的可视化证明
  5. Mac使用RDC远程连接Windows并传输文件
  6. 编译原理期末试题(8套含答案)
  7. 什么是JavaScript异步编程?
  8. R语言环境下载及RStudio安装教程
  9. Unity UGUI源码解析
  10. (debian9.6上演示)linux压缩解压命令