Quantcast
Channel: Active questions tagged crash - Stack Overflow
Viewing all articles
Browse latest Browse all 7188

How can I fix my crash method and collision detection between my player and other objects?

$
0
0

Currently, I'm making a 2d java game that includes a tank at the top of the screen shooting the oncoming cars from below, I have made a crash method and collision detection which determines to stop the game when the tank crashes or enters the radius of the cars. However, sometimes it works early, sometimes late and other times it doesn't. My question is how can I fix it so that when the tank enters the radius of the car it stops the game with simple code that excludes vectors.

Below are my classes and code.I'm using Java in Processing.

PImage bg;                 //loads bakgroundPFont f;                   //loads fontCar[] cars = new Car[3];//Bullet[] bullets = new Bullet[100];int x = 0;int y = 0; int game = 0; int running = 0;int over = 1;int score = 0;int move = 20;int cX, cY;//int carRadius = 20;Tank tank;void setup(){  size(500,1000);  textSize(40);  bg = loadImage("bg.jpeg");             //loads background  bg.resize(width,height);               //the background will fill the height and width of the screen size  tank = new Tank(tankX, tankY, 3, 2);      //X pos, Y pos, speedY  for (int i=0; i<cars.length; i++)  {    int cX = (int)random(width-100);      //car xpos    int cY = (int)random(900);            //car ypos    int speedY = 3;                       //car speedY    cars[i] = new Car(cX, cY, speedY);  }  cars[0] = new Car((int)random(5, width-100), (int)random(5, height), 2); //X pos, Y pos, speedY  cars[1] = new Car((int)random(5, width-100), (int)random(5, height), 2); //X pos, Y pos, speedY  cars[2] = new Car((int)random(5, width-100), (int)random(5, height), 2); //X pos, Y pos, speedY  f = createFont("Arial", 36, true);}void draw(){  if (game == running)  {    drawBackground();       //background    for (Car c : cars) {      c.draw();      c.move();    }    tank.draw();            //tank    drawScore();            //draw score    //if (bullet.crash(cars[0]) == true) {    //  cars.remove(c);    //  score++;    //}    if (game == over)    {      tank.speedX = 0;      tank.speedY = 0;      move = 0;      gameOver();    }    //if tank crashes into cars    if(tank.crash(cars[0]))    {      game = over;      gameOver();    }    if(tank.crash(cars[1]))    {      game = over;      gameOver();    }    if(tank.crash(cars[2]))    {      game = over;      gameOver();    }    /*    if(bullet.shoot(cars[0]))    {      cars[0].remove(c);      score++;    }    if(bullet.shoot(cars[1]))    {      cars[1].remove(c);      score++;    }    if(bullet.shoot(cars[2]))    {      cars[2].remove(c);      score++;    }    */  }}void keyReleased() {  tankXD = 0;  tankYD = 0;}void keyPressed() //controls for the tank using the arrow keys{  if(keyCode == LEFT) {     tankXD =- 10;  }  if(keyCode == RIGHT) {    tankXD = 10;   }  if(keyCode == DOWN) {     tankYD = 10;   }  if(keyCode == UP) {     tankYD =- 10;   }  if(keyCode == '') {    bulletSPD = 30;    //bullets.add(new Bullet(tank.x+30, tank.y+140, 3));}}//void carFill()// {//   fill(255,0,0);// }void drawBackground(){  image(bg, y, 0);}void drawScore() {  fill(255);  textFont(f);  text("Score: " + String.valueOf(score), 200, 50);}void gameOver() {  clear();  textFont(f);  text("Game Over! ", 150, 400);}
class Car {  //members   int cX, cY;   int speedY = 2;   int speedX = 0;   int animationCounter = 0;   int carRadius = 30;   PImage image1,image2,image3;   //constructor   Car(int cX, int cY, int speedY)   {     this.cX = cX;     this.cY = cY;     this.speedY = speedY;     image1 = loadImage("c1.png");     image2 = loadImage("c2.png");     image3 = loadImage("c3.png");   }   void update() {     draw();     move();   }   void move()     {    this.cY = this.cY - speedY; //move upwards    if(this.cY < 0 - image1.height)    this.cY = height + image1.height;    if(this.cY > height + image1.height +30)    this.cY = -image1.height;  }   void draw()   {     if (animationCounter >=0  &  animationCounter <=8)    { image(image1,this.cX,this.cY); }   else if (animationCounter >8  &  animationCounter <=16)  { image(image2,this.cX,this.cY); } else { image(image3,this.cX,this.cY); } animationCounter = animationCounter + 1; if(animationCounter>20) animationCounter = 0;  }}
int tankX = 215;           //tank xposint tankY = 60;            //tank yposint tankXD = 0;            //tank x dirint tankYD =  0;           //tank y dirint bulletX = tankX;       //bullet xposint bulletY = tankY;       //bullet yposint bulletW = 8;       //bullet xposint bulletH = 20;       //bullet yposint bulletSPD = 0;         //bullet speedint bulletRadius = 4;float bulletDistance = 5;PImage image1;class Tank{  //members  int tankX;  int tankY;  int speedX;  int speedY;  //constructor  Tank (int tankX, int tankY, int speedX, int speedY)  {    this.tankX = tankX;    this.tankY = tankY;    this.speedX = speedX;    this.speedY = speedY;    image1 = loadImage("tank.png");  }  void draw() {    image(image1,tankX, tankY);    tankX+=tankXD;    tankY+=tankYD;    bulletX=tankX;    bulletY+=bulletSPD;    if(bulletY>800) {      bulletX=tankX;      bulletY=tankY;      bulletSPD=0;    }    //draw bullet    fill(255,0,0);    stroke(255,0,0);    rect(bulletX+30, bulletY+140, bulletW, bulletH);  }//tank crash methodboolean crash(Car other){  return (abs(this.tankY-other.cY) <20) && abs(this.tankX-other.cX) <10;}/*boolean shoot (Bullet b, Car c) {  float d = dist(bulletX, bulletY, cX, cY);  if ((d < 5) == true) {    // we have a collision    return true;  } else {    return false;  }}*//*boolean shoot(Car c) {  float d = dist(bulletX, bulletY, cX, cY);  if (d < 5) {    // we have a collision    return true;  } else {    return false;  }}*/}

Viewing all articles
Browse latest Browse all 7188

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>