C语言实现贪吃蛇
日期:2018.9.11
用时:150min
项目:贪吃蛇(C语言--数组 结构体实现)
开发工具:vs2013
关键知识:数组,结构体,图形库,键位操作
源代码:
#include<stdio.h>
#include<graphics.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h> #define N 200
int i, key;
int score = ;
int gamespeed = ; void init(void);
void Draw();
void Playgame();
void Prscore();
void Gameover(); struct Food {
int x;
int y;
int yes;
}food; struct Snake{
int x[N];
int y[N];
int node;
int direcion;
int life;
}snake; void main()
{
init();
Draw();
Playgame();
_getch();
} void init(void)
{
initgraph(,);
setbkcolor(WHITE);
cleardevice();
} void Draw()
{
setcolor(BLACK);
for (i = ; i <= ; i += )
{
rectangle(i, , i + , );
rectangle(i, , i + , );
}
for (i = ; i <= ; i += )
{
rectangle(, i, , i + );
rectangle(, i, , i + );
}
} void Playgame()
{
srand((unsigned)time(NULL));//用时间做种,每次产生的随机数不一样。
food.yes = ;//1表示需要出现食物,0表示已有食物
snake.life = ;//0,活着,1 死亡
snake.direcion = ;
snake.x[] = ; snake.y[] = ;
snake.x[] = ; snake.y[] = ;
snake.node = ;
Prscore();
while ()
{
while (!_kbhit())
{
if (food.yes == )
{
food.x = rand() % + ;
food.y = rand() % + ;
while (food.x % != )
food.x++;
while (food.y % != )
food.y++;
food.yes = ;
}
if (food.yes == )
{
setcolor(RED);
rectangle(food.x, food.y, food.x + , food.y + );
}
for (i = snake.node - ; i > ; i--)
{
snake.x[i] = snake.x[i - ];
snake.y[i] = snake.y[i - ];
}
switch (snake.direcion)
{
case :snake.x[] += ; break;
case :snake.x[] -= ; break;
case :snake.y[] -= ; break;
case :snake.y[] += ; break;
}
for (i = ; i < snake.node; i++)
{
if (snake.x[i] == snake.x[] && snake.y[i] == snake.y[])
{
Gameover();
snake.life = ;
break;
}
}
if (snake.x[]< || snake.x[]> || snake.y[]< || snake.y[]>)
{
Gameover();
snake.life = ;
}
if (snake.life == )
break;
if (snake.x[] == food.x&&snake.y[] == food.y)
{
setcolor(BLACK);
rectangle(food.x, food.y, food.x + , food.y + );
snake.x[snake.node] = -; snake.y[snake.node] = -;
snake.node++;
food.yes = ;
score += ;
Prscore();
}
setcolor(GREEN);
for (i = ; i < snake.node; i++)
rectangle(snake.x[i], snake.y[i],snake.x[i] + , snake.y[i] + );
if (food.yes == )
{
if (gamespeed >= )
gamespeed -= ;// 速度最大不超过
} Sleep(gamespeed);
setcolor(WHITE);
rectangle(snake.x[snake.node - ], snake.y[snake.node - ], snake.x[snake.node-] + , snake.y[snake.node - ] + );
}
if (snake.life == )
break;
switch (_getch())
{
case 'w':
case 'W':
if (snake.direcion != )
{
snake.direcion = ;
}
break;
case 'd':
case 'D':
if (snake.direcion != )
{
snake.direcion = ;
}
break;
case 'a':
case 'A':
if (snake.direcion != )
{
snake.direcion = ;
}
break;
case 's':
case 'S':
if (snake.direcion != )
{
snake.direcion = ;
}
break;
}
}
} void Prscore()
{
char str[];
setfillstyle(SOLID_FILL, YELLOW);
bar(, , , );
setcolor();
sprintf_s(str, "score:%d", score);
outtextxy(, , str);
} void Gameover()
{
cleardevice();
setbkcolor(WHITE);
Prscore();
setcolor(RED);
settextstyle(, , "楷体");
outtextxy(, , "GAME OVER");
_getch();
}
运行截图:


C语言实现贪吃蛇的更多相关文章
- C语言之贪吃蛇
利用链表的贪吃蛇,感觉自己写的时候还是有很多东西不熟悉, 1.预编译 2.很多关于系统的头文件也不是很熟悉 3.关于内存 第一个是.h头文件 #ifndef _SNAKE_H_H_H #define ...
- c语言版贪吃蛇小游戏
编译环境:windows 7 64位 编译工具:codeblocks 13.12 备注:未使用graphics.h 声明:个人原创,未经允许,禁止转载!!! 数据结构:双向链表 1.程序未使用grap ...
- C语言实现贪吃蛇游戏
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/times.h> ...
- C语言实现贪吃蛇源码
先放效果 源代码 //2016-2-12 //zhaoyu //Gmail:zhaoyu1995.com@gmail.com //Language: C //Platform:Code::Blocks ...
- 小项目特供 贪吃蛇游戏(基于C语言)
C语言写贪吃蛇本来是打算去年暑假写的,结果因为ACM集训给耽搁了,因此借寒假的两天功夫写了这个贪吃蛇小项目,顺带把C语言重温了一次. 是发表博客的前一天开始写的,一共写了三个版本,第一天写了第一版,第 ...
- C语言 小游戏之贪吃蛇
还记得非常久曾经听群里人说做贪吃蛇什么的,那时候大一刚学了C语言,认为非常难,根本没什么思路. 前不久群里有些人又在谈论C语言贪吃蛇的事了,看着他们在做,我也打算做一个出来. 如今大三,经过了这一年半 ...
- 贪吃蛇小游戏-----C语言实现
1.分析 众所周知,贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本,既简单又耐玩.该游戏通过控制蛇头方向吃食物,从而使得蛇变得越来越长,蛇不能撞墙,也不能装到自己,否则游戏结束.玩过贪吃蛇的 ...
- C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!
接上文<C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!>如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三.蛇的运动 上次我已经教大家画 ...
- C语言用面向对象的思想写贪吃蛇
大概一年前这时候,接触C语言一个月,那时候知之甚少,对面向对象只觉”可远观而不可亵玩“,而且会看到很多言论说C语言就是面向过程的语言,C++就是面向对象的语言.不过,不记得什么时候在网上看到过一篇博文 ...
随机推荐
- Android新闻案例clientserver达到,完全自己的新闻节目平台
一.建设新闻资料库 例如,下面的脚本代码:(正在使用mysql5.0 数据库) SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_z ...
- 《北京IT报道》你可以成为下一个《万万没有想到》?
10一个月29当天上午,一位名为<北京IT报道>在视频短剧IT朋友谁快速刷新的互联网商业圈.这种制作粗糙.演员表情僵硬.安置赤裸网络剧,但对布局和内容因IT互联网从业者的生活,深受广大用户 ...
- Mybatis动态建表
在网上查了很多,都说Mybatis不支持动态建表,心凉了一节.还好找到这么一篇,找到了希望:http://www.zzzyk.com/show/ec5660d9cf1071b3.htm 经过在mysq ...
- 2-1 Consul简介
Consul英文意思是大使馆. Consul主要干3件事情: 1.提供服务到ip地址的注册. 2.提供服务到ip地址列表的查询. 3.对提供服务方的健康检查. Consul官网 :https://ww ...
- WPF 3D中多个模型如何设置某一个在最前?
原文:WPF 3D中多个模型如何设置某一个在最前? 问题:我们的模型包括导入的3D solid模型和axis坐标轴模型,当模型旋转的时候,3D会将axis挡住. 期望:axis一直在最前面,不会被3D ...
- mac在下面Apache 创 .htaccess档
在设定一个固定的链接将提下面的例子说明样题: 若您的 .htaccess 文件可写.我们能够自己主动改动它.但似乎它不可写,因此我们在下方列出了您 .htaccess 文件里应该增加的URL 重写规则 ...
- JS 数组两种定义方式
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- Pytorch Code积累
2017 Python最新面试题及答案16道题 15个重要Python面试题 测测你适不适合做Python? torch.squeeze() Returns a tensor with all the ...
- 把BitmapSource图片数据保存到文件
实现函数: /// <summary> /// 保存图片到文件 /// </summary> /// <param name="image">图 ...
- 更换Qt QtEmbedded库的版本出现问题及解决(交叉编译OpenSSL)
近日将QtEmbedded库的版本由4.7.0更新到4.7.4.工具链并未改变,仍为 Target: arm-none-linux-gnueabiConfigured with: ......Thre ...