---恢复内容开始---

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>

//描述蛇的节点信息
typedef struct SnakeNode
{
int x;
int y;
} Snode;

//箱子:放置蛇的所有节点
Snode snakes[100];
//保存用户选择的方向
char dir='l'; // u d l r
//保存食物
Snode food;
//蛇身有效长度
int size=5;
//速度
int speed=300;

/**
自定义一个功能函数:给我一个坐标,我就能够把你定位
*/
void setPosition(int x,int y)
{
COORD point;
point.X=x;
point.Y=y;
//重置坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),point);
}

/**
显示友好的游戏界面
*/
void wellcome()
{
setPosition(30,10);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),9);
printf("欢迎来到贪吃蛇的世界!");
setPosition(30,15);
//暂停
system("pause");
//清屏createFood
system("cls");
//输出操作提示
setPosition(30,10);
printf("使用向上、向下、向左、向右的方向键控制蛇的方向");
setPosition(30,11);
system("pause");
system("cls");
}

/*
功能模块:绘制围墙 1B=8bit A:1B 中文:2B
*/
void paintWall()
{
int index=0;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
//上边。下边
for(index=0; index<58; index=index+2)
{
setPosition(index,0);
printf("■");
setPosition(index,26);
printf("■");
}
//左边、右边akes[0].x=oldX+2;
for(index=1; index<=26; index++)
{
setPosition(0,index);
printf("■");
setPosition(56,index);
printf("■");
}
}

/*检查新生成的食物的坐标是否和蛇身重合
*/
int isTogether(int x,int y)
{
int index=0;
for(index=0; index<size; index++)
{
if(snakes[index].x==x && snakes[index].y==y)
{
//重合
return 1;
}
}
//没有重合
return 0;
}

/*
创建食物
*/
void createFood()
{
//随机数字
//随机种子
int randX=0;
int randY=0;
srand(time(0));
//食物坐标随机
randY=rand()%24+1;
do
{
//只是能偶数
randX=rand()%54+2;
//检查是否和蛇身重合
}
while(!(randX%2==0 && isTogether(randX,randY)==0)) ;

food.x=randX;
food.y=randY;
setPosition(food.x,food.y);
printf("■");
}

/*
显示蛇:节点 蛇头 5节点
*/
void initSnake()
{
//蛇的节点起点位置
int x=24;
int y=5;
int index=0;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),8);
//输出5个节点
for(index=0; index<size; index++, x=x+2)
{
//设置节点的坐标
snakes[index].x=x;
snakes[index].y=y;
setPosition(snakes[index].x,snakes[index].y);
printf("■");
}
}

/*
清除蛇身图形
*/
void clearSnake()
{
int index=0;
for(index=0; index<size; index++)
{
setPosition(snakes[index].x,snakes[index].y);
printf(" ");
}
}

/*
解析用户的按键,改变方向值
*/
void selDir()
{

if(GetAsyncKeyState(VK_UP) && dir!='d' )
{
dir='u';
}
else if(GetAsyncKeyState(VK_DOWN) && dir!='u' )
{
dir='d';
}
else if(GetAsyncKeyState(VK_LEFT) && dir!='r')
{
dir='l';
}
else if(GetAsyncKeyState(VK_RIGHT) && dir!='l')
{
dir='r';
}
}

/*
移动蛇
*/
void moveSnake()
{

//蛇头的原来坐标
int oldX=snakes[0].x;
int oldY=snakes[0].y;
//两个临时变量
int tempX=0;
int tempY=0;
int index=0;
//重置一个新坐标
switch(dir)
{
case 'u':
snakes[0].x=oldX;
snakes[0].y=oldY-1;
break;
case 'd':
snakes[0].x=oldX;
snakes[0].y=oldY+1;
break;
case 'l':
snakes[0].x=oldX-2;
snakes[0].y=oldY;
break;
case 'r':
snakes[0].x=oldX+2;
snakes[0].y=oldY;
break;
}

//检查蛇头是否和食物重合
if(snakes[0].x==food.x && snakes[0].y==food.y)
{
size++;
createFood();
speed-=50;
if(speed<=0){
speed=10;
}
}
//检查蛇头是否碰到墙
if( snakes[0].x<=2 || snakes[0].x>54 || snakes[0].y<1 || snakes[0].y>26 )
{
//碰到墙
system("cls");
printf("gameover");
system("pause");
exit(0);
}
//自己吃自己
for(index=1; index<size; index++)
{
if(snakes[0].x==snakes[index].x && snakes[0].y==snakes[index].y)
{
//碰到墙
system("cls");
printf("gameover");
system("pause");
exit(0);
}
}

setPosition(snakes[0].x,snakes[0].y);
printf("■");
//移动除了蛇头之外的节点
for(index=1; index<size; index++)
{
//在移动节点之前保存节点的坐标
tempX=snakes[index].x;
tempY=snakes[index].y;
//重新指定新坐标,前一个节点留下的空白
snakes[index].x=oldX;
snakes[index].y=oldY;
//指定光标点
setPosition(snakes[index].x,snakes[index].y);
printf("■");
//重置原坐标
oldX=tempX;
oldY=tempY;
}
}

//主函数:语法结构(固定)运行时候,起点
int main()
{
wellcome();
//绘制围墙
paintWall();
initSnake();
createFood();
//清除蛇原来的图形
while(1)
{
selDir();
clearSnake();
moveSnake();
Sleep(speed);
}
return 0;
}

---恢复内容结束---

c语言 贪食蛇小游戏的更多相关文章

  1. Javascript贪食蛇小游戏

    试玩:http://hovertree.com/game/9/ 贪吃蛇是一种风靡全球的小游戏,就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的蛋,越吃越长.只要蛇头碰到屏幕四周,或者碰到自己的身子, ...

  2. 简单的C语言猜数字小游戏

    猜数字小游戏可谓是C语言最为基础的一个知识点了,我们可以在此基础上进行延伸,实现随机数的猜测,然后是加入再来一局的模式,等等.这里是抛砖引玉,希望你能做出你的经典之作. #include <st ...

  3. C语言实现2048小游戏

    目录 2048 一.设计思路 1.游戏规则 2.思路 二.代码实现 1.存储结构 2.初始化游戏数据 3.向左合并 4.其他方向合并 5.产生新的方块 6.源代码 7.实例演示 三.问题 2048 一 ...

  4. c语言----<项目>_小游戏<2048>

    2048 小游戏 主要是针对逻辑思维的一个训练. 主要学习方面:1.随机数产生的概率.2.行与列在进行移动的时候几种情况.3.MessageBox的使用 #include <iostream&g ...

  5. 【C语言程序设计】小游戏之俄罗斯方块(一)!适合初学者上手、练手!

    俄罗斯方块的核心玩法非常简单,所以制作起来并不是很复杂,我准备先用2篇文字的篇幅详细讲解一下俄罗斯方块的制作方法. 今天咱们算是第一篇,主要讲解俄罗斯方块中如何定义方块,以及如何实现方块的移动.旋转. ...

  6. 【C语言程序设计】小游戏之俄罗斯方块(二)!适合初学者上手、练手!

    第二篇,主要实现俄罗斯方块中的主体部分,包括容器的数据结构以及容器的相关操作,特别是大方块和容器之间的交互逻辑,包括碰撞检测,消除检测等等. 1. 容器的表示 大方块的实现涉及到位运算,而容器同样如此 ...

  7. C语言实现迷宫小游戏

    代码如下,时间太晚,有空补注释: #include<stdio.h> #include<string.h> #include<time.h> #include< ...

  8. c语言 弹弹球小游戏

    #include <stdio.h>#include <stdlib.h>#include <windows.h>#include <time.h>#i ...

  9. JavaScript贪食蛇游戏制作详解

    之前闲时开发过一个简单的网页版贪食蛇游戏程序,现在把程序的实现思路写下来,供有兴趣同学参考阅读. 代码的实现比较简单,整个程序由三个类,一组常量和一些游戏逻辑以外的初始化和控制代码组成,总共400多行 ...

随机推荐

  1. 阿里云 docker连接总报超时 registry.cn-hangzhou.aliyuncs.com (Client.Timeout exceeded while awaiting headers

    Error response from daemon: Get https://registry.cn-hangzhou.aliyuncs.com/v2/: net/http: request can ...

  2. zabbix自动发现

    zabbix3.4 Discovery自动发现教程 Zabbix 创建发现规则创建发现规则配置 ---- 自动发现 ---- 创建发现规则 看一个例子 这样发现规则就没有问题了,下面让主机自动加入到某 ...

  3. [luogu4556][Vani有约会]

    题目链接 吐槽 这道题调了7个小时也是够了.最后只好比着题解做了一遍2333 思路 首先考虑n=2000的情况.因为这是在一条路径上,所以可以考虑差分.用a[i][j]表示第i个点中j这种粮食出现的次 ...

  4. 【洛谷P1507 NASA的食物计划】

    题目背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力下终止了航天飞机的历史,但是此类事情会不会在以后发生,谁也无法保证,在遇到这类航天问题时,解决方法 ...

  5. 初始redis数据库

    redis就是一个类似于存储在内存中的大字典 安装: windows下安装redis: 你需要在你的环境下安装: pip install redis 以上是在你的全局环境安装, 你如果用的是虚拟环境你 ...

  6. noi.openjudge 1.13.44

    http://noi.openjudge.cn/ch0113/44/ 总时间限制:  1000ms 内存限制:  65536kB 描述 将 p 进制 n 转换为 q 进制.p 和 q 的取值范围为[2 ...

  7. PHP工厂方法模式

    此模式中,通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂子类去完成.这样做的好处是核心类只关注工厂类的接口定义,而具体的产品实例交给具体的工厂子类去创建.当 ...

  8. nginx buffered to a temporary 解决

    今天开启了nginx的error_log,发现了三个配置问题: 问题一: 2011/07/18 17:04:37 [warn] 2422#0: *171505004 an upstream respo ...

  9. linux 用户登陆信息查询

    1.查看命令历史 每个用户都有一份命令历史记录 查看$HOME/.bash_history 或者在终端输入: history 2.last命令 查看用户登录历史 此命令会读取 /var/log/wtm ...

  10. js 各种事件 如:点击事件、失去焦点、键盘事件等

    事件驱动:        我们点击按钮 按钮去掉用相应的方法.                demo:             <input type="button" v ...