[C] 纯文本查看 复制代码 #include <graphics.h> //包含EGE的头文件
#include<bits/stdc++.h>
using namespace std;
#include<time.h> //包含随机数,时间函数
int n;
int width =800;
int height =600;
int wait=0;
float randx(int min,int max);
int foodx;
int foody;
struct fangkuai
{
int x,y;//位置
int color;//颜色
};
struct snake
{
int len;//蛇的长度
char fx;//蛇的方向
fangkuai fk[1000];//蛇的身体
int sd;//蛇的速度
}ball;
void start()//初始化
{
srand(time(0));//随机种子函数
ball.len=4;
ball.sd=50;
ball.fx='d';
for(int i=0;i<4;i++)
{
ball.fk[i].x=20-i;
ball.fk[i].y=15;
}
initgraph(width, height); //初始化图形界面
setcolor(RED); //设置画图线为红色
setbkcolor(WHITE);//设置背景颜色为白色
setfillcolor(RED);//设置填充颜色为红色
setfont(25,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
setbkmode(TRANSPARENT); //设置文字背景色为透明(默认为有背景色)
}
void draw()//绘制
{
for(int i=0;i<ball.len;i++)//蛇
{
setfillcolor(hsv2rgb(10*i%360, 1, 1));//设置填充颜色 参数(颜色,饱和度,明亮度)
bar(ball.fk[i].x*20,ball.fk[i].y*20,(ball.fk[i].x+1)*20,(ball.fk[i].y+1)*20);
}
setfillcolor(GREEN);//食物
bar(foodx*20,foody*20,(foodx+1)*20,(foody+1)*20);
xyprintf(20,20,"得分:%d",ball.len-4);//格式化输出文字
xyprintf(20,40,"速度:%d",ball.sd);//格式化输出文字
}
void makefood()
{
while(1)
{
int flag=0;
foodx=randx(1,38);
foody=randx(1,28);
for(int i=0;i<ball.len;i++)
{
if(foodx==ball.fk[i].x&&foody==ball.fk[i].y)
{
flag=1;
break;
}
}
if(flag!=1)
{
break;
}
}
}
void eatfood()
{
if(ball.fk[0].x==foodx&&ball.fk[0].y==foody)
{
ball.len++;
makefood();
}
}
int dead()
{
if(ball.fk[0].x>=40||ball.fk[0].x<0||ball.fk[0].y>=30||ball.fk[0].y<0)
{
return 0;
}
for(int i=ball.len-1;i>0;i--)
{
if(ball.fk[0].x==ball.fk[i].x&&ball.fk[0].y==ball.fk[i].y)
{
return 0;
}
}
return 1;
}
void snakemove()
{
for(int i=ball.len;i>0;i--)
{
ball.fk[i].x=ball.fk[i-1].x;
ball.fk[i].y=ball.fk[i-1].y;
}
switch(ball.fx)
{
case'W':
case'w':ball.fk[0].x=ball.fk[1].x;
ball.fk[0].y=ball.fk[1].y-1;
break;
case'A':
case'a':ball.fk[0].x=ball.fk[1].x-1;
ball.fk[0].y=ball.fk[1].y;
break;
case'S':
case's':ball.fk[0].x=ball.fk[1].x;
ball.fk[0].y=ball.fk[1].y+1;
break;
case'D':
case'd':ball.fk[0].x=ball.fk[1].x+1;
ball.fk[0].y=ball.fk[1].y;
break;
default:;
}
}
void update()
{
wait++;
ball.sd=50-(ball.len-4)/5;
if(wait==ball.sd)
{
snakemove();
wait=1;
}
if(kbhit())
{
ball.fx = getch();
snakemove();
}
}
float randx(int min,int max)
{
float s=(((float)rand())/32767)*(max-min)+min;
return s;
}
int main()
{
start();
makefood();
while(1)
{
update();
eatfood();
if(dead()==0)
{
break;
}
draw();
Sleep(10);
cleardevice();
}
setfont(100,0,"幼圆");
xyprintf(200,300,"GAME OVER");
getch();
return 0;
}
|