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多行 ...
随机推荐
- nodejs的某些api~(一)node的流2
可写流writablewritable.write(chunk, [encoding], [callback])chunk {String | Buffer} 要写入的数据encoding {Stri ...
- Spring 依赖注入优化
Spring 依赖注入优化 原创: carl.zhao SpringForAll社区 今天 Spring 最大的好处就是依赖注入,关于什么是依赖注入,在Stack Overflow上面有一个问题,如何 ...
- C connect实现Timeout效果(Windows)
int SocketClient::connectTimeOutForWin(SOCKET &connect_fd, const int &timeout, const sockadd ...
- Codeforces Round #518 (Div. 2) B LCM
传送门 https://www.cnblogs.com/violet-acmer/p/10163375.html 题解: 这道题有点意思,有点数学的味道. 根据定义“[a,b] / a”可得这求得是l ...
- python 学习笔记:python例子
廖雪峰python网站 #if els # -*- coding: utf-8 -*- #list是一种有序的集合,可以随时添加和删除其中的元素. ''' classmates=['a','b','c ...
- Qt ------ QFileDialog
QString strFile = QFileDialog::getOpenFileName(this,QStringLiteral("选择Excel文件"),"&quo ...
- 图论分支-Tarjan初步-边双联通分量
本来应该先说强连通分量,但是有一定的分配,所以这个在下一篇博客将会见到. 这个本想连点连通分量一起讲,但是量有点大,所以我就分两步讲. 我们先看定义 再来看看图解 很容易就能发现,只要将割边断掉,然后 ...
- hadoop 2.5 安装部署
hadoop 下载地址:http://mirrors.cnnic.cn/apache/hadoop/common/ 单机伪分布 配置文件: /hadoop-2.5.1/etc/hadoop/ hado ...
- Docker笔记一:Docker介绍
目录 什么是Docker? Docker的核心概念 Docker镜像命令 Docker容器命令 Docker实战 查看我的镜像 启动Redis Docker中国镜像加速 血与泪的教训 什么是Docke ...
- 5.原型模式(Prototype)
依赖关系倒置: 动机(Motivate): 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口. 如何 ...