最近看到身边有些朋友抱怨,网上的贪吃蛇项目完整源码太少,或者说运行不了,甚至还有花钱购买的情况,作为你们的过来人,学长了解你们期末考试的苦,今天的博客我就不啰嗦,我直接放代码给你们。
所有功能都实现了,欢迎测试。

#include<stdio.h>#include<time.h>#include<windows.h>#include<stdlib.h>#define U 1#define D 2#define L 3 #define R 4 //蛇的状态,U:上 ;D:下;L:左 R:右typedef struct SNAKE //蛇身的一个节点{int x;int y;struct SNAKE *next;}snake;//全局变量//int score=0,add=10;//总得分与每次吃食物得分。int status,sleeptime=200;//每次运行的时间间隔snake *head, *food;//蛇头指针,食物指针snake *q;//遍历蛇的时候用到的指针int endgamestatus=0; //游戏结束的情况,1:撞到墙;2:咬到自己;3:主动退出游戏。//声明全部函数//void Pos();void creatMap();void initsnake();int biteself();void createfood();void cantcrosswall();void snakemove();void pause();void gamecircle();void welcometogame();void endgame();void gamestart();void Pos(int x,int y)//设置光标位置{COORD pos;HANDLE hOutput;pos.X=x;pos.Y=y;hOutput=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOutput,pos);}void creatMap()//创建地图{int i;for(i=0;i<58;i+=2)//打印上下边框{Pos(i,0);printf("■");Pos(i,26);printf("■");}for(i=1;i<26;i++)//打印左右边框{Pos(0,i);printf("■"); Pos(56,i);printf("■"); }}void initsnake()//初始化蛇身{snake *tail;int i;tail=(snake*)malloc(sizeof(snake));//从蛇尾开始,头插法,以x,y设定开始的位置//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)//从头到为,输出蛇身{Pos(tail->x,tail->y);printf("■");tail=tail->next;}}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 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;}Pos(food_1->x,food_1->y);food=food_1;printf("■");}void cantcrosswall()//不能穿墙{ if(head->x==0 || head->x==56 ||head->y==0 || head->y==26){endgamestatus=1;endgame();}}void snakemove()//蛇前进,上U,下D,左L,右R{snake * nexthead;cantcrosswall();nexthead=(snake*)malloc(sizeof(snake));if(status==U){nexthead->x=head->x;nexthead->y=head->y-1;if(nexthead->x==food->x && nexthead->y==food->y)//如果下一个有食物//{nexthead->next=head;head=nexthead;q=head;while(q!=NULL){Pos(q->x,q->y);printf("■");q=q->next;}score=score+add;createfood();}else //如果没有食物//{nexthead->next=head;head=nexthead;q=head;while(q->next->next!=NULL){Pos(q->x,q->y);printf("■");q=q->next; }Pos(q->next->x,q->next->y);printf(" ");free(q->next);q->next=NULL;}}if(status==D){nexthead->x=head->x;nexthead->y=head->y+1;if(nexthead->x==food->x && nexthead->y==food->y) //有食物{nexthead->next=head;head=nexthead;q=head;while(q!=NULL){Pos(q->x,q->y);printf("■");q=q->next;}score=score+add;createfood();}else //没有食物{nexthead->next=head;head=nexthead;q=head;while(q->next->next!=NULL){Pos(q->x,q->y);printf("■");q=q->next; }Pos(q->next->x,q->next->y);printf(" ");free(q->next);q->next=NULL;}}if(status==L){nexthead->x=head->x-2;nexthead->y=head->y;if(nexthead->x==food->x && nexthead->y==food->y)//有食物{nexthead->next=head;head=nexthead;q=head;while(q!=NULL){Pos(q->x,q->y);printf("■");q=q->next;}score=score+add;createfood();}else //没有食物{nexthead->next=head;head=nexthead;q=head;while(q->next->next!=NULL){Pos(q->x,q->y);printf("■");q=q->next; }Pos(q->next->x,q->next->y);printf(" ");free(q->next);q->next=NULL;}}if(status==R){nexthead->x=head->x+2;nexthead->y=head->y;if(nexthead->x==food->x && nexthead->y==food->y)//有食物{nexthead->next=head;head=nexthead;q=head;while(q!=NULL){Pos(q->x,q->y);printf("■");q=q->next;}score=score+add;createfood();}else //没有食物{nexthead->next=head;head=nexthead;q=head;while(q->next->next!=NULL){Pos(q->x,q->y);printf("■");q=q->next; }Pos(q->next->x,q->next->y);printf(" ");free(q->next);q->next=NULL;}}if(biteself()==1) //判断是否会咬到自己{endgamestatus=2;endgame();}}void pause()//暂停{while(1){Sleep(300);if(GetAsyncKeyState(VK_SPACE)){break;}}}void gamecircle()//控制游戏 {Pos(64,15);printf("不能穿墙,不能咬到自己\n");Pos(64,16);printf("用↑.↓.←.→分别控制蛇的移动.");Pos(64,17);printf("F1 为加速,F2 为减速\n");Pos(64,18);printf("ESC :退出游戏.space:暂停游戏.");Pos(64,20);printf("我的贪吃蛇游戏");status=R;while(1){Pos(64,10);printf("得分:%d ",score);Pos(64,11);printf("每个食物得分:%d分",add);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;}else if(GetAsyncKeyState(VK_SPACE)){pause();}else if(GetAsyncKeyState(VK_ESCAPE)){endgamestatus=3;break;}else if(GetAsyncKeyState(VK_F1)){if(sleeptime>=50){sleeptime=sleeptime-30;add=add+2;if(sleeptime==320){add=2;//防止减到1之后再加回来有错}}}else if(GetAsyncKeyState(VK_F2)){if(sleeptime<350){sleeptime=sleeptime+30;add=add-2;if(sleeptime==350){add=1; //保证最低分为1}}}Sleep(sleeptime);snakemove();}}void welcometogame()//开始界面{Pos(40,12);system("title 贪吃蛇游戏");printf("欢迎来到贪食蛇游戏!");Pos(40,25);system("pause");system("cls");Pos(25,12);printf("用↑.↓.←.→分别控制蛇的移动, F1 为加速,2 为减速\n");Pos(25,13);printf("加速将能得到更高的分数。\n");system("pause");system("cls");}void endgame()//结束游戏{system("cls");Pos(24,12);if(endgamestatus==1){printf("对不起,您撞到墙了。游戏结束.");}else if(endgamestatus==2){printf("对不起,您咬到自己了。游戏结束.");}else if(endgamestatus==3){printf("您的已经结束了游戏。");}Pos(24,13);printf("您的得分是%d\n",score);exit(0);}void gamestart()//游戏初始化{system("mode con cols=100 lines=30");welcometogame();creatMap();initsnake();createfood();}int main(){gamestart();gamecircle();endgame();return 0;}

运行结果:

完整!贪吃蛇游戏c语言代码分享(包括界面,计数,提示)相关推荐

  1. 贪吃蛇游戏 C语言程序设计

    <计算机程序设计>课程设计报告 课 题 名 称贪吃蛇游戏 班       级 软件1班 姓       名 neolone 目录 1 需求分析... 1 2 系统分析和设计... 1 2. ...

  2. Linux 贪吃蛇游戏 -C语言(本人的第一篇博文)

    一.Ncurses库简介: 1.curses是一个在Linux/Unix下广泛应用的图形函数库, 作用是可以在终端内绘制简单的图形用户界面. 2.Nurses库头文件:#include <cur ...

  3. 贪吃蛇c++语言程序,利用C/C++实现较完整贪吃蛇游戏

    记得在大一时刚学习c/c++语言,学到一半突然想用这门语言做一些小游戏出来,首先想到的便是贪吃蛇.于是本人利用空余时间写出了这么一个简单的小游戏. 由于当时的我还没有能力构造出用户界面,故直接使用do ...

  4. 贪吃蛇游戏的C++代码

    游戏效果: 在这里插入代码片 #include <iomanip> #include <windows.h> #include <conio.h> using na ...

  5. 涂格子游戏html,网页版方格贪吃蛇游戏html源码分享

    html源码,要做网页的话复制源码新建一个文本文档粘贴进去,然后文本文档改名snake.html即可. 体验地址:点击进入 玩法:用键盘的上下左右控制. 贪吃蛇-陌涛博客www.imotao.com ...

  6. 贪吃蛇的c语言代码怎么弄,刚学C语言,想写一个贪吃蛇的代码

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

  7. c语言字符蛇代码,贪吃蛇游戏c语言源贪吃蛇代码代码学习

    1########蛇的状态,U:上:D:下:L:左R:右蛇身的一个节点12{ 13intx; 14inty; 15structSNAKE*next; 16}snake; 1718//全局变量// 19 ...

  8. 利用C/C++实现较完整贪吃蛇游戏

    利用空余时间写出了这么一个简单的小游戏,直接使用dos界面运行.那么问题来了,如何让一个字符在dos界面上自由移动???对于这个问题我采用的解决方案是实现gotoxy函数来控制指针位置从而实现字符的移 ...

  9. 用c语言写一个贪吃蛇游戏代码

    首先,贪吃蛇是一个经典的游戏,主要通过控制一条蛇在地图上吃食物,不断长长身体,最终实现最高分数. 以下是使用C语言编写贪吃蛇游戏的示例代码: ``` #include<stdio.h> # ...

最新文章

  1. 个人作业1——四则运算题目生成程序(基于控制台)
  2. 基于数字移相信号发生器的频率相位差测量系统的FPGA实现
  3. matlab怎么求矩阵的范数
  4. 计算机科学与技术专业实习招聘,中科院研究生院招聘GIS或计算机专业实习生
  5. c 给定字符串中查找_【C进阶】练习题(一)
  6. 【kafka】 Error when handling request Name: FetchRequest cannot compare its segment info since it only
  7. python安装成功之后教程_Python安装教程
  8. alibaba java_阿里巴巴JAVA开发手册最新版插件Alibaba Java Coding Guidelines安装及使用...
  9. 适用于Windows的Xcode:在PC上安装Xcode的5种方法
  10. opencc对文档的繁体中文转换为简体
  11. webshell、一句话木马的权限问题
  12. excel分析数据的工具有哪些?
  13. win7 报错 failed to install servicefailed installing
  14. 最好用的股市技术指标
  15. android Toast
  16. 南京大学java机试,2019南京大学计算机本科生开放日机试
  17. LeetCode 287---Find the Duplicate Number
  18. 华为魔术magic2拆机图_荣耀Magic2拆解:蝶式五轨滑屏 + 前后六摄
  19. 《童虎学习笔记》PostgreSQL超简单新手入门教程
  20. 河北新华计算机学校贴吧,读石家庄新华电脑学校“骗人黑幕”的幕后黑手???...

热门文章

  1. 系统穿越频率用matlab,基于Matlab的自动控制系统设计
  2. MacBook PRO Mysql的安装过程
  3. 电子产品可靠性测试公司/报告/费用/机构
  4. Linux系统安装字体。在代码中生成图片时中文乱码
  5. Can‘t find Python executable “c:\Python27\python.exe“, you can set the PYTHON env variable.
  6. 各类3D建模格式转换gltf格式【来源一个建模APP客户问题解决】
  7. 3.MySQL数据类型
  8. 我是一只IT小小鸟读后感 Part 1
  9. NVIDIA控制面板打开后闪退
  10. windows下OpenCV安装教程以及vs2019配置opencv教程