C语言实现贪吃蛇

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<Windows.h>
#define FRAME 3
#define INFO 50
#define WIDTH 40
#define LENGTH 25
void setColor(int x, int y)
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);WORD word = x + y * 0x10;SetConsoleTextAttribute(handle, word);
}
void setPosition(int x, int y)
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD coord = { x,y };SetConsoleCursorPosition(handle, coord);
}
typedef struct _snake {int x[50];int y[50];int speed;int count;int length;
}Snake;
typedef struct _food {int x;int y;
}Food;
Snake snakeArray[2] = {{ { FRAME + 4 },{ FRAME + 4 },170,0,3 },{ { FRAME + 4 },{ FRAME + 4 },170,0,3 }
};
Food foodArray;
Snake* snake;
Food* food;
int i, j;
int deCoord[2];
int Time = 120;
void start()
{char  ch;int X = FRAME, Y = FRAME + 4;setPosition(FRAME, FRAME);printf("方向键移动光标,回车键确定(游戏前请关闭输入法!!!!)");setPosition(FRAME * 5, FRAME * 4);printf("kawayi90hou     贪吃蛇1.0");while (1){setPosition(FRAME, FRAME + 4);if (X == FRAME&&Y == FRAME + 4)setColor(0, 10);printf("开始游戏");setColor(10, 0);setPosition(FRAME, FRAME + 6);if (X == FRAME&&Y == FRAME + 6)setColor(0, 10);printf("结束游戏");ch = getch();if (ch == 80)Y += 2;if (ch == 72)Y -= 2;if (Y < FRAME + 4)Y = FRAME + 6;if (Y > FRAME + 6)Y = FRAME + 4;if (ch == '\r'){switch (Y){case FRAME + 4:system("cls");//清屏    break;case FRAME + 6:exit(0);break;}return;}}
}
void InitSnake()
{snake = &snakeArray[0];food = &foodArray;for (i = 1; i < snake->length; i++){snake->x[i] = snake->x[i - 1] + 2;snake->y[i] = snake->y[i - 1];}
}
void printSnake()
{for (i = 0; i < snake->length; i++){setPosition(snake->x[i], snake->y[i]);if (i == 0)printf("◆"); //★●■    else if (i == snake->length - 1)printf("■");else printf("●");}
}
void Map()
{for (i = 0; i < WIDTH + 1; i += 2){setPosition(FRAME + i, FRAME);printf("■");setPosition(FRAME + i, FRAME + LENGTH);printf("■");}for (i = 0; i < LENGTH + 1; i++){setPosition(FRAME, FRAME + i);printf("■");setPosition(FRAME + WIDTH, FRAME + i);printf("■");}setColor(13, 0);setPosition(INFO - 1, 2);printf("游戏说明:");setPosition(INFO, 4);printf("按方向键控制移动");setPosition(INFO, 5);printf("长按移动键可以加速");setPosition(INFO, 6);printf("时间为0时游戏结束");setPosition(INFO, 7);printf("按空格键暂停");
}
void moveSnake()
{setPosition(snake->x[0], snake->y[0]);printf(" ");for (i = 1; i < snake->length; i++){snake->x[i - 1] = snake->x[i];snake->y[i - 1] = snake->y[i];}
}
void printFood()
{srand(time(NULL));food->x = 2 * (rand() % (WIDTH - 4) / 2) + FRAME + 2;//必须保证所得的x坐标为偶数    food->y = 2 * (rand() % (LENGTH - 2) / 2) + FRAME + 1;for (i = 0; i < snake->length; i++){if (food->x == snake->x[i] && food->y == snake->y[i]){printFood();//重新随机产生一个食物    }}if (i == snake->length){setPosition(food->x, food->y);printf("★");return;//原来的食物被移动函数自带的空格符号清除    }
}
void eatFood()
{if (snake->x[snake->length - 1] == food->x&&snake->y[snake->length - 1] == food->y){snake->length++;for (i = snake->length - 1; i > 0; i--)//要不包括蛇头    {snake->x[i] = snake->x[i - 1];snake->y[i] = snake->y[i - 1];}snake->x[0] = deCoord[0];//蛇尾坐标倒退一位    snake->y[0] = deCoord[1];snake->count++;if (snake->count % 3 == 0)snake->speed -= 20;printFood();}
}
int ifDead()
{if (snake->x[snake->length - 1] == FRAME || snake->x[snake->length - 1] == FRAME + WIDTH)return 0;if (snake->y[snake->length - 1] == FRAME || snake->y[snake->length - 1] == FRAME + LENGTH)return 0;for (i = 0; i < snake->length - 1; i++){if (snake->x[snake->length - 1] == snake->x[i] && snake->y[snake->length - 1] == snake->y[i])return 0;}return 1;
}
void Info()
{//用来获取程序运行的时间    setColor(11, 0);setPosition(INFO - 1, 15);printf("贪吃蛇信息:");setPosition(INFO, 17);printf("速度:%d", snake->speed);setPosition(INFO, 18);printf("长度:%d", snake->length);setPosition(INFO, 19);printf("分数:%d", snake->count);setColor(14, 0);setPosition(INFO - 1, 21);printf("剩余时间:%d", Time);
}
int main()
{char key;setColor(10, 0);start();InitSnake();//定义的计时变量  clock_t start, end;start = clock();Map();Info();printSnake();printFood();key = getch();while (1){deCoord[0] = snake->x[0];//在吃掉食物前的一个坐标    deCoord[1] = snake->y[0];j = 0;if (kbhit()){key = getch();if (kbhit()){Sleep(20);j = 1;}}switch (key){case 72:moveSnake();snake->y[snake->length - 1]--;break;case 80:moveSnake();snake->y[snake->length - 1]++;break;case 75:moveSnake();snake->x[snake->length - 1] -= 2;break;case 77:moveSnake();snake->x[snake->length - 1] += 2;break;}printSnake();eatFood();end = clock();//要在程序执行到的那一刻用这个函数  Time = 120 - (end - start) / CLOCKS_PER_SEC;Info();if (j == 1)Sleep(20);else Sleep(snake->speed);if (ifDead() == 0 || snake->speed == 0){setColor(12, 0);if (ifDead() == 0){setPosition(FRAME + 12, LENGTH / 2);printf("G A M E O V E R");}if (snake->speed == 0){setPosition(FRAME + 6, LENGTH / 2);printf("GONGRATULATIONS");}setPosition(FRAME + 8, LENGTH / 2 + 1);printf("1:继续  2:重来  3:退出");key = getch();if (key == '1' || key == '2'){system("cls");setColor(10, 0);if (key == '2') snakeArray[0] = snakeArray[1];InitSnake();Map();Info();printSnake();printFood();key = getch();continue;}if (key == '3') break;}}return 0;
}

贪吃蛇 C语言实现代码相关推荐

  1. 贪吃蛇c语言 游戏中会出现障碍物,贪吃蛇C语言游戏代码.doc

    贪吃蛇C语言游戏代码 //开始编写游戏需要的类 #include //EasyX_2011惊蛰版(绘图库) #include #include #include #define UP1 #define ...

  2. C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全

    一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...

  3. unity贪吃蛇c 语言代码,unity实现简单贪吃蛇游戏

    本文实例为大家共享了unity实现贪吃蛇游戏的详细代码,供大家参考,详细内容如下 首先创建一个头部,编写脚本利用WASD控制头部的移动. Vector3 up=new Vector3(0,1,0); ...

  4. 50行的python游戏代码_50行代码实现贪吃蛇(具体思路及代码)

    [下载文档:  50行代码实现贪吃蛇(具体思路及代码).txt ] (友情提示:右键点上行txt文档名->目标另存为) 50行代码实现贪吃蛇(具体思路及代码) 最近一直在准备用来面试的几个小de ...

  5. 贪吃蛇c语言经典程序下载,C语言实现贪吃蛇游戏(单人版)

    本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 相比于第一个:贪吃蛇游戏,功能更加丰富 #include"snake.h" //蛇的移动 void m ...

  6. 贪吃蛇_C语言_链表实现_SCAU课程设计

    个人大一下课程设计作品,本文中直接附上源代码(通过visual stdio 2019 实现  ): 课题:贪吃蛇(链表实现~) 语言:C/C++ 运行环境(软件):Visual Stdio 2019( ...

  7. c语言课程设计贪吃蛇报告,贪吃蛇C语言课程设计报告.doc

    贪吃蛇C语言课程设计报告 贪吃蛇游戏设计 姓名: 张力 学号: 完成日期: 月 日 一.设计目的 贪吃蛇游戏程序功能的实现主要是建立在二维数组和图形界面的应用上,通过编写游戏程序能够熟悉掌握相关数组和 ...

  8. linux贪吃蛇c语言代码,C语言贪吃蛇讲解及源码

    { set_cursor_position(0, i); printf("■"); set_cursor_position(N+2, i); printf("■" ...

  9. 贪吃蛇c加加代码_C语言实现的贪吃蛇小游戏

    学习完C语言基础后,当然要做点小东西来巩固一下知识啦~~,之前做的学生信息管理系统是比较小的,搞定之后决定还是做个贪吃蛇的小游戏,这是学习C语言的经典入门小程序,下面简单地说下用C语言开发这个需要用到 ...

最新文章

  1. 复旦陈静静 | 把握当下,坚持热爱,与食物图像识别结缘的科研之路
  2. 运行hadoop自带的wordcount例子
  3. 随笔(2018.9.2.)
  4. 2013年长沙网络赛G题
  5. 使cmd窗口不自动关闭
  6. 「leetcode」763.划分字母区间【贪心算法】详细图解
  7. Shutdown In Period 1.0
  8. 车牌识别LPR(八)-- 字符识别
  9. [洛谷P3613]睡觉困难综合征
  10. 时间序列分析-ARMA模型
  11. 广告召回率是什么意思_推荐策略中的“召回”
  12. 让世界不再有“此生未完成”,臻和科技为患者带来守护之力
  13. C#日期格式参考小结
  14. 《论语》中关于“忧虑”的人生启示
  15. 哪种一致性哈希算法才是解决分布式缓存问题的王者?
  16. python中encode是什么意思_【转 记录】python中的encode以及decode
  17. ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步
  18. easyui filebox 上传图片预览
  19. HTML中标签th和td的区别
  20. VsCode 使用Latex最新教程

热门文章

  1. python 工资管理软件_Python3实现的简单工资管理系统示例
  2. cydia闪退解决方案
  3. MPC-M501 1Mbit/s 高速晶体管光耦代替 LTV-M501 滞后短,反应速度快
  4. iPhone 6plus 分辨率 为什么是 1242 2208
  5. java计算机毕业设计网络教学平台源码+数据库+系统+lw文档+mybatis+运行部署
  6. 在python语言中可作为源文件后缀名的是_在计价软件中可以新建下列哪些类型的项目( )...
  7. 加密文件/分区/磁盘工具VeraCrypt安装和使用简介
  8. 【数学建模入门】层次分析法
  9. (转载)Knuth-Morris-Pratt算法(简称KMP)学习
  10. 如何掌控自己的时间与生活