|
#include <graphics.h>
#include <time.h>
#define Block_szie 20
#define Width 40
#define Height 30
int food_x,food_y;
int gameover;
int wait;
struct Snake_data
{
int x;
int y;
int color;
};
struct Snake
{
char direct;
int snake_len;
int snake_v;
Snake_data snake_d[1000];
}snake0,snake1;
void moveSnake(Snake &s)//ÒÆ¶¯Éß
{
for(int i=(s.snake_len)-1;i>=0;i--)
{
s.snake_d[i+1].x=s.snake_d[i].x;
s.snake_d[i+1].y=s.snake_d[i].y;
}
switch(s.direct)
{
case'w':
case'W':
case'i':
case'I':
s.snake_d[0].x=s.snake_d[1].x;
s.snake_d[0].y=s.snake_d[1].y-1;
break;
case's':
case'S':
case'k':
case'K':
s.snake_d[0].x=s.snake_d[1].x;
s.snake_d[0].y=s.snake_d[1].y+1;
break;
case'd':
case'D':
case'l':
case'L':
s.snake_d[0].x=s.snake_d[1].x+1;
s.snake_d[0].y=s.snake_d[1].y;
break;
case'a':
case'A':
case'j':
case'J':
s.snake_d[0].x=s.snake_d[1].x-1;
s.snake_d[0].y=s.snake_d[1].y;
break;
default:
break;
}
}
void startup()//Æô¶¯
{
snake0.direct='d';
snake0.snake_len=4;
snake0.snake_v=10;
for(int i=0;i<=3;i++)
{
snake0.snake_d[i].x=(Width/2)-i;
snake0.snake_d[i].y=(Height/2);
}
snake1.direct='d';
snake1.snake_len=4;
snake1.snake_v=10;
for(int i=0;i<=3;i++)
{
snake1.snake_d[i].x=(Width/3)-i;
snake1.snake_d[i].y=(Height/2);
}
srand(time(0));//Ëæ»úÖÖ×Óº¯Êý
initgraph(Width*Block_szie, Height*Block_szie, INIT_RENDERMANUAL); //³õʼ»¯Í¼ÐνçÃæ
setcolor(BLACK); //ÉèÖûͼÏßΪºìÉ«
setbkcolor(WHITE);//ÉèÖñ³¾°ÑÕɫΪ°×É«
setfillcolor(LIGHTGRAY);//ÉèÖÃÌî³äÑÕɫΪdz»ÒÉ«
setfont(20,0,"Ó×Ô²");//(×ÖÌå¸ß¶È,×ÖÌå¿í¶È(Ϊ0¼´Îª×ÔÊÊÓ¦),×ÖÐÎ)ÉèÖÃ×ÖÌåΪ25,Ó×Ô²×ÖÌå
setbkmode(TRANSPARENT); //ÉèÖÃÎÄ×Ö±³¾°É«ÎªÍ¸Ã÷(ĬÈÏΪÓб³¾°É«)
}
void show_snake()//ÏÔʾ
{
int i,j;
//Éß
for(i=0;i<snake0.snake_len;i++)
{
setfillcolor(hsv2rgb((10*i)%360, 1, 1));//ÉèÖÃÌî³äÑÕÉ« ²ÎÊý£¨ÑÕÉ«£¬±¥ºÍ¶È£¬Ã÷ÁÁ¶È£©
bar(snake0.snake_d[i].x*Block_szie,snake0.snake_d[i].y*Block_szie,(snake0.snake_d[i].x+1)*Block_szie,(snake0.snake_d[i].y+1)*Block_szie);
}
for(i=0;i<snake1.snake_len;i++)
{
setfillcolor(hsv2rgb((10*i+50)%360, 1, 1));//ÉèÖÃÌî³äÑÕÉ« ²ÎÊý£¨ÑÕÉ«£¬±¥ºÍ¶È£¬Ã÷ÁÁ¶È£©
bar(snake1.snake_d[i].x*Block_szie,snake1.snake_d[i].y*Block_szie,(snake1.snake_d[i].x+1)*Block_szie,(snake1.snake_d[i].y+1)*Block_szie);
}
//ʳÎï
xyprintf(20,20,"Íæ¼Ò1µÃ·Ö£º%d",snake0.snake_len-4);//¸ñʽ»¯Êä³öÎÄ×Ö
xyprintf(20,40,"Íæ¼Ò2µÃ·Ö£º%d",snake1.snake_len-4);//¸ñʽ»¯Êä³öÎÄ×Ö
}
void show_food()
{
int i,j;
for(i=0;i<Width;i++)
{
for(j=0;j<Height;j++)
{
//setcolor(WHITE); //ÉèÖûͼÏßΪ°×É«
setfillcolor(WHITE);//ÉèÖÃÌî³äÑÕɫΪdz»ÒÉ«
bar(i*Block_szie,j*Block_szie,(i+1)*Block_szie,(j+1)*Block_szie);
}
}
setfillcolor(GREEN);//ÉèÖÃÌî³äÑÕÉ«
bar(food_x*Block_szie,food_y*Block_szie,(food_x+1)*Block_szie,(food_y+1)*Block_szie);
}
void update0()//Êý¾Ý¸üÐÂ
{
//moveSnake(snake0);
//Sleep(100);
wait++;
if(wait==snake0.snake_v)
{
moveSnake(snake0);
moveSnake(snake1);
wait=0;
}
if(kbhit())
{
char ch;
ch = getch();
if((ch=='w')||(ch=='a')||(ch=='s')||(ch=='d'))
{
snake0.direct=ch;
moveSnake(snake0);
}
if((ch=='i')||(ch=='j')||(ch=='k')||(ch=='l'))
{
snake1.direct=ch;
moveSnake(snake1);
}
}
}
void food_set()
{
a: food_x=rand()%(Width-2)+1;
food_y=rand()%(Height-2)+1;
for(int i=0;i<snake0.snake_len;i++)
{
if((food_x==snake0.snake_d[i].x)&&(food_y==snake0.snake_d[i].y))
{
goto a;
}
}
}
void eat_food()
{
if((snake0.snake_d[0].x==food_x)&&(snake0.snake_d[0].y==food_y))
{
snake0.snake_len++;
food_set();
}
if((snake1.snake_d[0].x==food_x)&&(snake1.snake_d[0].y==food_y))
{
snake1.snake_len++;
food_set();
}
}
bool game_over()//1½áÊø
{
if((snake0.snake_d[0].x>=40)||(snake0.snake_d[0].y>=30)||(snake0.snake_d[0].x<0)||(snake0.snake_d[0].y<0))
{
return true;
}
for(int i=1;i<snake0.snake_len;i++)
{
if((snake0.snake_d[0].x==snake0.snake_d[i].x)&&(snake0.snake_d[0].y==snake0.snake_d[i].y))
return true;
}
if((snake1.snake_d[0].x>=40)||(snake1.snake_d[0].y>=30)||(snake1.snake_d[0].x<0)||(snake1.snake_d[0].y<0))
{
return true;
}
for(int i=1;i<snake1.snake_len;i++)
{
if((snake1.snake_d[0].x==snake1.snake_d[i].x)&&(snake1.snake_d[0].y==snake1.snake_d[i].y))
return true;
}
return false;
}
int main()
{
b: startup();
food_set();
getch();
while(1)
{
cleardevice();
show_food();
show_snake();
update0();
//update1(snake1);
eat_food();
/*if(game_over())
{
xyprintf(300,300,"Íæ¼Ò1ÊäÁË");
break;
}*/
Sleep(10);
}
Sleep(2000);
xyprintf(300,320,"°´rÖØÐ¿ªÊ¼");
while(1)
{
if(kbhit())
{
int temp = getch();
if(temp =='r')
{
goto b;
}
}
}
return 0;
} |
|