[C++] 纯文本查看 复制代码 #include <graphics.h>
#include <time.h>
int block[40][30]={0};
int height=600,width=800;
int food_x,food_y;
int wait;
char a[4]={'w','a','s','d'};
struct snake_min
{
int x,y,color;
};
struct snake_1
{
char direct;
int len;
double v;
snake_min min[100];
}snake,snake2;
float rnx(int min,int max)
{
float t;
t=rand()%(max-min)+min;
return t;
}
void start()
{
snake.v=20;
snake.direct='d';
snake.len=4;
snake2.v=20;
snake2.direct='a';
snake2.len=4;
for(int i=0;i<snake.len;i++)
{
snake.min[i].x=20-i;
snake.min[i].y=15;
}
for(int i=0;i<snake2.len;i++)
{
snake2.min[i].x=20+i;
snake2.min[i].y=10;
}
initgraph(width, height);
setcolor(BLACK);
setbkcolor(WHITE);
setfillcolor(RED);
srand(time(0));
}
void draw()
{
for(int i=0;i<40;i++)
for(int j=0;j<30;j++)
{
setfillcolor(WHITE);
bar(i*20,j*20,(i+1)*20,(j+1)*20);
}
for(int i=0;i<snake.len;i++)
{
setfillcolor(hsv2rgb(10*i%360, 1, 1));
bar(snake.min[i].x*20,snake.min[i].y*20,(snake.min[i].x+1)*20,(snake.min[i].y+1)*20);
}
for(int i=0;i<snake2.len;i++)
{
setfillcolor(hsv2rgb(50+10*i%360, 1, 1));
bar(snake2.min[i].x*20,snake2.min[i].y*20,(snake2.min[i].x+1)*20,(snake2.min[i].y+1)*20);
}
setfillcolor(GREEN);
bar(food_x*20,food_y*20,(food_x+1)*20,(food_y+1)*20);
Sleep(10);
cleardevice();
}
void snake_move()
{
for(int i=snake.len;i>0;i--)
{
snake.min[i].x=snake.min[i-1].x;
snake.min[i].y=snake.min[i-1].y;
}
switch(snake.direct)
{
case 'w':
snake.min[0].y=snake.min[1].y-1;
snake.min[0].x=snake.min[1].x;
break;
case 's':
snake.min[0].y=snake.min[1].y+1;
snake.min[0].x=snake.min[1].x;
break;
case 'a':
snake.min[0].x=snake.min[1].x-1;
snake.min[0].y=snake.min[1].y;
break;
case 'd':
snake.min[0].x=snake.min[1].x+1;
snake.min[0].y=snake.min[1].y;
break;
}
for(int i=snake2.len;i>0;i--)
{
snake2.min[i].x=snake2.min[i-1].x;
snake2.min[i].y=snake2.min[i-1].y;
}
int i=rnx(0,3);
if(i==1||i==3)
{
if(snake2.min[0].x>=38||snake2.min[0].x<=2) i=i+2;
}
else if(i==0||i==2)
{
if(snake2.min[0].y>=28||snake2.min[0].y<=2) i=i+2;
}
snake2.direct=a[i];
switch(snake2.direct)
{
case 'w':
snake2.min[0].y=snake2.min[1].y-1;
snake2.min[0].x=snake2.min[1].x;
break;
case 's':
snake2.min[0].y=snake2.min[1].y+1;
snake2.min[0].x=snake2.min[1].x;
break;
case 'a':
snake2.min[0].x=snake2.min[1].x-1;
snake2.min[0].y=snake2.min[1].y;
break;
case 'd':
snake2.min[0].x=snake2.min[1].x+1;
snake2.min[0].y=snake2.min[1].y;
break;
}
}
void update()
{
wait++;
snake.v=20-(snake.len-4)/5;
if(wait==snake.v)
{
snake_move();
wait=1;
}
if(kbhit())
{
snake.direct=getch();
snake_move();
}
}
bool game_over()
{
if((snake.min[0].x>=40)|| (snake.min[0].x<0)||
(snake.min[0].y>=30)|| (snake.min[0].y<0))
{
return true;
}
return false;
}
void food_set()
{
int flag;
while(1)
{
flag=0;
food_x=rnx(2,38);
food_y=rnx(2,28);
for(int i=0;i<snake.len;i++)
{
if(food_x==snake.min[i].x&&food_y==snake.min[i].y)
{
flag=1;
break;
}
}
if(flag==0)
{
break;
}
}
}
void food_eat()
{
if(snake.min[0].x==food_x&&snake.min[0].y==food_y)
{
snake.len++;
food_set();
}
}
int main()
{
start();
food_set();
while(1)
{
if(game_over()) break;
food_eat();
draw();
update();
}
getch();
return 0;
}
|