C语言入门项目篇:贪吃蛇

可直接运行。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
/*大一上的时候C语言入门学的一个小游戏。还是挺有意思的,有兴趣的同学可以继续优化下:比如蛇头碰到蛇身就判定为输 /给蛇身加点颜色等。
*/
//1.2食物结构体
#define MAPHEIGHT 25
#define MAPWIDTH 60
#define SNAKESIZE 50  //蛇的最大节数
struct FOOD
{int x;int y;
}food;#define SNAKESIZE 50  //蛇的最大节数
struct
{ //每一节蛇的坐标int x[SNAKESIZE];int y[SNAKESIZE];int len; //蛇长int speed; //
}snake;
///全局变量
int key='w';//初始化移动方向
int changFlag = 0;//蛇变化标记
//模块化设计
//
//1.画地图
void gotoxy(int x,int y); //实现的函数声明
void drawMap();
void createFood();
int snakeStatus();
void drawMap(){srand((unsigned)time(NULL)); //随机函数种子//1.圈地//1.1 左右边框for(int i=0;i<=MAPHEIGHT;i++){gotoxy(0,i);printf("■");gotoxy(MAPWIDTH,i);printf("■");}for(int i=0;i<=MAPWIDTH;i+=2) //上下  ■占用两个字符{gotoxy(i,0);printf("■");gotoxy(i,MAPHEIGHT);printf("■");}//2.画蛇  ■//2.1确定蛇的属性snake.len=3;snake.speed =100;snake.x[0]=MAPWIDTH/2;  //开始蛇头放屏幕中间snake.y[0]=MAPHEIGHT/2;//2.2画蛇头gotoxy(snake.x[0],snake.y[0]);printf("■"); //一节 x=2//画身体for(int k =1;k<snake.len;k++){snake.x[k]=snake.x[k-1]+2;snake.y[k]=snake.y[k-1];gotoxy(snake.x[k],snake.y[k]);printf("■");}//3.画食物  ● //3.1确定坐标food.x=rand()%(MAPWIDTH-4)+2;  //边框的宽度是2 占用两个字符 两边边框就是4food.y=rand()%(MAPHEIGHT-2)+1;  //上下各占一个if(food.x%2!=0){food.x=food.x+1;}//3.2 画出来就可以gotoxy(food.x,food.y);printf("●");}
//2.food
void createFood()
{//蛇头坐标等于食物坐标,就是吃了if(snake.x[0]==food.x && snake.y[0]==food.y){srand((unsigned int)time(NULL));//产生的食物不能在蛇的身上,并且坐标要是偶数 因为蛇头的宽度是偶数while(1){int flag=1;food.x=rand()%(MAPWIDTH-4)+2;food.y=rand()%(MAPHEIGHT-2)+1;//产生的食物不能在蛇身上for(int k=0;k<snake.len;k++){if(snake.x[k]==food.x&&snake.y[k]==food.y){flag = 0; //不合适的标志break;}}if(flag&&food.x%2==0){break;}}gotoxy(food.x,food.y);//产生新的食物printf("●");snake.len++;changFlag =1;//蛇的标记是1}
//gotoxy(food.x,food.y);//产生新的食物// printf("●");}
void keyDown() //3.按键操作
{//无按键的处理 原方向
if(_kbhit())
{//有按键fflush(stdin);key=_getch();
}
//擦除
if(!changFlag)
{gotoxy(snake.x[snake.len-1],snake.y[snake.len-1]);printf("  ");//两个空格擦掉尾巴。
}
//后面的蛇身
for(int i =snake.len-1;i>0;i--)
{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}
//移动方向的处理
switch(key)
{case 'W': //往上走 y--
case 'w':snake.y[0]--;break;
case 'S':
case 's':snake.y[0]++;break;
case 'A':
case 'a':snake.x[0]-=2;break;
case 'd':
case 'D':snake.x[0]+=2;break;}//画蛇头gotoxy(snake.x[0],snake.y[0]);printf("■");changFlag=0;gotoxy(MAPHEIGHT+2,0); //移动不能一直看着光标
}
int snakeStatus()  //4.蛇的状态:判断是否结束游戏
{if (snake.x[0]==0||snake.x[0]==MAPWIDTH||snake.y[0]==0||snake.y[0]==MAPHEIGHT){return 0;//蛇头不能撞自己for(int k=1;k<snake.len;k++){if(snake.x[0]== snake.x[k]&& snake.y[k]==snake.y[0])return 0;}}
return 1;
}
void gotoxy(int x,int y) //5.光标移动
{//调用win32 API去设置控制台的光标位置//1.找到控制台的这个窗口HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//2.光标的结构体COORD coord;//3.设置光标coord.X =x;coord.Y =y;//4.同步到控制台  Set Console Cursor PositionSetConsoleCursorPosition(handle,coord);
}int main(){drawMap();while(1){createFood();Sleep(snake.speed);//延时keyDown();if(!snakeStatus()){break;}}gotoxy(MAPWIDTH/2,MAPHEIGHT/2);printf("You lose!");system("pause"); //return 0;
}

C语言入门项目篇:贪吃蛇(完整代码+详细注释)相关推荐

  1. c语言实战项目之一 贪吃蛇(源码免费开放)

    朋友们,经过我的c语言前十章的知识,大家应该已经入门了,我个人认为学习c语言最好的方法就是造轮子,写项目就是最好的提高方法,可以把我们学过的知识串联起来. 源码如下: #include<stdi ...

  2. 花狗C语言彩色贪吃蛇(完整代码)

    2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 写在前面: 大家好,我是 花狗Fdog ,来自内蒙古的一个小城市,目前在泰州读书. 很感谢能有这样一个平 ...

  3. 计算机软件实习项目二 —— 贪吃蛇游戏 (代码实现) 12-16

    代码实现   不得不说python真是太香了,我感觉写起来比C++快,而且代码量更少,还有非常多十分方便的方法可以使用.在pycharm里有非常多的快捷键十分的方便,相较项目使用的visual stu ...

  4. 【C++】经典项目控制台贪吃蛇小游戏详细教程

    [小游戏]贪吃蛇GreedySnake 本文将讲解如何使用c++面向对象方法编写控制台版贪吃蛇小游戏 项目github地址:游戏源码链接 游戏下载:GreedySnake 本人属初学者,水平所限,难免 ...

  5. c语言贪吃蛇_C语言贪吃蛇完整代码

    #include #include #include //windows编程头文件 #include #include //控制台输入输出头文件 #ifndef __cplusplus typedef ...

  6. C++实现桶排序——十大经典排序算法之九【GIF动画+完整代码+详细注释】

    十大经典排序算法系列博客-->传送门 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定.桶排序 (Bucket sort)的工作的原理:假设输入数据服从均 ...

  7. 【从入门到入土系列】C语言制作小游戏-贪吃蛇:Copy+运行即可另附注释

    系列文章 本系列持续更新中,欢迎您的访问! 系列简介 本系列由唐文疏撰写,负责记录博主的学习生涯中的一点一滴.独乐乐不如众乐乐,故此分享给大家.欢迎大家一起讨论.学习和批评指点. 博主只是一个普普通通 ...

  8. 【C语言项目】贪吃蛇游戏(上)

    00. 目录 文章目录 00. 目录 01. 开发背景 02. 功能介绍 03. 欢迎界面设计 3.1 常用终端控制函数 3.2 设置文本颜色函数 3.3 设置光标位置函数 3.4 绘制字符画(蛇) ...

  9. 计算机课程编程设计贪吃蛇游戏设计,c语言课程设计报告--贪吃蛇游戏系统

    c语言课程设计报告--贪吃蛇游戏系统 院 系 计算机科学技术学院 班 级 组 长 学 号 指导教师 2017 年 3 月 2 日 C 语言语言基础课程设计基础课程设计 贪贪贪贪吃吃吃吃蛇蛇蛇蛇游游游游 ...

  10. python贪吃蛇代码课程设计_c语言课程设计之贪吃蛇代码及思路 c语言课程设计报告之贪吃蛇...

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8846529.html 注:本文档需与c语言课程设计之贪吃蛇文档配套使用.c语言实现贪吃蛇代码可 ...

最新文章

  1. java 判断object类型_Java学习-方法与多态的学习心得
  2. 科学家首次在野外直接观察到雀类新物种的快速形成
  3. Android弹出框的学习
  4. 3D 三角形的前面和后面
  5. VTK:图像卷积用法实战
  6. CodeForces - 1437E Make It Increasing(确定首尾的最长不下降子序列)
  7. java 接口文档工具_一款Java基于注释的接口文档生成工具
  8. 数学--数论--欧拉降幂--P5091 欧拉定理
  9. 睡觉时:新增的Java 8新增功能
  10. python polar函数_Python可视化很简单,可是你会吗?python绘制饼图、极线图和气泡图,让我来教教你吧,一文教会!!!...
  11. 数据结构(五)层次遍历
  12. MySQL备份失败,一波三折的问题分析和处理
  13. mysql+存储过程+模式,Mysql(7)---存储过程
  14. 模拟利器Mockito
  15. 带动量的随机梯度下降法_梯度下降法(SGD)原理解析及其改进优化算法
  16. 小米Android版本不不一致,小米5s卡刷包android版本不一致怎么解决
  17. 大学计算机基础教学存在的问题,浅谈大学计算机基础教学存在的问题及改进思路_优秀论文...
  18. [转载] 网友曝光:东方标准赴日培训90%可出国属欺诈
  19. 群晖使用Linux命令,群晖216++常用命令及dokcer使用笔记「持续更新」
  20. NRF51822蓝牙服务(9)——动态修改设备的名称

热门文章

  1. 一个很简单很简单的静态网页(附源代码)HTML+CSS
  2. Python调用海康威视网络相机_调用海康SDK
  3. SQL常用替换字符串值的5种方法
  4. 数据库 索引超出了数组界限
  5. Halcon深度学习超参数
  6. php 同义词词库,php实现seo伪原创,同义词替换 | 学步园
  7. 兰光bl2000_蓝光bl2000电梯主板.pdf
  8. c语言的常用英语单词和翻译,c语言通用英语词汇带翻译
  9. 计算机软考数据库怎么学,计算机软考数据库系统工程师学习笔记(二)
  10. AR Camera开发记录(三) -- 替换人脸贴图