c语言贪吃蛇
思路:函数gotoxy(x,y)使光标移植屏幕的x,y坐标(屏幕左上角为0,0),用来绘制蛇和界面,color()函数用来设置绘制的颜色。设有snakelong节,第i节蛇的x坐标为x[i],y坐标为y[i],以用户设置重新绘制蛇,
根据键盘输入控制蛇头(x[1],y[1])的坐标,然后绘制蛇头,并且擦掉蛇尾(x[snakelong],y[snakelong]),每次更新界面时判断蛇头是否和蛇身相交或者与墙壁相交,如果有则退出循环结束游戏,每次更新界面
判断蛇头是否和苹果(使蛇变长)相交,相交的话snakelong++。并且下次绘制时不擦蛇尾。当苹果被吃掉了,则新随机生成一个苹果,苹果在界面内并且不与蛇相交。
其他积分计算什么的看代码吧。
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <dos.h>
int x[10000];
int y[10000];
int snakelong=3;
int applex,appley;
char c;
int h=25;
int w=50;
int life=0;
int speed;
int go=5; //0:front 1:back 2:left 3:right
int eatapple=1; //0:yes 1:no
int setapple=0; //0:yes 1:no
void color(int b)
{
HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;
SetConsoleTextAttribute(hConsole,b) ;
}
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void snakemove(int go)
{
if(eatapple==0)
{
eatapple=1;
setapple=0;
snakelong++;
}
else
{
gotoxy(x[snakelong]+1,y[snakelong]);
printf("\b ");
}
int i;
for(i=snakelong;i>=2;i--)
{
x[i]=x[i-1];
y[i]=y[i-1];
}
if(go==0)
{
y[1]--;
gotoxy(x[1],y[1]);
printf("■");
}
if(go==1)
{
y[1]++;
gotoxy(x[1],y[1]);
printf("■");
}
if(go==2)
{
x[1]=x[1]-2;
gotoxy(x[1],y[1]);
printf("■");
}
if(go==3)
{
x[1]=x[1]+2;
gotoxy(x[1],y[1]);
printf("■");
}
}
void printback(int high,int weight)
{
int i;
for(i=1;i<=weight;i=i+2)
{
gotoxy(i,0);
printf("□");
}
for(i=1;i<=weight;i=i+2)
{
gotoxy(i,high-1);
printf("□");
}
for(i=1;i<=high;i++)
{
gotoxy(0,i-1);
printf("□");
}
for(i=1;i<=high;i++)
{
gotoxy(weight,i-1);
printf("□");
}
gotoxy(w+3,0);
printf("按空格键暂停");
gotoxy(w+3,1);
printf("按wasd控制前后左右与继续");
}
void drawapple()
{
color(14);
int i;
int a=0;
srand(time(0));
while(1)
{
int a=0;
applex=(rand()%((w/2)-1))*2+2;
appley=(rand()%(h-2))+1;
for(i=1;i<=snakelong;i++)if(applex!=x[i]||appley!=y[i]) a++;
if(a==snakelong) break;
}
gotoxy(applex,appley);
printf("★");
setapple=1;
color(10);
}
int main()
{
system("chcp 936>NUL");//设置编码为UNICODE
SetConsoleTitle("贪吃蛇 by 软剑攻城狮");
printf("请输入速度等级(1-10),等级越高速度越快,按回车确认:");
scanf("%d",&speed);
if(speed<1||speed>10)
{
printf("输入错误,按任意键退出!");
getch();
exit(0);
}
x[1]=10;
y[1]=10;
int i;
gotoxy(0,0);
for(i=1;i<=1000;i++)printf(" ");
color(12);
printback(h,w);
color(10);
gotoxy(x[1],y[1]);
printf("■");
while(life==0)
{
if(kbhit())
{
c=getch();
if(c=='w'&&go!=1) go=0;
if(c=='s'&&go!=0) go=1;
if(c=='a'&&go!=3) go=2;
if(c=='d'&&go!=2) go=3;
if(c==' ') go=5;
}
for(i=2;i<=snakelong;i++)
if(x[1]==x[i]&&y[1]==y[i])
{
life=1;
break;
}
if(life==1) break;
if(x[1]<=0||x[1]>=w||y[1]<=0||y[1]>=h-1) break;
if(x[1]==applex&&y[1]==appley)
{
eatapple=0;
Beep(2000,50);
}
if(go!=5) snakemove(go);
if(setapple==0) drawapple();
gotoxy(w+3,3);
printf("分数:%d",(snakelong-3)*10);
Sleep(250-speed*20);
}
Beep(350,200);
Beep(250,200);
gotoxy(0,h+1);
printf("你的蛇死了,按任意键退出游戏");
getch();
return 0;
}
随意转载,没有版权~(要转载还是说上是我写的啊!)
c语言贪吃蛇的更多相关文章
- c语言贪吃蛇详解3.让蛇动起来
c语言贪吃蛇详解3.让蛇动起来 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 上次 ...
- c语言贪吃蛇详解-2.画出蛇
c语言贪吃蛇详解-2.画出蛇 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 蛇的身 ...
- c语言贪吃蛇详解1.画出地图
c语言贪吃蛇详解-1.画出地图 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 首先 ...
- c语言贪吃蛇详解5.GameOver功能与显示成绩
c语言贪吃蛇详解5.GameOver功能与显示成绩 以前我们已经做出来了一个能吃东西变长的蛇.不过它好像不会死... 现在就来实现一下game over的功能吧. 写个函数判断蛇是否撞到自己或者撞到墙 ...
- c语言贪吃蛇详解4.食物的投放与蛇的变长
c语言贪吃蛇详解4.食物的投放与蛇的变长 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识 ...
- 程序游戏推荐(C语言贪吃蛇,python天天酷跑(需要安装pygame),js是狠人就坚持30s)
下面是下载位置,我把他们上传到我的文件下了. C语言贪吃蛇:https://files.cnblogs.com/files/ITXiaoAng/%E8%B4%AA%E5%90%83%E8%9B%87. ...
- C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!
接上文<C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!>如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三.蛇的运动 上次我已经教大家画 ...
- C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!
前几天有个同学加我QQ私聊我说他们老师布置了一个贪吃蛇,他不知道怎么写所以来找我求解,我给他简单讲解了思路和一些难点之后他也能够自己独立将项目完成了!考虑到更多同学可能有贪吃蛇上的问题,今天有时间就来 ...
- [C语言]贪吃蛇_结构数组实现
一.设计思路 蛇身本质上就是个结构数组,数组里存储了坐标x.y的值,再通过一个循环把它打印出来,蛇的移动则是不断地刷新重新打印.所以撞墙.咬到自己只是数组x.y值的简单比较. 二.用上的知识点 结构数 ...
随机推荐
- keyStore vs trustStore--转载
原文:http://lukejin.iteye.com/blog/605634 今天有同事向我问起这两个概念,所以我就记录下.首先我们得澄清一些概念.一个web应用如果需要提供以https的方式访问的 ...
- LoadRunner测试问题
1.关于Error -27791: Error -27790:Error -27740: 错误如下: Action.c(198): Error -27791: Server has shut down ...
- Unix 网络编程(2)——TCP API
TCP C/S套接口函数一般调用过程及基本函数 如上图所示的TCP连接的基本过程.一般来说,服务器先于客户端运行,服务器程序运行的基本过程是: socket()函数创建服务器段socket. bind ...
- [Doc ID 1590988.1]如何清理E-Business Suite的缓存(Apache/iAS, Cabo, Modplsql, Browser, Jinitiator, Java, Portal, WebADI)?
文档内容 目标 解决方案 参考 适用于: Oracle Applications Technology Stack - 版本 11.5.9 到 12.2.2 [发行版 11.5 到 12. ...
- HTTP层 —— 中间件
1.简介 HTTP 中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制.例如,Laravel 内置了一个中间件来验证用户是否经过授权,如果用户没有经过授权,中间件会将用户重定向到登录页面,否则 ...
- ASP.Net Core 运行在Linux(CentOS)
Linux Disibutaion:CentOS 7.1 Web Server:Apache.Kestrel 1.安装.net core sudo yum install libunwind libi ...
- 如何给windows窗体程序打包成一个安装包
http://blog.csdn.net/xyy410874116/article/details/6341787 给windows窗体程序打包成一个安装包:具体操作在:http://hi.baidu ...
- notepad++中的python缩进问题
现在并没有遇到什么卵问题,但查到资料说会有问题,先记一笔,tab自动换4个空格 cmd /k "$(FULL_CURRENT_PATH)" & PAUSE & EX ...
- 深入了解webkit内核第一篇:JavaScript引擎深度解析
看到HorkeyChen写的文章<[WebKit] JavaScriptCore解析--基础篇(三)从脚本代码到JIT编译的代码实现>,写的很好,深受启发.想补充一些Horkey没有写到的 ...
- html-----020----事件
html事件 <body> <a href="http://www.cctv.com" accesskey="k" target=" ...