c语言 贪食蛇小游戏
---恢复内容开始---
#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语言 贪食蛇小游戏的更多相关文章
- Javascript贪食蛇小游戏
试玩:http://hovertree.com/game/9/ 贪吃蛇是一种风靡全球的小游戏,就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的蛋,越吃越长.只要蛇头碰到屏幕四周,或者碰到自己的身子, ...
- 简单的C语言猜数字小游戏
猜数字小游戏可谓是C语言最为基础的一个知识点了,我们可以在此基础上进行延伸,实现随机数的猜测,然后是加入再来一局的模式,等等.这里是抛砖引玉,希望你能做出你的经典之作. #include <st ...
- C语言实现2048小游戏
目录 2048 一.设计思路 1.游戏规则 2.思路 二.代码实现 1.存储结构 2.初始化游戏数据 3.向左合并 4.其他方向合并 5.产生新的方块 6.源代码 7.实例演示 三.问题 2048 一 ...
- c语言----<项目>_小游戏<2048>
2048 小游戏 主要是针对逻辑思维的一个训练. 主要学习方面:1.随机数产生的概率.2.行与列在进行移动的时候几种情况.3.MessageBox的使用 #include <iostream&g ...
- 【C语言程序设计】小游戏之俄罗斯方块(一)!适合初学者上手、练手!
俄罗斯方块的核心玩法非常简单,所以制作起来并不是很复杂,我准备先用2篇文字的篇幅详细讲解一下俄罗斯方块的制作方法. 今天咱们算是第一篇,主要讲解俄罗斯方块中如何定义方块,以及如何实现方块的移动.旋转. ...
- 【C语言程序设计】小游戏之俄罗斯方块(二)!适合初学者上手、练手!
第二篇,主要实现俄罗斯方块中的主体部分,包括容器的数据结构以及容器的相关操作,特别是大方块和容器之间的交互逻辑,包括碰撞检测,消除检测等等. 1. 容器的表示 大方块的实现涉及到位运算,而容器同样如此 ...
- C语言实现迷宫小游戏
代码如下,时间太晚,有空补注释: #include<stdio.h> #include<string.h> #include<time.h> #include< ...
- c语言 弹弹球小游戏
#include <stdio.h>#include <stdlib.h>#include <windows.h>#include <time.h>#i ...
- JavaScript贪食蛇游戏制作详解
之前闲时开发过一个简单的网页版贪食蛇游戏程序,现在把程序的实现思路写下来,供有兴趣同学参考阅读. 代码的实现比较简单,整个程序由三个类,一组常量和一些游戏逻辑以外的初始化和控制代码组成,总共400多行 ...
随机推荐
- A1115. Counting Nodes in a BST
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- JavaScript(JS)基本语法(一)
https://www.cnblogs.com/haiyan123/p/7577598.html 一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入 ...
- Java 数组+循环升级篇
数组是一个变量,存储相同数据类型的一组数据(就是能存储很多数值的数据类型) 如果说声明一个变量就是在内存空间划出一块合适的空间,那么声明一个数组就是在内存空间划出一串连续的空间. 数组的基本要求 标识 ...
- mysql数据库的优化和查询效率的优化
一.数据库的优化 1.优化索引.SQL 语句.分析慢查询: 2.设计表的时候严格根据数据库的设计范式来设计数据库: 3.使用缓存,把经常访问到的数据而且不需要经常变化的数据放在缓存中,能节约磁盘IO: ...
- R语音:解决cor.test报错的 'y'必需是数值矢量
'y'必需是数值矢量,产生该类报错可能是含有NA值. 只需要在该数值上加入as.double函数即可.见下命令: ##先测试是不是数值型 is.numeric(data[,2]) #[1] FALSE ...
- ElasticSearch6.5.0【Java客户端之TransportClient】
说明 TransportClient:网上流传最多的客户端,目前最新版本 Java REST Client:官方推荐的客户端, 官方:我们要在Elasticsearch 7.0的版本中不赞成使用Tra ...
- JDBC动态查询MySQL中的表(按条件筛选)
动态查询实现按条件筛选.PreparedStatement 准备语句指定要查询的表头列,.setString()通过赋值指定行,.executeQuery()执行语句 在数据库test里先创建表sch ...
- maomao的每日动向
\(2019.02.04\) \(Nothing\) \(to\) \(do\). \(2019.02.05\) - 早上睡到\(12\)点 - 中午下午:吃饭串门拜年 - 晚上:吹爆<流浪地球 ...
- 【转载】Qt之JSON生成与解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...
- Java中String和byte[]间的转换浅析
Java语言中字符串类型和字节数组类型相互之间的转换经常发生,网上的分析及代码也比较多,本文将分析总结常规的byte[]和String间的转换以及十六进制String和byte[]间相互转换的原理及实 ...