[C] 纯文本查看 复制代码 #include <graphics.h>//包含EGE的头文件
#include <time.h>//包含随机数,时间函数
#include<bits/stdc++.h>
using namespace std;
void food_set();
int block[40][30]={0};
int food_x;
int food_y;
int wait=0;
struct snake_2
{
int x;
int y;
int color;
};
struct snake_1{
char direct;
int len;
int vx;//x向速度
snake_2 body[1000];
}snake;
//float randx(float min,float max)
//{
// float r =(((float)rand())/32767)*(max-min)+min;
// return r;
//}
void startup()//初始化 函数
{
//cout<<"请输入总人数(不大于1000):";
//cin>>num;
srand(time(0));//随机种子函数
snake.direct='d';
snake.vx=20;
snake.len=4;
for(int i=0;i<snake.len;i++)
{
snake.body[i].x=20-i;
snake.body[i].y=15;
}
food_set();
initgraph(800,600); //初始化图形界面
setcolor(RED); //设置画图线为红色
setbkcolor(WHITE);//设置背景颜色为白色
setfillcolor(RED);//设置填充颜色为红色
setfont(25,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
setbkmode(TRANSPARENT); //设置文字背景色为透明(默认为有背景色)
}
void snake_move()
{
for(int i=snake.len;i>0;i--)
{
snake.body[i].x=snake.body[i-1].x;
snake.body[i].y=snake.body[i-1].y;
}
switch(snake.direct)
{
case 'w':snake.body[0].y=snake.body[1].y-1;
snake.body[0].x=snake.body[1].x;
break;
case 's':snake.body[0].y=snake.body[1].y+1;
snake.body[0].x=snake.body[1].x;
break;
case 'd':snake.body[0].x=snake.body[1].x+1;
snake.body[0].y=snake.body[1].y;
break;
case 'a':snake.body[0].x=snake.body[1].x-1;
snake.body[0].y=snake.body[1].y;
break;
}
}
void food_set()//产生食物
{
int flag=0;
while(1)
{
flag=0;
food_x=rand()%37+1;
food_y=rand()%27+1;
for(int i=0;i<snake.len;i++)
{
if((food_x==snake.body[i].x)&&(food_y==snake.body[i].y))
{
flag=1;
break;
}
}
if(flag==0)
{
break;
}
}
}
void eat_food() //吃食物
{
if((food_x==snake.body[0].x)&&(food_y==snake.body[0].y))
{
snake.len++;
food_set();
}
}
void update() //更新函数
{
wait++;
snake.vx=20-(snake.len-4)/5;
if(wait==snake.vx)
{
snake_move();
wait=1;
}
if(kbhit())
{
snake.direct=getch();
snake_move();
}
}
void draw() //绘制小球
{
setfillcolor(GREEN);//设置填充颜色为绿色
bar(food_x*20,food_y*20,(food_x+1)*20,(food_y+1)*20);
for(int i=0;i<snake.len;i++)
{
setfillcolor(hsv2rgb(10*i%360, 1, 1));//设置填充颜色 参数(颜色,饱和度,明亮度)
bar(snake.body[i].x*20,snake.body[i].y*20,(snake.body[i].x+1)*20,(snake.body[i].y+1)*20);
}
xyprintf(20,20,"速度:%d",21-snake.vx);
xyprintf(20,45,"得分:%d",snake.len-4);
Sleep(10);
cleardevice();
}
bool gameover()
{
if(((snake.body[0].x<0)||(snake.body[0].x>39))||((snake.body[0].y<0)||(snake.body[0].y>29)))
{
return true;
}
for(int i=1;i<snake.len;i++)
{
if((snake.body[i].x==snake.body[0].x)&&(snake.body[i].y==snake.body[0].y))
{
return true;
}
}
return false;
}
int main()
{
startup();//初始化
while(1)
{
draw();//绘制小球
update(); //更新数据
eat_food();
if(gameover())
{
break;
}
}
setfont(100,0,"楷体");
xyprintf(150,200,"GAMEOVER");//格式化输出文字
getch();
return 0;
} |