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++就是面向对象的语言.不过,不记得什么时候在网上看到过一篇博文 ...
随机推荐
- 微博地址url(id)与mid的相互转换
关键字:新浪 微博 url id mid 互相转换地址:http://www.cnblogs.com/txw1958/archive/2012/12/07/weibo-id-to-mid.html 通 ...
- 神户制钢坑了500家企业 百年老店为何走上邪路?(企业经营再艰难,也不能降低产品质量,甚至偷工减料,同样适用于IT行业)
神户制钢这颗烂萝卜,拔出它之后带出的泥越来越多.上周五社长川崎博也又开了记者会,再次道歉,而受到其数据造假影响的客户数量也从200家飙升到500家. 日本政府给神户制钢两周时间调查,还要在一个月内公布 ...
- 避免让WPF资源字典变得杂乱臃肿
原文:避免让WPF资源字典变得杂乱臃肿 避免让WPF资源字典变得杂乱臃肿 周银辉 今天看到项目种的一个XXXResource.xaml文件代码 ...
- window下nodejs爬取gb2312网页出现乱码的解决方案
发布于 2012-8-22 18:15 5230 次浏览 最后一次编辑是 2013-2-18 22:31 linux环境下,我们可以通过 iconv 这个C++模块来处理Node.JS不支持的字 ...
- Bootstrap 反色导航条
@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport&q ...
- WPF中类似使用tab键功能,可以向上向下定位
原文:WPF中类似使用tab键功能,可以向上向下定位 private void tbYyrs_KeyUp(object sender, KeyEventArgs e) { UIElement elem ...
- sql server 定时备份数据库
CREATE PROCEDURE [dbo].[SP_DBBackup_EveryNight_Local] @cycle INT, ---保存周期 @IsLocal INT, ---是否为本地 0表示 ...
- canvas——粒子系统(1)
这个动画在很早之前就见过,当时就没迷住了.最近在学canavs动画,动手实现了一下.代码在这里.展示效果在这里. 这属于粒子系统的一种,粒子系统就是需要管理一堆粒子嘛,动画实现的关键在于,遍历这些粒子 ...
- Qt 5.9对Mac的图形显示有许多改进
We have some platform specific improvements as well as support for new platforms and compilers comin ...
- UWP开发学习笔记1
导航到页面: this.Frame.Navigate(typeof(SecondPage)); 导航进入当前页面时会调用OnNavigatedTo方法:导航从当前页面离开时会调用OnNavigatin ...