Falling blocks – shooting game

Concept:

I tried to create a first person shooter game with falling blocks that would result in a point when shot .

What went well :

I learned how to use OOP more effectively for both the falling blocks and bullets. I successfully attached a hardware component

What didn’t:

Games are not my strong suit as I couldn’t find a way to make collision detection work in this case.

Took a lot of code to write but couldn’t finish the collision detection.

How to improve:

Either choose a game that doesn’t involve collision detection or work on collision detection first.

import processing.serial.*;
Serial myPort;
int xPos=0;


//code for player and bullet borrowed and modified from
//https://forum.processing.org/two/discussion/26683/trying-to-get-bullets-to-shoot-with-void-mousepressed-but-nothing-happens
final float SPEED = 2; 
final float BULLET_SPEED = 4;
final int ellipse_WIDTH = 50; 
final int ellipse_HEIGHT = 50; 

int centerX, centerY; //width/2; //height/2;
float posX, posY;
float ellipsePos1X, ellipsePos2X, ellipsePos3X;
float ellipsePos3Y;
float bulletDiam = 10;
float bulletX, bulletY;
float x, y;

void setup() {
  size(500, 500);
  printArray(Serial.list());
  String portname=Serial.list()[3];
  println(portname);
  myPort = new Serial(this, portname, 9600);

  centerX = width/2;
  centerY = height/2;
  posX = centerX - ellipse_WIDTH/2;
  posY = height - ellipse_HEIGHT;
  rainFactory(numberOfRainDrops);
}

void draw() {
  background(200);

  drawGun();  
  moveShot();  
  drawShot();
  drawRain();
}


void drawGun() {
  ellipsePos1X = posX;
  ellipsePos2X = posX + ellipse_WIDTH;
  ellipsePos3X = posX + ellipse_WIDTH/2;
  ellipsePos3Y = posY - ellipse_WIDTH;
  fill(255);  
  //ellipse(posX+ellipse_WIDTH/2, posY +ellipse_HEIGHT/2, ellipse_WIDTH, ellipse_HEIGHT);
  ellipse(xPos, posY +ellipse_HEIGHT/2, ellipse_WIDTH, ellipse_HEIGHT);
}

void mousePressed() {
  bulletY = posY;
  bulletX = ellipsePos3X;
}

void drawShot() {
  fill(255, 0, 0);
  rect (xPos, bulletY, bulletDiam, bulletDiam);
}

void moveShot() {
  bulletY = bulletY - BULLET_SPEED;
} 
void serialEvent(Serial myPort) {
  xPos=myPort.read();
}

//___ new tab
int numberOfRainDrops = 10;

Rain[] rainDrops;

void drawRain() {
  for (int i=0; i<rainDrops.length; i++) {
    rainDrops[i].draw();
    rainDrops[i].update();
  };
};

void rainFactory(int quantity) {
  rainDrops = new Rain[quantity];
  for (int i = 0; i < quantity; i++) {
    float x = random(0, width);
    float y = random(0, height);
    float w = 20;
    float h = 40;
    float ySpd= random(2);
    Rain newRain = new Rain(x, y, w, h, ySpd);
    rainDrops[i] = newRain;
  };
  return;
}

class Rain {
  float width_, height_;
  float xPos, yPos, ySpeed;
  //color myColor = color(0);

  Rain(float x, float y, float w, float h, float ySpd) {
    width_ = w;
    height_ = h;
    xPos = x;
    yPos = y;
    ySpeed = ySpd;
  }

  void draw() {
    fill(255);
    rect(xPos, yPos, width_, height_);
  }

  void update() {
    yPos += ySpeed;
    if (yPos > height) {
      fill(0);
      yPos= 0;
    }
  }
}

/*Arduino code
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  int sensor = analogRead(A0);
  delay(1);
  sensor/=4;
  Serial.write(sensor);
}
*/

video of work in progress:

 

3 thoughts on “Falling blocks – shooting game”

Leave a Reply