是你想要的贪吃蛇吗?
快来看看吧~



#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>//宏定义
#define UP 1
#define DOWN 2
#define LEFT 3
#define RIGHT 4typedef struct snake //链表,存放蛇身坐标
{int x;int y;struct snake *next; //蛇身的下一个节点
}snake;
snake *head = NULL;
snake *food = NULL;int score;
int add = 1;
int direction = RIGHT;
int sleepTime = 300;
int endStatus = 0;int setColor(int c);
int gotoXY(int x, int y);
int printSnake(void);
int welcomeGame(void);
int aboutGame(void);
int printMap(void);
int showScoreTips(void);
int readFile(void);
int initSnake(void);
int randFood(void);
int moveSnake(void);
int moveKeyControl(void);
int speedUp(void);
int isHitWall(void);
int isBiteSelf(void);
int failGameUi(void);
int endGame(void);
int writeFile(int score);
int snakeDestroy(void);int setColor(int c)
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);return 0;
} int gotoXY(int x, int y)
{COORD c;c.X = x;c.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);return 0;
} int printSnake(void)
{//清屏system("cls");gotoXY(35, 1);setColor(6);printf("/^\\/^\\");      //蛇眼睛gotoXY(34, 2);printf("|__|  O|");      //蛇眼睛gotoXY(33, 2);setColor(2);printf("_");gotoXY(25, 3);setColor(12);printf("\\/");          //蛇信gotoXY(31, 3);setColor(2);printf("/");gotoXY(37, 3);setColor(6);printf(" \\_/");        //蛇眼睛gotoXY(41, 3);setColor(10);printf(" \\");gotoXY(26, 4);setColor(12);printf("\\____");       //舌头gotoXY(32, 4);printf("_________/");gotoXY(31, 4);setColor(2);printf("|");gotoXY(43, 4);setColor(10);printf("\\");gotoXY(32, 5);setColor(2);printf("\\_______");    //蛇嘴gotoXY(44, 5);setColor(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("~--______-~                ~-___-~");}int welcomeGame(void)
{int i;int j;int n;printSnake();setColor(11);gotoXY(45, 18);printf("贪 吃 蛇 游 戏");setColor(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("|");}      else{printf(" "); }   }} //输出菜单 setColor(12);gotoXY(35, 22);printf("1.开始游戏");gotoXY(55, 22);printf("2.游戏说明");gotoXY(35, 24);printf("3.退出游戏"); setColor(3);gotoXY(27, 27);printf("请选择[1 2 3]: [   ]\b\b\b");scanf("%d", &n);getchar(); return n;
}int aboutGame(void)
{int i, j;system("cls");setColor(13);gotoXY(44, 3);printf("游戏说明");setColor(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("||");    }   else {printf(" ");}}  }//输出游戏说明界面 setColor(3);gotoXY(30, 8);printf("☆1: 不能穿墙,不能咬到自己");setColor(10);gotoXY(30, 11);printf("☆2: 用↑、↓、←、→控制蛇的移动方向");setColor(14);gotoXY(30, 14);printf("☆3: F1加速,F2减速");setColor(11);gotoXY(30, 17);printf("☆4: 按空格键暂停游戏,再按空格键继续");setColor(4);gotoXY(30, 20);printf("☆5: ESC退出游戏,spece暂停游戏");  gotoXY(20, 24);setColor(12);printf("请按下回车键返回主界面"); return 0;
}int printMap(void)
{int i=0, j=0;system("cls");//一个方块占两列 for(i=0; i<27; i++){for(j=0; j<57; j+=2)  {gotoXY(j, i);if(i == 0 || i == 26 || j == 0 || j == 56){setColor(5);printf("□");             }else{setColor(3);printf("■");}}} }int showScoreTips(void)
{int highScore = 0;setColor(11);gotoXY(64, 4);highScore = readFile(); printf("☆最高记录☆: %d", highScore);setColor(14);gotoXY(64, 8);printf("得分: %d", score    );setColor(12);gotoXY(72, 11);printf("温 馨 提 示");setColor(6);gotoXY(60, 13);printf("==============================");gotoXY(60, 25);printf("==============================");setColor(3);gotoXY(61, 14);printf("每个食物得分:%d", score);gotoXY(61, 16);printf("不能穿墙,不能咬到自己");gotoXY(61, 18);printf("用↑↓←→分别控制蛇移动方向");gotoXY(61, 20);printf("tip3: F1加速,F2减速");gotoXY(61, 22);printf("space: 暂停游戏");gotoXY(61, 24);printf("ESC: 退出游戏");
}int readFile(void)
{int n = 0; FILE *fp = NULL;//打开文件 fp = fopen("save.txt", "a+");if(NULL == fp){printf("打开文件失败、、、\n");return -1; }fscanf(fp, "%d", &n);fclose(fp);return n;}int initSnake(void)
{int i= 0;snake *new1 = NULL;snake *tmp = NULL;//创建四个蛇节点 for (i = 0; i < 4; i++){  //分配空间              new1 = (snake*)malloc(sizeof(snake));if(NULL == new1){printf("malloc failes...\n");break;}//清零 memset(new1, 0, sizeof(snake));//初始化列为偶数 new1->x = 24 + i * 2;new1->y = 5;//头插法 new1->next = head;head = new1;}tmp = head;while (NULL != tmp){setColor(14);gotoXY(tmp->x, tmp->y);if (head == tmp){printf("◆");}else{printf("★");}//指向下一个节点 tmp = tmp->next;}return 0;
}int randFood(void)
{snake *new2 = NULL;snake *tmp = NULL;//分配空间 new2 = malloc(sizeof(snake));if (NULL == new2){gotoXY(1, 28);printf("malloc failed...\n");return -1;}   while (1){        //清零 memset(new2, 0, sizeof(snake));//随机X值 while (1){//随机X值,为偶数 new2->x = rand() % 53 + 2;if (new2->x % 2 == 0){break;}}//1-25new2->y = rand() % 25 + 1;//判断食物不能在蛇身上tmp = head;while (NULL != tmp){if ((tmp->x == new2->x) && ( tmp->y == new2->y)){break;}tmp = tmp->next;}//食物不在蛇身上 if (NULL == tmp){gotoXY(new2->x, new2->y);setColor(12);printf("●");food = new2;break;}else{continue;}}return 0;
}int moveSnake(void)
{snake *new = NULL;snake *tmp = NULL;snake *save = NULL;     //保存上一个节点 //分配空间 new = malloc(sizeof(snake));if(NULL == new){printf("malloc failed...\n");return -1;       }   memset(new, 0, sizeof(snake));//向上 if(direction == UP){new->x = head->x;new->y = head->y-1; }//向下 if(direction == DOWN) {new->x = head->x;new->y = head->y+1;  }//向左 if(direction == LEFT){new->x = head->x-2;new->y = head->y;    }//向右 if(direction == RIGHT){new->x = head->x+2;new->y = head->y;  }//头插法new->next = head;head = new;//使用临时节点指向链表第一个节点tmp = head;//前面是否为食物if(head->x == food->x && head->y == food->y) {while (NULL != tmp){setColor(14);gotoXY(tmp->x, tmp->y);if (tmp == head){printf("◆");}else{printf("★");}//指向下一个节点 tmp = tmp->next;}//吃掉食物后,分数增加score += add;//随机食物randFood(); }else{//删除最后一个节点 while (NULL != tmp->next){setColor(14);gotoXY(tmp->x, tmp->y);if (tmp == head){printf("◆");}else{printf("★");}//保存tmp节点save = tmp; //指向下一个节点 tmp = tmp->next;}gotoXY(tmp->x, tmp->y);setColor(3);printf("■");save->next = NULL;free(tmp);tmp = NULL;      }   return 0; }int moveKeyControl(void)
{//默认向右 direction = RIGHT;while(1){showScoreTips();if(GetAsyncKeyState(VK_UP) && direction != DOWN){direction = UP;}if(GetAsyncKeyState(VK_DOWN) && direction != UP){direction = DOWN;} if(GetAsyncKeyState(VK_LEFT) && direction != RIGHT){direction = LEFT;}if(GetAsyncKeyState(VK_RIGHT) && direction != LEFT){direction = RIGHT;}if(GetAsyncKeyState(VK_SPACE)){while(1){if(GetAsyncKeyState(VK_SPACE)){break;}Sleep(200);}}       if(GetAsyncKeyState(VK_F1)){speedUp();}if(GetAsyncKeyState(VK_F2)){speedDown();}//ESC结束游戏 if(GetAsyncKeyState(VK_ESCAPE)){endStatus = 3;endGame();break;}moveSnake();if(isHitWall() == 1){endStatus = 1;endGame();break;}if(isBiteSelf()){endStatus = 2;endGame();break;}Sleep(sleepTime); }   return 0;
} int speedUp(void)
{if(sleepTime > 50){sleepTime -= 50;add +=2; }return 0;
}int speedDown(void)
{if(sleepTime <300){sleepTime += 10;add -=2; }if(sleepTime > 250){add =1; }return 0;
}int isHitWall(void)
{if(head->x == 0 || head->x == 56 || head->y == 0 || head->y == 26){return 1;}return 0;
}int isBiteSelf(void)
{snake *tmp = NULL;tmp = head->next;while(tmp != NULL){if(head->x == tmp->x && head->y == tmp->y){return 1;}tmp = tmp->next; }return 0;
}int failGameUi(void)
{system("cls");int i;gotoXY(46, 2);setColor(6);printf("\\\\\\|///");gotoXY(44, 3);printf("\\\\");setColor(15);gotoXY(47, 3);printf(".-.-");setColor(6);gotoXY(53, 3);printf("//");setColor(14);gotoXY(44, 4);printf("(");   //左耳朵setColor(15);gotoXY(47, 4);printf(".@.@");setColor(14);gotoXY(53, 4);printf(")");    //右耳朵 //边框  setColor(11);gotoXY(17, 5);printf("+-----------------");gotoXY(35, 5);setColor(14);printf("o00o");gotoXY(39, 5);setColor(11);printf("----------");gotoXY(48, 5);setColor(14);printf("(_)");gotoXY(51, 5);setColor(11);printf("----------");gotoXY(61, 5);setColor(14);printf("o00o");gotoXY(65, 5);setColor(11);printf("-----------------+");for(i=6; i<20; i++){gotoXY(17, i);printf("|");gotoXY(82, i);printf("|");}gotoXY(17, 20);printf("+----------------------------------");gotoXY(52, 20);setColor(14);printf("☆☆☆");gotoXY(60, 20);setColor(11);printf("----------------------+"); return 0;
} int endGame(void)
{system("cls");//显示失败界面边框 failGameUi(); int highScore=0;int n=0;while(1){gotoXY(38, 9);setColor(12);switch(endStatus){case 1:printf("对不起,您已撞墙,游戏结束!");break;case 2:printf("对不起,您咬到自己,游戏结束!");break;case 3:printf("您已经结束了游戏!");break;default:break;       }//显示得分 setColor(13);gotoXY(43, 12);printf("您的得分是:%d", score);//显示最高记录 highScore = readFile();if(score > highScore){setColor(10); gotoXY(38, 16);printf("您已创造新的最高记录!"); writeFile(score);} else{setColor(10);gotoXY(38, 16);printf("继续努力,离最高分还差:%d", highScore - score);      }//显示选择菜单setColor(12);gotoXY(25, 23);printf("我要再玩一局----1");gotoXY(52, 23);printf("不玩了,退出----2");setColor(11);gotoXY(46, 25);printf("请选择:[   ]\b\b\b");scanf("%d", &n);getchar();if(n == 1){//回到初始状态 sleepTime = 250;score = 0;add = 1;//销毁蛇节点 snakeDestroy();//初始化头指针 head = NULL;break;}else if(n == 2){exit(0); } else{setColor(12);gotoXY(30, 27);printf("您的输入有误,请重新输入,按下任意键继续");getchar();continue; }}return 0;
}int writeFile(int score)
{FILE *fp = NULL;fp = fopen("save.txt", "w");if(NULL == fp){printf("打开文件失败...\n");return -1;          }   fprintf(fp, "%d", score);return 0;
}int snakeDestroy(void)
{snake *tmp = NULL;snake *save = NULL;tmp = head;while(NULL != tmp){save = tmp->next;free(tmp);tmp = save; }   head = NULL;return 0;
}int main()
{//显示控制台宽高 system("mode con cols=100 lines=30");int n;while(1){system("cls");n = welcomeGame();switch(n){case 1:printMap();showScoreTips();initSnake();randFood();moveKeyControl();break;case 2:aboutGame();break;case 3:exit(0);break;default:;}getchar();}system("pause"); return 0;
}

贪吃蛇大作战游戏——C语言相关推荐

  1. html5小游戏 typescript,使用TypeScript和Canvas编写移动端贪吃蛇大作战游戏

    基本介绍 一款移动端贪吃蛇大作战游戏.(只支持移动端) 这是一个临近 deadline 的课设项目,为了方便地使用TS,我直接使用angular-cli生成了TypeScript的项目结构.如果你有好 ...

  2. 【项目实战】轻松实现C/C++大作业:贪吃蛇大作战游戏!

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

  3. 面向对象版贪吃蛇大作战游戏创作

    贪吃蛇大作战 创作思路: 1.创建蛇头蛇身-----2.让蛇动起来-----3.随机投放食物-----4.吃掉创建的食物------5.判断游戏开始结束 前期准备工作: 创建一个宽1200 高800的 ...

  4. 贪吃蛇大作战:C语言代码

    代码: 代码有点长, #include<stdio.h> #include<Windows.h> #include<time.h> #include<stdl ...

  5. 贪吃蛇大作战游戏攻略

    1.不去人群密集的地方 2.长大之后想要啥就有啥 3.跑马圈地,长大之后,要让身体占据更大的空间 4.不抢食物,头只在身体内运动,只有当外部空间比较大时再进行领土扩张 5.不抢食物,而是要围住食物之后 ...

  6. Android程序——经典贪吃蛇大作战逆向分析

    逆向分析 1. 实现目标 2. 使用工具 3. 实现原理 4. 核心思路 5. 实现过程 1. 实现内购 2.屏蔽游戏下线提醒信息 1. 实现目标 (1)屏蔽经典经典贪吃蛇大作战游戏的过期提醒 (2) ...

  7. laya游戏开发之贪吃蛇大作战(一)

    laya游戏开发之贪吃蛇大作战 一.背景 二.引擎选择 三.整体架构 3.1 玩法分析 3.2 游戏架构 3.3 技术选型 一.背景 需要快速实现一个贪吃蛇的 demo 以验证功能,非传统贪吃蛇玩法, ...

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

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

  9. JAVA 实现《贪吃蛇大作战》游戏|CSDN创作打卡

    前言 贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本.既简单又耐玩.该游戏通过控制蛇头方向吃东西,从而使得蛇变得越来越长. 本程序是通过java的swing来实现<贪吃 ...

最新文章

  1. 鸿蒙系统3.0演示,华为鸿蒙系统3.0-华为鸿蒙系统3.0官网申请地址预约 v1.0-优盘手机站...
  2. 4 RACMulticastConnection 连接类
  3. [持续更新]UnsatisfiedLinkError常见问题及解决方案
  4. 人脸识别,现在连动漫角色都不放过
  5. Web 开发规范 — WSGI
  6. DNS 流程说明以及相关问题的解析
  7. C#环境下的钩子详解
  8. VSCode开发.NETCore项目入门(1)设置中文语言环境
  9. 63万张!旷视发布最大物体检测数据集Objects365,物体检测竞赛登陆CVPR
  10. 3D VR卡镜的使用方法
  11. 2012最新网上购物排行榜
  12. python编程输入法_用Python写一个拼音输入法
  13. 创新工场 DeeCamp 2019 人工智能训练营启动报名,计划招收至少 600 名大学生...
  14. SpringBoot整合Cache缓存技术(二十一)
  15. 直播APP源码iOS 调用系统铃声震动
  16. 龙卷风java_程序设计-理解java继承-遁地龙卷风
  17. 基于SqlServer基本表的插入、修改和删除
  18. 图像质量评价数据库TID2013 网盘下载
  19. 测试 软通动力软件测试机试_软通动力软件测试笔试题.doc
  20. 思科网络安全 第四章考试答案

热门文章

  1. Python正则表达式模式
  2. 2021-2022年新版监控量测软件 边坡,基坑,隧道监测系统
  3. 那些家装巨头为什么都不融资了?
  4. IBM系列企业云计算产品和服务正式亮相
  5. 用什么擦地最干净脑筋急转弯_27个有意思的脑筋急转弯(含答案)
  6. 神经翻译笔记4扩展c. 2017-2019年间RNN和RNN语言模型的新进展
  7. 在计算机的游戏怎样打开,电脑上那个吃鸡游戏怎么打开 | 手游网游页游攻略大全...
  8. GIT科普系列5:index in git
  9. windows cmd cd进入目录无效
  10. openstack官方安装文档的解析--环境配置篇(1)