As the title above, how can i make my random wallImg solid enough so that my birdImg cannot pass through it from any sides of the wallImg?
Here's the code of Processing's Crappy Bird that i've altered so my game will be running upside down instead of sidescrolling.
Any help will be appreciated 

```js
PImage backImg;
PImage birdImg;
PImage wallImg;
PImage startImg;

int gamestate = 1;
int score = 0;
int highScore = 0;
float speed;
boolean moveLeft, moveRight, moveUp, moveDown;

int x = -200;
int y;
int vy = 0;
int wx[] = new int[2];
int wy[] = new int[2];

//initiate and declare
Bird playerBird = new Bird (x, y, vy);

void setup()
{
  size(600,800);
  fill(0);
  textSize(40);
  speed = 2;
  backImg =loadImage("cXaR0vS.png");
  birdImg =loadImage("mw0ai3K.png");
  wallImg =loadImage("4SUsUuc.png");
  startImg=loadImage("U6KEwxe.png");

}

void draw()
{
  if(gamestate == 0) {
    imageMode(CORNER);
    image(backImg, 0, x);
    image(backImg, 0,x-backImg.height);
    x += 6;
    vy += 1;
    y += vy;
    if(x >= 800) x = 0;
    for(int i = 0 ; i < 2; i++) {
      imageMode(CENTER);
      image(wallImg, wy[i] - (wallImg.width/2+100),wx[i]);
      image(wallImg, wy[i] + (wallImg.width/2+100), wx[i]);
      if(wx[i] > 900) {
        wy[i] = (int)random(200,width-200);
        wx[i] = 0;
      }
      if(wx[i] == width/2) highScore = max(++score, highScore);
      if((abs(width/2-wx[i])<25 && abs(y-wy[i])>100))playerBird.y=wy[i];
      wx[i] += 6;
    }
    playerBird.y = y;
    playerBird.drawBird();
    text(""+score, width/2-15, 700);
  }
  else {
    imageMode(CENTER);
    image(startImg, width/2,height/2);
    text("High Score: "+highScore, 50, width);
  }
}

void mousePressed() {
  if(gamestate==1) {
    wx[0] = 400;
    wy[0] = y = width/2;
    wx[1] = 0;
    wy[1] = 600;
    x = gamestate = score = 0;
  }
}
void keyPressed() {
  // vy = -17;
  if(keyCode == UP)
    {
      vy = -17;
    }
  if (key == CODED) {
     if (keyCode == LEFT) {
       moveLeft = true;
     } else if(keyCode == RIGHT) {
       moveRight = true;
     }
  }
}

void keyReleased() {
  vy=-17;
  if (key == CODED) {
     if (keyCode == LEFT) {
       moveLeft = false;
     } else if(keyCode == RIGHT) {
       moveRight = false;
     }
  }
}

//bird class
class Bird
{
  int x;
  int y;
  int vy;
  float speed;
  float xPos;

  //constructor
  Bird(int tempX,int tempY,int tempVy)
  {
    x= tempX;
    y= tempY;
    vy= tempVy;
    speed = 5;
    xPos = width/2;
  }

  void drawBird(){
    image(birdImg, xPos , y); 
    if(moveLeft&&xPos>=20) xPos -= speed;
    if(moveRight&&xPos<=580)xPos += speed;
  }
}
```

---

I manage to get the character to be able to stay on top of the platform 'wallImg' from above but I can't make my character from jumping through the platform from below. Any ideas?

```js
PImage backImg;
PImage birdImg;
PImage wallImg;
PImage startImg;

int gamestate = 1;
int score = 0;
int highScore = 0;
float speed;
boolean moveLeft, moveRight, moveUp, moveDown;
int minX;
int maxX;

int x = -200;
int y;
int vy = 0;
int wx[] = new int[2];
int wy[] = new int[2];

//initiate and declare
Bird playerBird = new Bird (x, y, vy);

void setup()
{
  size(600,800);
  fill(0);
  textSize(40);
  speed = 2;
  backImg =loadImage("cXaR0vS.png");
  birdImg =loadImage("mw0ai3K.png");
  wallImg =loadImage("4SUsUuc.png");
  startImg=loadImage("U6KEwxe.png");

}

void draw()
{
  if(gamestate == 0) {
    imageMode(CORNER);
    image(backImg, 0, x);
    image(backImg, 0,x-backImg.height);
    x += 6;
    vy += 1;
    y += vy;
    if(x >= 800) x = 0;
    for(int i = 0 ; i < 2; i++) {
      imageMode(CENTER);
      image(wallImg, wy[i] - (wallImg.width/2+100),wx[i]);
      image(wallImg, wy[i] + (wallImg.width/2+100), wx[i]);
      if(wx[i] > 900) {
        wy[i] = (int)random(200,width-200);
        wx[i] = 0;
      }
      minX = wy[i] - (wallImg.width/2+400);
      maxX = wy[i] + (wallImg.width/2);
      if(wx[i] == width/2) highScore = max(++score, highScore);

      if((abs(width/2-wy[i])<25 && abs(y-wy[i])>maxX)){
        playerBird.y=wy[i];

      }
      /*COLLISION */
      int collisionTestY1 = wx[i] - 50;
      int collisionTestY2 = wx[i] + 50;
      int collisionTestX1 = wy[i] + 100;
      int collisionTestX2 = wy[i] + (wallImg.width/2);
      int collisionTestXX1 = wy[i] - 100;
      int collisionTestXX2 = wy[i] - (wallImg.width/2);

      if(playerBird.xPos >= collisionTestX1 && playerBird.xPos <= collisionTestX2 && playerBird.y <= collisionTestY2 && playerBird.y >= collisionTestY1){
        vy=0;
        print("lol");
      } 

      if(playerBird.xPos <= collisionTestXX1 && playerBird.xPos >= collisionTestXX2 && playerBird.y <= collisionTestY2 && playerBird.y >= collisionTestY1){
        vy=0;
      }
      //line(collisionTestX1,collisionTestY1,collisionTestX2,collisionTestY1);
      //line(wy[i]-100,wx[i]+10,minX,wx[i]+10);
      //line(wy[i],wx[i],wy[i] - wallImg.width/2,wx[i]);
      wx[i] += 6;
    }
    playerBird.y = y;
    playerBird.drawBird();
    text(""+score, width/2-15, 700);
  }
  else {
    imageMode(CENTER);
    image(startImg, width/2,height/2);
    text("High Score: "+highScore, 50, width);
  }
}
void mousePressed() {
  if(gamestate==1) {
    wx[0] = 400;
    wy[0] = y = width/2;
    wx[1] = 0;
    wy[1] = 600;
    x = gamestate = score = 0;
  }
}
void keyPressed() {
  // vy = -17;
  if(keyCode == UP)
    {
      vy = -17;
    }
  if (key == CODED) {
     if (keyCode == LEFT) {
       moveLeft = true;
     } else if(keyCode == RIGHT) {
       moveRight = true;
     }
  }
} 
void keyReleased() {
  vy=-17;
  if (key == CODED) {
     if (keyCode == LEFT) {
       moveLeft = false;
     } else if(keyCode == RIGHT) {
       moveRight = false;
     }
  }
}
//bird class
class Bird
{
  int x;
  int y;
  int vy;
  float speed;
  float xPos;

  //constructor
  Bird(int tempX,int tempY,int tempVy)
  {
    x= tempX;
    y= tempY;
    vy= tempVy;
    speed = 5;
    xPos = width/2;
  }
  void drawBird(){
    image(birdImg, xPos , y); 
    if(moveLeft&&xPos>=20) xPos -= speed;
    if(moveRight&&xPos<=580)xPos += speed;
  }
}
```