Click here to Skip to main content
15,890,579 members
Home / Discussions / Algorithms
   

Algorithms

 
QuestionSearch Algorithm Pin
Cyclone_S16-Apr-11 8:22
Cyclone_S16-Apr-11 8:22 
QuestionRe: Search Algorithm Pin
bob1697216-Apr-11 9:28
bob1697216-Apr-11 9:28 
AnswerRe: Search Algorithm Pin
Cyclone_S16-Apr-11 13:10
Cyclone_S16-Apr-11 13:10 
GeneralRe: Search Algorithm Pin
bob1697216-Apr-11 17:52
bob1697216-Apr-11 17:52 
GeneralRe: Search Algorithm Pin
Cyclone_S20-Apr-11 9:58
Cyclone_S20-Apr-11 9:58 
GeneralRe: Search Algorithm Pin
bob1697220-Apr-11 18:06
bob1697220-Apr-11 18:06 
GeneralRe: Search Algorithm Pin
Cyclone_S21-Apr-11 14:45
Cyclone_S21-Apr-11 14:45 
GeneralRe: Search Algorithm Pin
Cyclone_S22-Apr-11 9:57
Cyclone_S22-Apr-11 9:57 
I think my previous aproach is not working becuase the position of the segments isn't pixel perfect so the snake slips through and goes in the wrong direction.

I'm currently trying a different aproach which puts 3 boxes around the snake. One on the left, on the right and one on the top(see image). The code checks if one of those boxes touches a segment of the snake and then prevents the snake from going in the wrong direction. It works better but it still goes in the wrong direction some times when it's in a corner. Maybe because the if statements aren't in the correct order?

I attached the source code, and a release build(choose game type3 and press right arrow). Maybe you can find something wrong with the code. The functions related to the computer snake algorithm are Timer1,void comp_direction() and void move_comp_snake(). The code is pretty messy and long so you would have to do a search for those functions.

http://inspiredvisuals.com/Release-source.zip[^]

http://img863.imageshack.us/i/image2n.jpg/[^]

direction_comp values:
Left=1
Right=-1
Up=2
Down=-1

Here is a portion of the code. Maybe the if statements aren't in the correct order? I checked a few times and don't see a problem. It uses loops. One for each side of the snake and sets bool variables to true if one of the boxes touches a segment of the snake. It then uses a bunch of if staments to tell the snake to go in the correct direction depending on certain conditions such as the previous direction or if it runs into a corner.

int temp = direction_comp; //Used to prevent the snake from moving backwards.
				
				// Variables used to check for collisions.
				bool colide_left = false;
				bool colide_right = false;
				bool colide_top = false;
				bool colide_bottom = false;

				// Make The Snake Search For Food
				if(segments_comp[head_comp]->panel->Top <= Food->Top)
				{
					if(segments_comp[head_comp]->panel->Left > Food->Left){direction_comp = -2;} else{direction_comp=-1;}
				}
				else
				{	
					if(segments_comp[head_comp]->panel->Left < Food->Left){direction_comp =2;}else{direction_comp=1;}
				}

				// Check for snake body collision.
				if(direction_comp==2) // Moving Up
				{
					for(int I=0;I<(size_comp-1);I++) // Coliding Top
					{
						if((head_comp2->Right >= segments_comp[I]->panel->Left && head_comp2->Right <= segments_comp[I]->panel->Right) ||  (head_comp2->Left >= segments_comp[I]->panel->Left && head_comp2->Left <= segments_comp[I]->panel->Right))
						{
							if((head_comp2->Top >= segments_comp[I]->panel->Top && head_comp2->Top <= segments_comp[I]->panel->Bottom) || (head_comp2->Bottom >= segments_comp[I]->panel->Top && head_comp2->Bottom <= segments_comp[I]->panel->Bottom))
							{colide_top = true;break;}
						}
						else if((head_comp2->Top >= segments_comp[I]->panel->Top && head_comp2->Top <= segments_comp[I]->panel->Bottom) || (head_comp2->Bottom >= segments_comp[I]->panel->Top && head_comp2->Bottom <= segments_comp[I]->panel->Bottom))
						{
							if((head_comp2->Right >= segments_comp[I]->panel->Left && head_comp2->Right <= segments_comp[I]->panel->Right) || (head_comp2->Left >= segments_comp[I]->panel->Left && head_comp2->Left <= segments_comp[I]->panel->Right))
							{colide_top = true;break;}
						}
					}

					for(int I=0;I<(size_comp-1);I++) // Coliding Top Right Corner
					{
						if((head_comp3->Right >= segments_comp[I]->panel->Left && head_comp3->Right <= segments_comp[I]->panel->Right) ||  (head_comp3->Left >= segments_comp[I]->panel->Left && head_comp3->Left <= segments_comp[I]->panel->Right))
						{
							if((head_comp3->Top >= segments_comp[I]->panel->Top && head_comp3->Top <= segments_comp[I]->panel->Bottom) || (head_comp3->Bottom >= segments_comp[I]->panel->Top && head_comp3->Bottom <= segments_comp[I]->panel->Bottom))
							{colide_right = true;break;}
						}
						else if((head_comp3->Top >= segments_comp[I]->panel->Top && head_comp3->Top <= segments_comp[I]->panel->Bottom) || (head_comp3->Bottom >= segments_comp[I]->panel->Top && head_comp3->Bottom <= segments_comp[I]->panel->Bottom))
						{
							if((head_comp3->Right >= segments_comp[I]->panel->Left && head_comp3->Right <= segments_comp[I]->panel->Right) || (head_comp3->Left >= segments_comp[I]->panel->Left && head_comp3->Left <= segments_comp[I]->panel->Right))
							{colide_right = true;break;}
						}
					}

					for(int I=0;I<(size_comp-1);I++) // Coliding Top Left Corner
					{
						if((head_comp4->Right >= segments_comp[I]->panel->Left && head_comp4->Right <= segments_comp[I]->panel->Right) ||  (head_comp4->Left >= segments_comp[I]->panel->Left && head_comp4->Left <= segments_comp[I]->panel->Right))
						{
							if((head_comp4->Top >= segments_comp[I]->panel->Top && head_comp4->Top <= segments_comp[I]->panel->Bottom) || (head_comp4->Bottom >= segments_comp[I]->panel->Top && head_comp4->Bottom <= segments_comp[I]->panel->Bottom))
							{colide_left = true;break;}
						}
						else if((head_comp4->Top >= segments_comp[I]->panel->Top && head_comp4->Top <= segments_comp[I]->panel->Bottom) || (head_comp4->Bottom >= segments_comp[I]->panel->Top && head_comp4->Bottom <= segments_comp[I]->panel->Bottom))
						{
							if((head_comp4->Right >= segments_comp[I]->panel->Left && head_comp4->Right <= segments_comp[I]->panel->Right) || (head_comp4->Left >= segments_comp[I]->panel->Left && head_comp4->Left <= segments_comp[I]->panel->Right))
							{colide_left = true;break;}
						}
					}
						if(colide_top == true && colide_left == true && colide_right == true){Timer1->Stop();} // If snake gets trapped in a corner kill the snake.
						else if(colide_top == true && colide_right == true && previous_direction == 1){direction_comp = -2;} // If snake was moving left and is in left top corner.
						else if(colide_top == true && colide_left == true && previous_direction == -1){direction_comp = -2;} // If snake was moving right and is in right top corner.
						else if(colide_right == true && previous_direction == 1){direction_comp = 1;} // If snake is directly undernieth its's body and moving left prevent snake from moving up.
						else if(colide_left == true && previous_direction == -1){direction_comp = -1;} // If snake is directly undernieth its's body and moving right prevent snake from moving up.
						else if(colide_top == true && colide_left == true){direction_comp = -1;} // If snake is moving up and is coliding with top left corner.
						else if(colide_top == true && colide_right == true){direction_comp = 1;} // If snake is moving up and is coliding with top right corner.
						else if(colide_top == true){direction_comp = 1;} // Coliding Top (will be random)
						
						
				}

// Prevent the snake from moving backwards.
				if(temp==1 && direction_comp==-1){direction_comp=2;}
				else if(temp==-1 && direction_comp==1){direction_comp=2;}
				else if(temp==2 && direction_comp==-2){direction_comp=1;}
				else if(temp==-2 && direction_comp==2){direction_comp=1;}

				previous_direction = direction_comp; // Store the previous direction.




The entire function.

void comp_direction()
{
    int temp = direction_comp; //Used to prevent the snake from moving backwards.

    // Variables used to check for collisions.
    bool colide_left = false;
    bool colide_right = false;
    bool colide_top = false;
    bool colide_bottom = false;

    // Make The Snake Search For Food
    if(segments_comp[head_comp]->panel->Top <= Food->Top)
    {
        if(segments_comp[head_comp]->panel->Left > Food->Left){direction_comp = -2;} else{direction_comp=-1;}
    }
    else
    {
        if(segments_comp[head_comp]->panel->Left < Food->Left){direction_comp =2;}else{direction_comp=1;}
    }

    // Check for snake body collision.
    if(direction_comp==2) // Moving Up
    {
        for(int I=0;I<(size_comp-1);I++) // Coliding Top
        {
            if((head_comp2->Right >= segments_comp[I]->panel->Left && head_comp2->Right <= segments_comp[I]->panel->Right) ||  (head_comp2->Left >= segments_comp[I]->panel->Left && head_comp2->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp2->Top >= segments_comp[I]->panel->Top && head_comp2->Top <= segments_comp[I]->panel->Bottom) || (head_comp2->Bottom >= segments_comp[I]->panel->Top && head_comp2->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_top = true;break;}
            }
            else if((head_comp2->Top >= segments_comp[I]->panel->Top && head_comp2->Top <= segments_comp[I]->panel->Bottom) || (head_comp2->Bottom >= segments_comp[I]->panel->Top && head_comp2->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp2->Right >= segments_comp[I]->panel->Left && head_comp2->Right <= segments_comp[I]->panel->Right) || (head_comp2->Left >= segments_comp[I]->panel->Left && head_comp2->Left <= segments_comp[I]->panel->Right))
                {colide_top = true;break;}
            }
        }

        for(int I=0;I<(size_comp-1);I++) // Coliding Top Right Corner
        {
            if((head_comp3->Right >= segments_comp[I]->panel->Left && head_comp3->Right <= segments_comp[I]->panel->Right) ||  (head_comp3->Left >= segments_comp[I]->panel->Left && head_comp3->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp3->Top >= segments_comp[I]->panel->Top && head_comp3->Top <= segments_comp[I]->panel->Bottom) || (head_comp3->Bottom >= segments_comp[I]->panel->Top && head_comp3->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_right = true;break;}
            }
            else if((head_comp3->Top >= segments_comp[I]->panel->Top && head_comp3->Top <= segments_comp[I]->panel->Bottom) || (head_comp3->Bottom >= segments_comp[I]->panel->Top && head_comp3->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp3->Right >= segments_comp[I]->panel->Left && head_comp3->Right <= segments_comp[I]->panel->Right) || (head_comp3->Left >= segments_comp[I]->panel->Left && head_comp3->Left <= segments_comp[I]->panel->Right))
                {colide_right = true;break;}
            }
        }

        for(int I=0;I<(size_comp-1);I++) // Coliding Top Left Corner
        {
            if((head_comp4->Right >= segments_comp[I]->panel->Left && head_comp4->Right <= segments_comp[I]->panel->Right) ||  (head_comp4->Left >= segments_comp[I]->panel->Left && head_comp4->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp4->Top >= segments_comp[I]->panel->Top && head_comp4->Top <= segments_comp[I]->panel->Bottom) || (head_comp4->Bottom >= segments_comp[I]->panel->Top && head_comp4->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_left = true;break;}
            }
            else if((head_comp4->Top >= segments_comp[I]->panel->Top && head_comp4->Top <= segments_comp[I]->panel->Bottom) || (head_comp4->Bottom >= segments_comp[I]->panel->Top && head_comp4->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp4->Right >= segments_comp[I]->panel->Left && head_comp4->Right <= segments_comp[I]->panel->Right) || (head_comp4->Left >= segments_comp[I]->panel->Left && head_comp4->Left <= segments_comp[I]->panel->Right))
                {colide_left = true;break;}
            }
        }
            if(colide_top == true && colide_left == true && colide_right == true){Timer1->Stop();} // If snake gets trapped in a corner kill the snake.
            else if(colide_top == true && colide_right == true && previous_direction == 1){direction_comp = -2;} // If snake was moving left and is in left top corner.
            else if(colide_top == true && colide_left == true && previous_direction == -1){direction_comp = -2;} // If snake was moving right and is in right top corner.
            else if(colide_right == true && previous_direction == 1){direction_comp = 1;} // If snake is directly undernieth its's body and moving left prevent snake from moving up.
            else if(colide_left == true && previous_direction == -1){direction_comp = -1;} // If snake is directly undernieth its's body and moving right prevent snake from moving up.
            else if(colide_top == true && colide_left == true){direction_comp = -1;} // If snake is moving up and is coliding with top left corner.
            else if(colide_top == true && colide_right == true){direction_comp = 1;} // If snake is moving up and is coliding with top right corner.
            else if(colide_top == true){direction_comp = 1;} // Coliding Top (will be random)


    }
    else if(direction_comp==-2) // Moving Down
    {
        for(int I=0;I<(size_comp-1);I++) // Coliding Bottom
        {
            if((head_comp2->Right >= segments_comp[I]->panel->Left && head_comp2->Right <= segments_comp[I]->panel->Right) ||  (head_comp2->Left >= segments_comp[I]->panel->Left && head_comp2->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp2->Top >= segments_comp[I]->panel->Top && head_comp2->Top <= segments_comp[I]->panel->Bottom) || (head_comp2->Bottom >= segments_comp[I]->panel->Top && head_comp2->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_bottom = true;break;}
            }
            else if((head_comp2->Top >= segments_comp[I]->panel->Top && head_comp2->Top <= segments_comp[I]->panel->Bottom) || (head_comp2->Bottom >= segments_comp[I]->panel->Top && head_comp2->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp2->Right >= segments_comp[I]->panel->Left && head_comp2->Right <= segments_comp[I]->panel->Right) || (head_comp2->Left >= segments_comp[I]->panel->Left && head_comp2->Left <= segments_comp[I]->panel->Right))
                {colide_bottom = true;break;}
            }
        }

        for(int I=0;I<(size_comp-1);I++) // Coliding Top Left Corner
        {
            if((head_comp3->Right >= segments_comp[I]->panel->Left && head_comp3->Right <= segments_comp[I]->panel->Right) ||  (head_comp3->Left >= segments_comp[I]->panel->Left && head_comp3->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp3->Top >= segments_comp[I]->panel->Top && head_comp3->Top <= segments_comp[I]->panel->Bottom) || (head_comp3->Bottom >= segments_comp[I]->panel->Top && head_comp3->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_left = true;break;}
            }
            else if((head_comp3->Top >= segments_comp[I]->panel->Top && head_comp3->Top <= segments_comp[I]->panel->Bottom) || (head_comp3->Bottom >= segments_comp[I]->panel->Top && head_comp3->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp3->Right >= segments_comp[I]->panel->Left && head_comp3->Right <= segments_comp[I]->panel->Right) || (head_comp3->Left >= segments_comp[I]->panel->Left && head_comp3->Left <= segments_comp[I]->panel->Right))
                {colide_left = true;break;}
            }
        }

        for(int I=0;I<(size_comp-1);I++) // Coliding Top Right Corner
        {
            if((head_comp4->Right >= segments_comp[I]->panel->Left && head_comp4->Right <= segments_comp[I]->panel->Right) ||  (head_comp4->Left >= segments_comp[I]->panel->Left && head_comp4->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp4->Top >= segments_comp[I]->panel->Top && head_comp4->Top <= segments_comp[I]->panel->Bottom) || (head_comp4->Bottom >= segments_comp[I]->panel->Top && head_comp4->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_right = true;break;}
            }
            else if((head_comp4->Top >= segments_comp[I]->panel->Top && head_comp4->Top <= segments_comp[I]->panel->Bottom) || (head_comp4->Bottom >= segments_comp[I]->panel->Top && head_comp4->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp4->Right >= segments_comp[I]->panel->Left && head_comp4->Right <= segments_comp[I]->panel->Right) || (head_comp4->Left >= segments_comp[I]->panel->Left && head_comp4->Left <= segments_comp[I]->panel->Right))
                {colide_right = true;break;}
            }
        }

            if(colide_bottom == true && colide_left == true && colide_right == true){Timer1->Stop();} // If snake gets trapped in a corner kill the snake.
            else if(colide_bottom == true && colide_right == true && previous_direction == 1){direction_comp = 2;} // If snake was moving left and is in left bottom corner.
            else if(colide_bottom == true && colide_left == true && previous_direction == -1){direction_comp = 2;} // If snake was moving right and is in right bottom corner.
            else if(colide_right == true && previous_direction == 1){direction_comp = 1;} // If snake is directly above its's body and moving left prevent snake from moving down.
            else if(colide_left == true && previous_direction == -1){direction_comp = -1;} // If snake is directly above its's body and moving right prevent snake from moving down.
            else if(colide_bottom == true && colide_left == true){direction_comp = -1;} // If snake is moving down and is coliding with bottom left corner.
            else if(colide_bottom == true && colide_right == true){direction_comp = 1;} // If snake is moving down and is coliding with bottom right corner.
            else if(colide_bottom == true){direction_comp = 1;} // Coliding bottom (will be random).



    }
    else if(direction_comp == 1) // Moving Left
    {
        for(int I=0;I<(size_comp-1);I++) // Coliding Left
        {
            if((head_comp2->Right >= segments_comp[I]->panel->Left && head_comp2->Right <= segments_comp[I]->panel->Right) ||  (head_comp2->Left >= segments_comp[I]->panel->Left && head_comp2->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp2->Top >= segments_comp[I]->panel->Top && head_comp2->Top <= segments_comp[I]->panel->Bottom) || (head_comp2->Bottom >= segments_comp[I]->panel->Top && head_comp2->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_left = true;break;}
            }
            else if((head_comp2->Top >= segments_comp[I]->panel->Top && head_comp2->Top <= segments_comp[I]->panel->Bottom) || (head_comp2->Bottom >= segments_comp[I]->panel->Top && head_comp2->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp2->Right >= segments_comp[I]->panel->Left && head_comp2->Right <= segments_comp[I]->panel->Right) || (head_comp2->Left >= segments_comp[I]->panel->Left && head_comp2->Left <= segments_comp[I]->panel->Right))
                {colide_left = true;break;}
            }
        }

        for(int I=0;I<(size_comp-1);I++) // Coliding Left Top Corner
        {
            if((head_comp3->Right >= segments_comp[I]->panel->Left && head_comp3->Right <= segments_comp[I]->panel->Right) ||  (head_comp3->Left >= segments_comp[I]->panel->Left && head_comp3->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp3->Top >= segments_comp[I]->panel->Top && head_comp3->Top <= segments_comp[I]->panel->Bottom) || (head_comp3->Bottom >= segments_comp[I]->panel->Top && head_comp3->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_top = true;break;}
            }
            else if((head_comp3->Top >= segments_comp[I]->panel->Top && head_comp3->Top <= segments_comp[I]->panel->Bottom) || (head_comp3->Bottom >= segments_comp[I]->panel->Top && head_comp3->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp3->Right >= segments_comp[I]->panel->Left && head_comp3->Right <= segments_comp[I]->panel->Right) || (head_comp3->Left >= segments_comp[I]->panel->Left && head_comp3->Left <= segments_comp[I]->panel->Right))
                {colide_top = true;break;}
            }
        }

        for(int I=0;I<(size_comp-1);I++) // Coliding Left Bottom Corner
        {
            if((head_comp4->Right >= segments_comp[I]->panel->Left && head_comp4->Right <= segments_comp[I]->panel->Right) ||  (head_comp4->Left >= segments_comp[I]->panel->Left && head_comp4->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp4->Top >= segments_comp[I]->panel->Top && head_comp4->Top <= segments_comp[I]->panel->Bottom) || (head_comp4->Bottom >= segments_comp[I]->panel->Top && head_comp4->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_bottom = true;break;}
            }
            else if((head_comp4->Top >= segments_comp[I]->panel->Top && head_comp4->Top <= segments_comp[I]->panel->Bottom) || (head_comp4->Bottom >= segments_comp[I]->panel->Top && head_comp4->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp4->Right >= segments_comp[I]->panel->Left && head_comp4->Right <= segments_comp[I]->panel->Right) || (head_comp4->Left >= segments_comp[I]->panel->Left && head_comp4->Left <= segments_comp[I]->panel->Right))
                {colide_bottom = true;break;}
            }
        }

            if(colide_top == true && colide_bottom == true && colide_left == true){Timer1->Stop();} // If snake gets trapped in a corner kill the snake.
            else if(colide_bottom == true && colide_left == true && previous_direction == -2){direction_comp = -1;} // If snake was moving up and is in left top corner.
            else if(colide_top == true && colide_left == true && previous_direction == -2){direction_comp = -1;} // If snake was moving down and is in left bottom corner.
            else if(colide_bottom == true && previous_direction == 2){direction_comp = 2;} // If snake is directly to the right of its's body and moving up prevent snake from moving left.
            else if(colide_top == true && previous_direction == -2){direction_comp = -2;} // If snake is directly to the right its's body and moving down prevent snake from moving left.
            else if(colide_top == true && colide_left == true){direction_comp = -2;} // If snake is moving left and is coliding with top left corner.
            else if(colide_bottom == true && colide_left == true){direction_comp = 2;} // If snake is moving left and is coliding with bottom left corner.
            else if(colide_left == true){direction_comp = 1;} // Coliding Top (will be random)



    }
    else if(direction_comp==-1) // Moving Right
    {
        for(int I=0;I<(size_comp-1);I++) // Coliding Right
        {
            if((head_comp2->Right >= segments_comp[I]->panel->Left && head_comp2->Right <= segments_comp[I]->panel->Right) ||  (head_comp2->Left >= segments_comp[I]->panel->Left && head_comp2->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp2->Top >= segments_comp[I]->panel->Top && head_comp2->Top <= segments_comp[I]->panel->Bottom) || (head_comp2->Bottom >= segments_comp[I]->panel->Top && head_comp2->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_right = true;break;}
            }
            else if((head_comp2->Top >= segments_comp[I]->panel->Top && head_comp2->Top <= segments_comp[I]->panel->Bottom) || (head_comp2->Bottom >= segments_comp[I]->panel->Top && head_comp2->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp2->Right >= segments_comp[I]->panel->Left && head_comp2->Right <= segments_comp[I]->panel->Right) || (head_comp2->Left >= segments_comp[I]->panel->Left && head_comp2->Left <= segments_comp[I]->panel->Right))
                {colide_right = true;break;}
            }
        }

        for(int I=0;I<(size_comp-1);I++) // Coliding Right Bottom Corner
        {
            if((head_comp3->Right >= segments_comp[I]->panel->Left && head_comp3->Right <= segments_comp[I]->panel->Right) ||  (head_comp3->Left >= segments_comp[I]->panel->Left && head_comp3->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp3->Top >= segments_comp[I]->panel->Top && head_comp3->Top <= segments_comp[I]->panel->Bottom) || (head_comp3->Bottom >= segments_comp[I]->panel->Top && head_comp3->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_bottom = true;break;}
            }
            else if((head_comp3->Top >= segments_comp[I]->panel->Top && head_comp3->Top <= segments_comp[I]->panel->Bottom) || (head_comp3->Bottom >= segments_comp[I]->panel->Top && head_comp3->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp3->Right >= segments_comp[I]->panel->Left && head_comp3->Right <= segments_comp[I]->panel->Right) || (head_comp3->Left >= segments_comp[I]->panel->Left && head_comp3->Left <= segments_comp[I]->panel->Right))
                {colide_bottom = true;break;}
            }
        }

        for(int I=0;I<(size_comp-1);I++) // Coliding Right Top Corner
        {
            if((head_comp4->Right >= segments_comp[I]->panel->Left && head_comp4->Right <= segments_comp[I]->panel->Right) ||  (head_comp4->Left >= segments_comp[I]->panel->Left && head_comp4->Left <= segments_comp[I]->panel->Right))
            {
                if((head_comp4->Top >= segments_comp[I]->panel->Top && head_comp4->Top <= segments_comp[I]->panel->Bottom) || (head_comp4->Bottom >= segments_comp[I]->panel->Top && head_comp4->Bottom <= segments_comp[I]->panel->Bottom))
                {colide_top = true;break;}
            }
            else if((head_comp4->Top >= segments_comp[I]->panel->Top && head_comp4->Top <= segments_comp[I]->panel->Bottom) || (head_comp4->Bottom >= segments_comp[I]->panel->Top && head_comp4->Bottom <= segments_comp[I]->panel->Bottom))
            {
                if((head_comp4->Right >= segments_comp[I]->panel->Left && head_comp4->Right <= segments_comp[I]->panel->Right) || (head_comp4->Left >= segments_comp[I]->panel->Left && head_comp4->Left <= segments_comp[I]->panel->Right))
                {colide_top = true;break;}
            }
        }

            if(colide_top == true && colide_bottom == true && colide_right == true){Timer1->Stop();} // If snake gets trapped in a corner kill the snake.
            else if(colide_bottom == true && colide_right == true && previous_direction == 2){direction_comp = 1;} // If snake was moving up and is in right top corner.
            else if(colide_top == true && colide_right == true && previous_direction == -2){direction_comp = -1;} // If snake was moving down and is in right bottom corner.
            else if(colide_bottom == true && previous_direction == 2){direction_comp = 2;} // If snake is directly to the left of its's body and moving up prevent snake from moving right.
            else if(colide_top == true && previous_direction == -2){direction_comp = -2;} // If snake is directly to the left of its's body and moving down prevent snake from moving right.
            else if(colide_top == true && colide_right == true){direction_comp = -2;} // If snake is moving right and is coliding with top right corner.
            else if(colide_bottom == true && colide_right == true){direction_comp = 2;} // If snake is moving right and is coliding with bottom right corner.
            else if(colide_right == true){direction_comp = 1;} // Coliding right (will be random)

    }

    // Prevent the snake from moving backwards.
    if(temp==1 && direction_comp==-1){direction_comp=2;}
    else if(temp==-1 && direction_comp==1){direction_comp=2;}
    else if(temp==2 && direction_comp==-2){direction_comp=1;}
    else if(temp==-2 && direction_comp==2){direction_comp=1;}

    previous_direction = direction_comp; // Store the previous direction.

}

GeneralRe: Search Algorithm Pin
bob1697224-Apr-11 4:59
bob1697224-Apr-11 4:59 
GeneralRe: Search Algorithm Pin
Cyclone_S27-Apr-11 13:43
Cyclone_S27-Apr-11 13:43 
AnswerRe: Search Algorithm Pin
Luc Pattyn20-Apr-11 12:39
sitebuilderLuc Pattyn20-Apr-11 12:39 
AnswerRe: Search Algorithm Pin
AspDotNetDev20-Apr-11 13:12
protectorAspDotNetDev20-Apr-11 13:12 
GeneralRe: Search Algorithm Pin
Cyclone_S20-Apr-11 13:40
Cyclone_S20-Apr-11 13:40 
AnswerRe: Search Algorithm Pin
Stefan_Lang26-Apr-11 4:32
Stefan_Lang26-Apr-11 4:32 
GeneralRe: Search Algorithm Pin
Cyclone_S27-Apr-11 13:50
Cyclone_S27-Apr-11 13:50 
Questionconverting MFC program into web based Pin
shiks11-Apr-11 17:06
shiks11-Apr-11 17:06 
AnswerRe: converting MFC program into web based Pin
Albert Holguin11-Apr-11 18:13
professionalAlbert Holguin11-Apr-11 18:13 
GeneralRe: converting MFC program into web based Pin
shiks12-Apr-11 5:15
shiks12-Apr-11 5:15 
GeneralRe: converting MFC program into web based Pin
Albert Holguin12-Apr-11 5:19
professionalAlbert Holguin12-Apr-11 5:19 
GeneralRe: converting MFC program into web based Pin
Albert Holguin12-Apr-11 5:21
professionalAlbert Holguin12-Apr-11 5:21 
AnswerRe: converting MFC program into web based Pin
Eddy Vluggen12-Apr-11 8:25
professionalEddy Vluggen12-Apr-11 8:25 
GeneralRe: converting MFC program into web based Pin
shiks13-Apr-11 17:02
shiks13-Apr-11 17:02 
QuestionGood way to detect a useful portion of equivalent expressions Pin
David198718-Mar-11 0:00
David198718-Mar-11 0:00 
AnswerRe: Good way to detect a useful portion of equivalent expressions Pin
CPallini18-Mar-11 1:29
mveCPallini18-Mar-11 1:29 
GeneralRe: Good way to detect a useful portion of equivalent expressions Pin
David198718-Mar-11 1:41
David198718-Mar-11 1:41 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.