I have to make a tron type game with collision detection. I started by making p1 and p2 move and leave a trail behind them.
I tried to make a color collision detection but its not working. I have different variables such as "P1_edge" which is when p1 hits the edge of the screen. I mark that with a red border.
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.
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)
{
}
}
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.