该楼层疑似违规已被系统折叠隐藏此楼查看此楼
单人模式完美运行
但是双人却有很大的问题
一条蛇能显示,另一条却被遮盖了,只能在动的时候显示一下
猜测是背景遮盖的问题,可改了好久却没有成功,求助一下。
void Play2(void)
{
struct Snake snake1,snake2;
struct Food food1,food2;
srand((unsigned long)time(0));
food1.flag = 1;
food2.flag = 1;
snake1.life = 0;
snake2.life = 0;
snake1.dir = 1;
snake2.dir = 1;
snake1.x[0] = 150;
snake1.y[0] = 240;
snake1.x[1] = 140;
snake1.y[1] = 240;
snake2.x[0] = 450;
snake2.y[0] = 240;
snake2.x[1] = 440;
snake2.y[1] = 240;
snake1.node = 2;
snake2.node = 2;
do
{
while(!kbhit())
{
if(food1.flag==1)
do
{
food1.x = rand()%520+60;
food1.y = rand()%370+60;
food1.flag=0;
}while(food1.x%10!=0||food1.y%10!=0);
if(food2.flag==1)
do
{
food2.x = rand()%520+60;
food2.y = rand()%370+60;
food2.flag=0;
}
while(food2.x%10!=0||food2.y%10!=0);
if(food1.flag==0)
{
setcolor(GREEN);
setlinestyle(3,0,3);
rectangle(food1.x,food1.y,food1.x+10,food1.y+10);
}
if(food2.flag==0)
{
setcolor(GREEN);
setlinestyle(3,0,3);
rectangle(food2.x,food2.y,food2.x+10,food2.y+10);
}
for(i=snake1.node-1;i>0;i--)
{
snake1.x[i]=snake1.x[i-1];
snake1.y[i]=snake1.y[i-1];
}
for(i=snake2.node-1;i>0;i--)
{
snake2.x[i]=snake2.x[i-1];
snake2.y[i]=snake2.y[i-1];
}
switch(snake1.dir)
{
case 1:
snake1.x[0]+=10;
break;
case 2:
snake1.x[0]-=10;
break;
case 3:
snake1.y[0]+=10;
break;
case 4:
snake1.y[0]-=10;
break;
}
switch(snake2.dir)
{
case 1:
snake2.x[0]+=10;
break;
case 2:
snake2.x[0]-=10;
break;
case 3:
snake2.y[0]+=10;
break;
case 4:
snake2.y[0]-=10;
break;
}
for(i=3;i
{
if(snake1.x[i]==snake1.x[0]&&snake1.y[i]==snake1.y[0])
{
Gameover();
snake1.life=1;
break;
}
}
if(snake1.x[0]<60||snake1.x[0]>590||snake1.y[0]<50||snake1.y[0]>440)
{
Gameover();
snake1.life=1;
break;
}
if(snake1.x[0]==food1.x&&snake1.y[0]==food1.y)
{
setcolor(0);
rectangle(food1.x,food1.y,food1.x+10,food1.y+10);
snake1.node++;
food1.flag=1;
speed-=50;
}
setcolor(4);
for(i=0;i
{
setlinestyle(0,0,1);
rectangle(snake1.x[i],snake1.y[i],snake1.x[i]+10,snake1.y[i]+10);
}
delay(speed);
setcolor(0);
rectangle(snake1.x[snake1.node-1],snake1.y[snake1.node-1],snake1.x[snake1.node-1]+10,snake1.y[snake1.node-1]+10);
}
for(i=3;i
{
if(snake2.x[i]==snake2.x[0]&&snake2.y[i]==snake2.y[0])
{
Gameover();
snake2.life=1;
break;
}
}
if(snake2.x[0]<60||snake2.x[0]>590||snake2.y[0]<50||snake2.y[0]>440)
{
Gameover();
snake2.life=1;
break;
}
if(snake2.x[0]==food2.x&&snake1.y[0]==food2.y)
{
setcolor(0);
rectangle(food2.x,food2.y,food2.x+10,food2.y+10);
snake2.node++;
food2.flag=1;
speed-=50;
}
setcolor(4);
for(i=0;i
{
setlinestyle(0,0,1);
rectangle(snake2.x[i],snake2.y[i],snake2.x[i]+10,snake2.y[i]+10);
}
delay(speed);
setcolor(0);
rectangle(snake2.x[snake2.node-1],snake2.y[snake2.node-1],snake2.x[snake2.node-1]+10,snake2.y[snake2.node-1]+10);
if(snake1.life==1)
{break;}
if(snake2.life==1)
{break;}
key=bioskey(0);
if(key==UP&&snake1.dir!=4)
snake1.dir=3;
if(key==DOWN&&snake1.dir!=3)
snake1.dir=4;
if(key==RIGHT&&snake1.dir!=2)
snake1.dir=1;
if(key==LEFT&&snake1.dir!=1)
snake1.dir=2;
if(key==W&&snake2.dir!=4)
snake2.dir=3;
if(key==S&&snake2.dir!=3)
snake2.dir=4;
if(key==A&&snake2.dir!=2)
snake2.dir=1;
if(key==A&&snake2.dir!=1)
snake2.dir=2;
}while(key!=ESC);
}