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值的简单比较. 二.用上的知识点 结构数 ...
随机推荐
- Android drawable里面的图片存在,但是getIdentifier或者findViewByid找不到时处理步骤
drawable里面的图片存在,但是getIdentifier或者findViewByid找不到时执行一下project -> clean
- c++ (P10—46)
1 signed unsigned short long 四个修饰符.对int全部适用,对char只有signed和unsigned适用,long适用于double. 2 long int(占4个字节 ...
- 零门槛!ZBLibrary仿微信朋友圈自定义View,就是这么简单!
传统方法是继承现有View再重写方法,这种方式缺点很多: 1.往往不能在xml编辑器中预览效果: 2.比较难实现预期效果,比如设置宽度为wrap_content,实际显示为match_parent等: ...
- Arp欺骗攻击的另类应用之屌丝泡妞记
http://www.2cto.com/Article/201210/163974.html arp欺骗,我想大家都应该知道怎么回事了.不知道的去问度娘... 就不废话了,还是直接上图上教程比 ...
- 关于JFace中的输入值(InputDialog)对话框类
格式: InputDialog(Shell parentShell, String dialogTitle, String dialogMessage, String initialValue, In ...
- jemter接口测试之---接口测试的一些约定
一.接口规范 1.前端请求接口 请求数据格式:appType =1&args ={json}&session =xxx×tamp =now&sign =x ...
- 简单的monkey使用
先推荐大家看一篇http://www.cnblogs.com/wfh1988/archive/2010/11/16/1878224.html,里面有一些命令的使用 简单在说就是象猴子一样乱点,为了测试 ...
- [记录]ns_error_unexpected firefox tinymce
参考: Form not saving, NS_ERROR_UNEXPECTED Error: NS_ERROR_UNEXPECTED #794 NS_ERROR_UNEXPECTED on Fir ...
- PM2 管理nodejs项目
pm2 是一个带有负载均衡功能的Node应用的进程管理器. 当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的. 它非常适合IaaS结构,但不要把它 ...
- c# 远程监控(3) RTP协议 RTP.NET.DLL
我们在上一期已经可以获取视频或者摄像头数据,并可以获取帧数据,那么我们这一期就研究下RTP,并发送数据到目标服务器. RTP协议简介 这位朋友讲的很好:http://blog.csdn.net/bri ...