[C++] 纯文本查看 复制代码 # include<bits/stdc++.h>
#include <graphics.h>
#include <math.h>
#include<time.h> //包含随机数,时间函数 //包含EGE的头文件
using namespace std;
int wait;
int foodx;
int foody;
int score=0;//分数
int pass=200;//通道宽度
int wall_width=50; //宽度
char ch;
int width =800;
int height =600;
int num;
int count1,time_count=0;
struct body
{
int x;
int y;
};
struct snake
{
int len;//蛇的长度
int v;//蛇的速度
char direct;//蛇的方向
body a[1000];
}s;
struct wallon
{
float xl,yl;//左上角的坐标
float xr,yr;//右下角的坐标
float vx;//速度
}wall;
float ranx(int min,int max)//随机数产生min到max之间的随机数
{
return min+rand()%(max-min);
}
void start()//初始化
{
srand(time(0));//随机种子函数
s.v=20;//x向速度
s.len=4;//长度
s.direct='d';//方向
for(int i=0;i<4;i++)
{
s.a[i].x=20-i;
s.a[i].y=15;
}
initgraph(width, height); //初始化图形界面
setcolor(RED); //设置画图线为红色
setbkcolor(WHITE);//设置背景颜色为白色
setfillcolor(RED);//设置填充颜色为红色
setfont(25,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
setbkmode(TRANSPARENT); //设置文字背景色为透明(默认为有背景色)
}
void foodset()
{
int flag;
while(1)
{
flag=0;
foodx=rand()%39;
foody=rand()%30;
for(int i=0;i<s.len;i++) //判断食物和蛇未重叠
{
if ((s.a[i].x==foodx)&&(s.a[i].y==foody))
{
flag=1;
break;
}
}
if(flag==0)//如果未重叠
{
break;
}
}
}
void foodeat()
{
if((s.a[0].x==foodx)&&(s.a[0].y==foody))
{
s.len++;
foodset();
}
}
void moveSnake()//移动蛇
{
int i;
for(i=s.len;i>0;i--)
{
s.a[i].x = s.a[i-1].x;
s.a[i].y = s.a[i-1].y;
}
switch(s.direct)
{
case 'w':
case 'W':
s.a[0].y--;
break;
case 'a':
case 'A':
s.a[0].x--;
break;
case 's':
case 'S':
s.a[0].y++;
break;
case 'd':
case 'D':
s.a[0].x++;
break;
}
}
void update()//数据更新
{
s.v = 20-(s.len-4)/5;
wait++;
if(wait==s.v)
{
wait=0;
moveSnake();
}
if(kbhit())
{
s.direct=getch();
moveSnake();
}
}
void draw()
{
for(int i=0;i<s.len;i++)
{
setfillcolor(hsv2rgb(10*i%360, 1, 1));
bar(s.a[i].x*20,s.a[i].y*20,s.a[i].x*20+20,s.a[i].y*20+20);
}
setfillcolor(GREEN);
bar(foodx*20,foody*20,foodx*20+20,foody*20+20);
xyprintf(20,20,"得分:%d",s.len-4);//格式化输出文字
//xyprintf(20,40,"得分:%d %d",foodx,foody);//格式化输出文字
Sleep(10);
cleardevice();
}
bool gameover()
{
if(s.a[0].x>=40||s.a[0].x<0||s.a[0].y>=30||s.a[0].y<0)
{
return true;
}
for(int i=1;i<s.len;i++)
{
if((s.a[i].x==s.a[0].x)&&(s.a[i].y==s.a[0].y))
{
return true;
}
}
return false;
}
int main()
{
start();
foodset ();
while(1)
{
update();
foodeat();
draw();
if(gameover())
{
break;
}
}
setfont(100,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
xyprintf(200,100,"gameover");//格式化输出文字
getch();
return 0;
} |