title: Processing color collision detection (java)
body: <p>I have to make a tron type game with collision detection. I started by making <code>p1</code> and <code>p2</code> move and leave a trail behind them. </p>
  
  <p>I tried to make a color collision detection but its not working. I have different variables such as "P1_edge" which is when <code>p1</code> hits the edge of the screen. I mark that with a red border.</p>
  
  <p>But the only one that seem to be working is when they crash into themselves when the game starts. It instantly finishes as they are already on themselves. if I take that bit away, nothing else detects.</p>
  
  <pre><code>int P1_XPos; //Player 1 position
  int P1_YPos;
  
  boolean Player1_Up = false; //Determins what way P1 is going
  boolean Player1_Down = false;
  boolean Player1_Left = false;
  boolean Player1_Right = true;
  
  int P2_XPos; //Player 2 position
  int P2_YPos;
  
  boolean Player2_Up = false; //Determins what way P2 is going
  boolean Player2_Down = false;
  boolean Player2_Left = true;
  boolean Player2_Right = false;
  
  boolean Game_State = false; //see if the game is over (false = over)
  
  final int P1_Edge = 0; //P1 crashed into the edge
  final int P1_P1 = 1; //P1 crashed into P1
  final int P1_P2 = 2; //P1 crashed into P2
  
  final int P2_Edge = 3; //P2 crashed into the edge
  final int P2_P2 = 4; //P2 crashed into P2
  final int P2_P1 = 5; //P2 crashed into P1
  
  final int Crash = 6; //Other
  
  void setup()
  {
  size(700,600); //Set screen dimensions
  background(0, 0, 0); 
  
  P1_XPos = 100; //set P1 and P2 posision
  P1_YPos = 100;
  
  P2_XPos = 600;
  P2_YPos = 500;
  
  strokeWeight(3); //Draw the edge of the screen
  stroke(255, 0, 0);
  line(1, 1, 1, height - 1);
  line(1, 1, width - 1, 1);
  line(width - 2, 1, width - 2, height - 1);
  line(1, height - 2, width - 1, height - 2);
  
  stroke(0, 255, 0); //Draw the starting positions
  point(P1_XPos, P1_YPos);
  
  stroke(0, 0, 255); 
  point(P2_XPos, P2_YPos);
  }
  void draw()
  {
  strokeWeight(3);
  
  if (Game_State == true) //if the game is not over
  {
      stroke(0, 255, 0); //Draw P1
      point(P1_XPos, P1_YPos);
      MovePlayer1(); //Move P1
  
      stroke(0, 0, 255); //Draw P2
      point(P2_XPos, P2_YPos);
      MovePlayer2(); //Move P2
  
      Collision_Detection(); //Detect any crashes
  }
  
  
  }
  void keyPressed()
  {
  if(key == CODED) //Controls P1 movement
   {
       if (keyCode == UP)
       { 
           Player1_Up = true;
           Player1_Down = false;
           Player1_Left = false;
           Player1_Right = false;
       }
  
       else if(keyCode == DOWN)
       {
           Player1_Down = true;
           Player1_Up = false;
           Player1_Left = false;
           Player1_Right = false;
       }
  
       else if (keyCode == LEFT)
       {
           Player1_Left = true;
           Player1_Down = false;
           Player1_Up = false;
           Player1_Right = false;
       }
  
       else if (keyCode == RIGHT)
       {
           Player1_Right = true;
           Player1_Down = false;
           Player1_Left = false;
           Player1_Up = false;
       }
   }
  
   if ((key == 'W') || (key == 'w')) //Controls P2 movement
       { 
           Player2_Up = true;
           Player2_Down = false;
           Player2_Left = false;
           Player2_Right = false;
       }
  
       else if((key == 'S') || (key == 's'))
       {
           Player2_Down = true;
           Player2_Up = false;
           Player2_Left = false;
           Player2_Right = false;
       }
  
       else if ((key == 'A') || (key == 'a'))
       {
           Player2_Left = true;
           Player2_Down = false;
           Player2_Up = false;
           Player2_Right = false;
       }
  
       else if ((key == 'D') || (key == 'd'))
       {
           Player2_Right = true;
           Player2_Down = false;
           Player2_Left = false;
           Player2_Up = false;
       }
  
       if (key == ' ')
       {
           Game_State = true;
       }
  }
  
  void MovePlayer1() //Moves P1
  {
  if(Player1_Up == true)
  {
      P1_YPos -= 1;
  }
  
  if(Player1_Down == true)
  {
    P1_YPos += 1;
  }
  
  if(Player1_Left == true)
  {
    P1_XPos -= 1;
  }
  
  if(Player1_Right == true)
  {
    P1_XPos += 1;
  }
  }
  
  void MovePlayer2() //Moves P2
  {
  if(Player2_Up == true)
  {
      P2_YPos -= 1;
  }
  
  if(Player2_Down == true)
  {
    P2_YPos += 1;
  }
  
  if(Player2_Left == true)
  {
    P2_XPos -= 1;
  }
  
  if(Player2_Right == true)
  {
    P2_XPos += 1;
  }
  }
  
  int TestColorP1 (color P1Test) //Detect what color P1 is touching
  {
  
   if (P1Test == color (255,0,0)) 
   return P1_Edge; 
   else if (P1Test == color(0,255,0))
   return P1_P1;
   else if (P1Test == color(0,0,255))
   return P1_P2;
   else return Crash;
  }
  
  int TestColorP2 (color P2Test) //Detect what color P2 is touching
  {
  
   if (P2Test == color (255,0,0)) 
   return P2_Edge; 
   else if (P2Test == color(0,255,0))
   return P2_P1;
   else if (P2Test == color(0,0,255))
   return P2_P2;
   else return Crash;
  }
  
  void Collision_Detection()
  {
  color P1_Pixel; //This is the color P1 is touching
  color P2_Pixel;
  
  P1_Pixel = get(P1_XPos, P1_YPos); //Declare is as P1 position
  P2_Pixel = get(P2_XPos, P2_YPos);
  
   if (TestColorP1(P1_Pixel) == P1_Edge) //See if P1 has crashed
   { 
      background(0);
      Game_State = false;
   }
   else if (TestColorP1(P1_Pixel)== P1_P1)
   {
     // background(0);
     // Game_State = false;
   }
   else if (TestColorP1(P1_Pixel) == P1_P2)
   {
      background(0);
      Game_State = false;
   }
  
   if (TestColorP2(P2_Pixel) == P2_Edge) //See if P2 has crashed
   { 
      background(0);
      Game_State = false;
   }
   else if (TestColorP2(P2_Pixel)== P2_P1)
   {
      background(0);
      Game_State = false;
   }
   else if (TestColorP2(P2_Pixel) == P2_P2)
   {
     // background(0);
    //  Game_State = false;
   }
   else if (TestColorP2(P2_Pixel) == Crash)
   {
  
   }
  
  }
  </code></pre>
  
  <p>I know it's long, but you should be able to just copy and paste this in a processing sketch and it will work. I have also left comments so you know why I've added each bit of code.</p>