Dark GDK help

Apr 4, 2012 at 1:59am
I am making a snake game and this is what i have so far. The problem is the turning. I am currently trying to make it so that the next tail goes to the place of the previous tail, but I am having difficulty with that because I do not know the location of the previous tail until it has already moved. Help?

[#include "DarkGDK.h"


void DarkGDK ( void )
{

dbSyncOn ( );
dbSyncRate ( 10 );

dbDisableEscapeKey ( );
dbSetWindowSize(400, 400);
dbRandomize(dbTimer());


dbLoadImage ( "RedSnake.bmp", 1 );//25x50
dbSprite ( 1, 200, 200, 1 );


dbLoadImage("RedTail.bmp", 2);//9x9
dbSprite(2, 200,209,2);


dbLoadImage ("fruit.bmp", 3);
dbSprite(20, dbRnd(300), dbRnd(300), 3);

int tail1= dbSpriteX(2);
int tail2= dbSpriteY(2);

int tail = 4;




while ( LoopGDK ( ) )
{
for(int a=1; a<50; a++)
dbOffsetSprite(a, 5, 5);
if(dbUpKey() == 1)
{
dbRotateSprite(1, 0);
//dbMoveSprite(1, 4);


int head1 = dbSpriteX(1) ;
int head2 = dbSpriteY(1) ;

dbMoveSprite(1, 4);

tail1 = dbSpriteX(2);
tail2 = dbSpriteY(2);

//int tail21;
//int tail22;

dbSprite(2, head1, head2+10, 2);
dbSprite(3, tail1, tail2+10,2); //take out +10, just for seeing each tail

tail1 = dbSpriteX(3);
tail2 = dbSpriteY(3);

for(int t=4;t<=tail;t++)
{
dbSprite(t, tail1, tail2+11, 2);//change 11 back to 10, this was to see the gap between each tail
tail1 = dbSpriteX(t);
tail2 = dbSpriteY(t);
dbMoveSprite(t, 4);
}
/*for(int e =3; e<=tail;e++)
{

tail21 = dbSpriteX(e);
tail22 = dbSpriteY(e);
if(e == 3)
{

dbSprite(e, tail1, tail2, 2);
dbSprite(e, tail1, tail2-4, 2);
}
else
{
dbSprite(e, tail21, tail22, 2);
tail1 = dbSpriteX(e);
tail2 = dbSpriteY(e);
}


}*/

if (dbSpriteCollision(1, 20))
{
tail1 = dbSpriteX(tail-1);
tail2 = dbSpriteY(tail-1);
tail1 = dbSpriteX(3);
tail2 = dbSpriteY(3);
dbDeleteSprite(20);
dbSprite(20, dbRnd(300), dbRnd(300), 3);
tail++;
dbSprite(tail,tail1, tail2+10, 2);

}


}
if(dbDownKey() == 1)
{
dbRotateSprite(1, 0);


int head1 = dbSpriteX(1) ;
int head2 = dbSpriteY(1) ;

dbMoveSprite(1, -4);

int tail1 = dbSpriteX(2);
int tail2 = dbSpriteY(2);

dbSprite(2, head1, head2-10, 2);
dbSprite(3, tail1, tail2-10, 2);//take out -10

tail1 = dbSpriteX(3);
tail2 = dbSpriteY(3);

for(int t=4;t<=tail;t++)
{
dbSprite(t, tail1, tail2-11, 2);//change 11 back to 10, this was to see the gap between each tail
tail1 = dbSpriteX(t);
tail2 = dbSpriteY(t);
dbMoveSprite(t, -4);
}

/*for(int e =3; e<=tail;e++)
{
dbSprite(e, tail1, tail2, 2);

dbSprite(e, tail1, tail2-9, 2);
}
*/
if (dbSpriteCollision(1, 20))
{
tail1 = dbSpriteX(tail-1);
tail2 = dbSpriteY(tail-1);
tail1 = dbSpriteX(3);
tail2 = dbSpriteY(3);
dbDeleteSprite(20);
dbSprite(20, dbRnd(300), dbRnd(300), 3);
tail++;
dbSprite(tail,tail1, tail2-10, 2);

}
}
if(dbRightKey() == 1)
{
dbRotateSprite(1, 90);


int head1 = dbSpriteX(1);
int head2 = dbSpriteY(1);

dbMoveSprite(1, 4);

int tail1 = dbSpriteX(2);
int tail2 = dbSpriteY(2);

dbSprite(2, head1-10, head2, 2);
dbSprite(3, tail1-10, tail2, 2);//take out -10


tail1 = dbSpriteX(3);
tail2 = dbSpriteY(3);

for(int t=4;t<=tail;t++)
{
dbSprite(t, tail1-11, tail2, 2);
tail1 = dbSpriteX(t);
tail2 = dbSpriteY(t);
dbRotateSprite(t,90);
dbMoveSprite(t, 4);
dbRotateSprite(t,0);
}

/* for(int e=3;e<=tail;e++)
{
dbSprite(e, tail1, tail2, 2);

dbSprite(e, tail1+4, tail2, 2);
}
if (dbSpriteCollision(1, 20))
{
tail1 = dbSpriteX(tail-1);
tail2 = dbSpriteY(tail-1);
dbDeleteSprite(20);
dbSprite(20, dbRnd(300), dbRnd(300), 3);
tail++;
dbSprite(tail,tail1-7, tail2, 2);


}*/
if (dbSpriteCollision(1, 20))
{
//tail1 = dbSpriteX(tail-1);
//tail2 = dbSpriteY(tail-1);
tail1 = dbSpriteX(3);
tail2 = dbSpriteY(3);
dbDeleteSprite(20);
dbSprite(20, dbRnd(300), dbRnd(300), 3);
tail++;
dbSprite(tail,tail1-10, tail2, 2);

}

}
if(dbLeftKey() == 1)
{
dbRotateSprite(1, -90);


int head1 = dbSpriteX(1);
int head2 = dbSpriteY(1);

dbMoveSprite(1, 4);

int tail1 = dbSpriteX(2);
int tail2 = dbSpriteY(2);
dbSprite(2, head1+10, head2, 2);
dbSprite(3, tail1+10,tail2, 2);//take out +10

tail1 = dbSpriteX(3);
tail2 = dbSpriteY(3);


for(int t=4;t<=tail;t++)
{
dbSprite(t, tail1+11, tail2, 2); //change 11 back to 10, this was to see the gap between each tail
tail1 = dbSpriteX(t);
tail2 = dbSpriteY(t);
dbRotateSprite(t, -90);
dbMoveSprite(t, 4);
dbRotateSprite(t,0);
}

/*for(int e =3; e<=tail;e++)
{
dbSprite(e, tail1, tail2, 2);
//dbWait(200);
dbSprite(e, tail1-4, tail2, 2);
}

if (dbSpriteCollision(1, 20))
{
tail1 = dbSpriteX(tail-1);
tail2 = dbSpriteY(tail-1);
dbDeleteSprite(20);
dbSprite(20, dbRnd(300), dbRnd(300), 3);
tail++;
dbSprite(tail,tail1+7, tail2, 2);

}*/
if (dbSpriteCollision(1, 20))
{
//tail1 = dbSpriteX(tail-1);
//tail2 = dbSpriteY(tail-1);
tail1 = dbSpriteX(3);
tail2 = dbSpriteY(3);
dbDeleteSprite(20);
dbSprite(20, dbRnd(300), dbRnd(300), 3);
tail++;
dbSprite(tail,tail1+10, tail2, 2);

}

}

if ( dbEscapeKey ( ) )
break;

dbSync ( );
}//gdk loop


for ( int i = 1; i < 30; i++ )
{
dbDeleteSprite ( i );
dbDeleteImage(i);
}


}//void gdk][/code]
Last edited on Apr 4, 2012 at 2:03am
Topic archived. No new replies allowed.