代码:

代码有点长,

#include<stdio.h>
#include<Windows.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>#define U 1
#define D 2
#define L 3
#define R 4struct snake
{int x;int y;snake* next;
};int score = 0, add = 10;
int HighScore = 0;
int status = 0, Sleeptime = 200;
snake* head, * food;
snake* q;
int endgamestatus = 0;
HANDLE Hout;/*         函  数  声  明           */
int color(int c);                 //1
void gotoxy(int x, int y);        //2
void printsnake();                //3
void welcome_to_game();           //4
void createMap();                 //5
void score_and_tips();            //6
void File_out();                  //7
void initsnake();                 //8
void createfood();                //9
bool bitself();                   //10
void cantcrosswall();             //11
void speedup();                   //12
void speeddown();                 //13
void snakemove();                 //14
void keyboardControl();           //15
void Lostdraw();                  //16
void endgame();                   //17
void file_in();                   //18
void choose();                    //19
void explation();                 //20//主类型
int main()
{printsnake();welcome_to_game();return 0;
}/*          子    函    数          *///改变颜色
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()
{gotoxy(35, 1);color(6);printf("/^\\/^\\");gotoxy(34, 2);printf("|__|  o|");gotoxy(32, 2);color(2);printf("_");gotoxy(30, 3);color(2);printf("/      \\_/ \\");gotoxy(37, 3);color(6);printf("\\_/");gotoxy(30, 4);color(2);printf("|__________/\\");gotoxy(20, 3);color(12);printf("\\/");gotoxy(21, 4);color(12);printf("\\________ __________");gotoxy(30, 4);color(2);printf("|");gotoxy(41, 4);color(2);printf("/\\");gotoxy(30, 5);printf("\\______      \\");gotoxy(36, 7);printf("/      /");gotoxy(35, 8);printf("/      /");gotoxy(34, 9);printf("/      /                             \\");gotoxy(33, 10);printf("/      /                             \\   \\");gotoxy(32, 11);printf("/      /                               \\    \\");gotoxy(31, 12);printf("/      /            ----------- ~-       \\     \\");gotoxy(31, 13);printf("\\      \\_________-~                ~-      \\    \\");gotoxy(32, 14);printf("\\                    -~-----~-      ~-----       \\");gotoxy(33, 15);printf("\\_______________- ~           ~-________________/");printf("\n");
}//游戏欢迎界面
void welcome_to_game()
{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("-");if (j == 28 || j == 73)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_s("%d", &n);switch (n){case 1:system("cls");createMap();initsnake();createfood();File_out();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 = 1; 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 score_and_tips()
{File_out();color(11);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;fopen_s(&fp, "save.txt", "a+");fscanf_s(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;}gotoxy(30, 30);
}//绘制食物
void createfood()
{snake* food_1;food_1 = (snake*)malloc(sizeof(snake));food_1->x = 1;while ((food_1->x % 2) != 0){srand((unsigned)time(0));food_1->x = rand() % 52 + 2;}food_1->y = rand() % 24 + 1;q = head;while (q != NULL){if (q->x == food_1->y && q->y == food_1->y){free(food_1);createfood();return;}q = q->next;}gotoxy(food_1->x, food_1->y);food = food_1;color(12);printf("●");
}//判断是否咬到自己
bool bitself()
{snake* self;self = head->next;while (self != NULL){if (head->x == self->x && head->y == self->y)return true;self = self->next;}return false;
}//判断是否撞墙
void cantcrosswall()
{if (head->x == 0 || head->x == 56 || head->y == 0 || head->y == 26){endgamestatus = 1;endgame();}
}//蛇加速
void speedup()
{if (Sleeptime >= 50){Sleeptime -= 10;add += 2;}
}//蛇减速
void speeddown()
{if (Sleeptime < 350){Sleeptime += 30;add -= 2;}if (Sleeptime == 350)add = 1;
}//控制方向
void snakemove()
{snake* nexthead;nexthead = (snake*)malloc(sizeof(snake));cantcrosswall();if (status == U){nexthead->x = head->x;nexthead->y = head->y - 1;nexthead->next = head;head = nexthead;q = head;if (head->x == food->x && head->y == food->y){while (q != NULL){gotoxy(q->x, q->y);color(14);printf("☆");q = q->next;}score += add;createfood();speedup();}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;}}else if (status == D){nexthead->x = head->x;nexthead->y = head->y + 1;nexthead->next = head;head = nexthead;q = head;if (head->x == food->x && head->y == food->y){while (q != NULL){gotoxy(q->x, q->y);color(14);printf("☆");q = q->next;}score += add;createfood();speedup();}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;}}else 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 += add;createfood();speedup();}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;}}else 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 += add;createfood();speedup();}else{do{gotoxy(q->x, q->y);color(14);printf("☆");q = q->next;} while (q->next->next != NULL);gotoxy(q->next->x, q->next->y);color(3);printf("■");free(q->next);q->next = NULL;}}if (bitself()){endgamestatus = 2;endgame();}
}//用键盘控制蛇的走向
void keyboardControl()
{status = R;while (1){score_and_tips();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)){system("pause");if (GetAsyncKeyState(VK_SPACE)){continue;}}else if (GetAsyncKeyState(VK_ESCAPE)){endgamestatus = 3;endgame();break;}else if (GetAsyncKeyState(VK_F1)){speedup();}else if (GetAsyncKeyState(VK_F2)){speeddown();}Sleep(Sleeptime);snakemove();}
}//失败页面
void Lostdraw()
{system("cls");int i;gotoxy(46, 2);color(6);printf("\\\\\\|///");gotoxy(43, 3);printf("\\\\");color(15);gotoxy(47, 3);printf(".-.-");color(6);gotoxy(54, 3);printf("//");color(14);gotoxy(44, 4);printf("<");color(15);gotoxy(47, 4);printf(".@.@");color(14);gotoxy(54, 4);printf(">");color(11);gotoxy(17, 5);printf("+-----------------");color(14);printf("o00o");color(11);printf("---------");color(14);printf("<_>");color(11);printf("---------");color(14);printf("o00o");color(11);printf("-----------------+");gotoxy(17, 19);color(11);printf("+----------------------------");color(14);printf(" ☆☆☆ ");color(11);printf("----------------------------+");for (int i = 6; i < 19; i++){gotoxy(17, i);printf("|");gotoxy(82, i);printf("|");}gotoxy(30, 30);
}//游戏结束界面
void endgame()
{system("cls");if (endgamestatus == 1){Lostdraw();color(12);gotoxy(35, 9);printf("对不起,您撞到了墙,游戏结束。");}else if (endgamestatus == 2){Lostdraw();color(12);gotoxy(35, 9);printf("对不起,您咬到了自己,游戏结束。");}else if (endgamestatus == 3){Lostdraw();color(12);gotoxy(40, 9);printf("您已结束了游戏。");}color(13);gotoxy(43, 12);printf("您的得分是:%d\n", 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;fopen_s(&fp, "save.txt", "w+");fprintf(fp, "%d", score);fclose(fp);
}//边框下方的分支选项
void choose()
{int n;color(12);gotoxy(25, 22);printf("我要重新玩一局-----1");gotoxy(52, 22);printf("不玩了,退出吧-----2");color(15);gotoxy(46, 25);printf("选择:");scanf_s("%d", &n);switch (n){case 1:system("cls");score = 0;Sleeptime = 200;printsnake();welcome_to_game();break;case 2:exit(0);break;default:color(12);printf("※※您的输入有误,请重新输入。※※");gotoxy(51, 25);system("pause >nul");endgame();choose();break;}
}//游戏说明界面
void explation()
{int i, j = 1;system("cls");color(13);gotoxy(44, 3);printf("游戏说明");color(2);for (i = 20; i <= 75; ++i){for (j = 6; j <= 22; ++j){gotoxy(i, j);if (j == 6 || j == 22){printf("=");}if ((i == 20 || i == 74) && j != 6 && j != 22){printf("||");}}}color(3);gotoxy(30, 8);printf("tip1:不能穿墙,不能咬到自己。");color(10);gotoxy(30, 11);printf("tip2:用↑↓←→分别控制蛇的移动");color(14);gotoxy(30, 14);printf("tip3:F1为加速,F2为减速。");color(11);gotoxy(30, 17);printf("tip4:按space空格键暂停,再按空格键继续。");color(4);gotoxy(30, 20);printf("ESC:退出游戏。Space:暂停游戏。");_getch();system("cls");printsnake();welcome_to_game();
}

运行效果:

1.欢迎界面

2.游戏界面:

3.失败界面:

4.游戏说明界面:

贪吃蛇大作战:C语言代码相关推荐

  1. 【经典游戏】贪吃蛇大作战java游戏代码讲解

    <贪吃蛇大作战>一个简单到不行的游戏,也不知道怎么就火了.反正一款游戏火了,各路媒体.专家总能说出种种套路来,所以我就不发表意见了.不过这实在是一个挺好实现的游戏,于是一时技痒,拿 jav ...

  2. laya游戏开发之贪吃蛇大作战(二)—— 贪吃蛇客户端

    文章目录 一 功能分析 二 实现方案 1. 代码结构 2. 关键函数实现 2.1 游戏主循环(GameLoop) 2.2 数据层(Model) 2.3 画面绘制层(View) 帧同步的困难与解决方法 ...

  3. python 贪吃蛇大作战_Python实现贪吃蛇大作战

    本文给大家分享的是一个使用cocos2d-python游戏引擎库制作出来的贪吃蛇大作战的游戏代码,基于Python 2.7 和 cocos2d 库,有需要的小伙伴可以参考下 感觉游戏审核新政实施后,国 ...

  4. C语言高仿贪吃蛇大作战,800行代码就能实现,结尾有源码~

    这是一个贪吃蛇大作战类游戏,修改特性为 AI 不互杀: 该程序有四个类:蛇基类 SnakeBase,玩家类 Player,AI 类,Game 类: SnakeBase 和 AI 均继承自 SnakeB ...

  5. 贪吃蛇大作战代码java,贪吃蛇游戏,贪吃蛇java游戏代码讲解

    贪吃蛇游戏,贪吃蛇java游戏代码讲解 来源:互联网 作者:佚名 时间:2020-06-06 贪吃蛇源代码.txt这世界上除了我谁都没资格陪在你身边. 听着,我允许你喜欢我.除了白头偕老,我们... ...

  6. python贪吃蛇程序_Python 实现 贪吃蛇大作战 代码分享

    感觉游戏审核新政实施后,国内手游市场略冷清,是不是各家的新游戏都在排队等审核.媒体们除了之前竞相追捧<Pokemon Go>热闹了一把,似乎也听不到什么声音了.直到最近几天,突然听见好几人 ...

  7. python 贪吃蛇大作战_Python 实现 贪吃蛇大作战 代码分享

    感觉游戏审核新政实施后,国内手游市场略冷清,是不是各家的新游戏都在排队等审核.媒体们除了之前竞相追捧<Pokemon Go>热闹了一把,似乎也听不到什么声音了.直到最近几天,突然听见好几人 ...

  8. 实验二 代码 + 贪吃蛇大作战(360°寻路+AI自动蛇)

    目录 一.实验目的 二.实验内容 三.实验过程展示 四.实验成果 五.实验代码 一.实验目的 1.实现基本的贪吃蛇的运动操作 2.实现AI蛇的自动运动 3.实现360°全方位运动 4.实现积分,死亡, ...

  9. 贪吃蛇大作战撞墙不死c语言,贪吃蛇大作战无敌版

    贪吃蛇大作战无敌版是款好玩的休闲类的游戏,游戏中拥有十分简单的画风,玩法十分的简单,你在游戏中简直是无敌的存在,贪吃蛇大作战无敌版撞到别人身上不会死,还可以随意翻出去,让你从此横行霸道于群蛇之间.玩法 ...

  10. 贪吃蛇 c语言 不死模式,贪吃蛇大作战不死版v1.0安卓手机版

    游戏标签 贪吃蛇大作战 贪吃蛇大作战是一款原生态ios平台移植到安卓平台超好玩的休闲竞技小型游戏,今天艾艾给你带来的是贪吃蛇大作战不死版,言一之说就是不管你怎么撞都不会死,你有无数条生命,让你玩到刷新 ...

最新文章

  1. HTMLDOM中三种元素节点、属性节点、文本节点的测试案例
  2. C#创建MQTT客户端接收服务器信息
  3. 解决eclipse project前出现红色感叹号 但没有提示错误出在什么地方build path jar包也没报错...
  4. 出现次数超过一半的数字
  5. Py之portalocker:portalocker的简介、安装、使用方法之详细攻略
  6. classpath*: 和classpath:有什么区别_我们可以从Java“HelloWorld”中学到什么?
  7. 熊猫分发_熊猫新手:第一部分
  8. 机器人 瓷砖墙面清洗_墙壁清洁机器人解析
  9. 核心显卡是新一代的智能图形核心
  10. 怎样成为一名A“.NET研究”ndroid开发者
  11. django报错:ImproperlyConfigured和AppRegistryNotReady
  12. 《图像处理、分析与机器视觉》(第4版)阅读笔记——第五章 图像预处理
  13. [Android]进程通信Andromeda框架
  14. 招银网络 Java开发-二面面经
  15. ozip解密_【ozip转换解包】ROM制作工具已适配机型列表,全网最全!
  16. 十年总结(15):产品化-有心杀敌,无力回天
  17. Ubuntu16.04安装搜狗输入法的正确姿势
  18. linux收发包内核进程名称,Linux内核IP Queue机制的分析(一)——用户态接收数据包...
  19. 小米civi价格偏贵,要赢得消费者认可不容易
  20. KiCad 6 版本体验记录

热门文章

  1. 网易回应暴力裁员事件并道歉!程序员曝亲身经历逼迫、算计、监视、陷害、威胁,甚至被保安赶出公司...
  2. DataGrid 数据绑定使用小结二(自定义列)
  3. 推荐几个方法教你学会怎样制作视频剪辑
  4. Linux sed使用方法
  5. loadrunner Web_类函数之web_set_user()
  6. SpringGateway网关
  7. 先人들의 白頭山 登程路
  8. 电商后台设计:商品维护
  9. 扫雷游戏9*9(详细到具体每一步)
  10. 乐教乐学各关的解(61-70)