Les 13 - Space Invaders


Hier de code voor Space Invaders:


let aliens = []; //lege array om aliens in op te slaan
let kogels = []; //lege array voor kogels
let ruimteSchip;
let gameOver = false;
let victory = false;

function setup() {
  //plaats hier de code die maar ÊÊn keer hoeft te worden uitgevoerd 
  createCanvas(800,600);
  background(0);

  ruimteSchip = new RuimteSchip();

  //maak de eerste 5 aliens aan
  let numAliens = 5;
  for (let i = 0; i < numAliens; i ++) {
    aliens.push(new Alien((width / (numAliens * 2)) + ((width / numAliens) * i),0));
  }
}

function draw() {
  //plaats daar de code die continue herhaald moet worden.
  background(0);

  //spawn nieuwe aliens
  if (frameCount % 180 === 0) {
    spawnAliens();
  }

  //teken de kogels
  for (let i = 0; i < kogels.length; i ++) {
    kogels[i].update();
    kogels[i].teken();
  }

  //teken en update alle aliens
  for (let i = 0; i < aliens.length; i ++) {
    aliens[i].teken();
    aliens[i].update();

    if (aliens[i].y > height) {
      gameOver = true;
    }
  }

  ruimteSchip.teken();

  tekenGameOver();
}

function spawnAliens() {
  //voeg 5 aliens toe  aan het einde van de lijst
  let numAliens = 5;
    for (let i = 0; i < numAliens; i ++) {
      aliens.push(new Alien((width / (numAliens * 2)) + ((width / numAliens) * i),0));
    }
}

function tekenGameOver() {
  if (gameOver === true) {  //als een alien onderaan het scherm komt
    if (frameCount % 30 < 15) {
      //iedere eerste 15 frames van iedere 30 frames, teken zwarte achtergrond
      background(0);
      fill(255,0,0)
    } else {
      //anders teken een rode achtergrond
      background(255,0,0)
      fill(0)
    }
    textSize(48);
    textAlign(CENTER);
    text("GAME OVER", width / 2, height / 2)
    // frameRate(0);
  }
}

function mousePressed() { 
  console.log("Ik klik op de muis", mouseX, mouseY);
  for (let i = 0; i < aliens.length; i ++) {
    //reken de afstand uit tussen de muis en alle aliens
    let afstand = dist(mouseX, mouseY, aliens[i].x, aliens[i].y)
    if (afstand < aliens[i].size / 2) {
      //verwijder deze alien als ie te dichtbij de muis bent
      aliens.splice(i,1);
    }
  }

  kogels.push(new Kogel(mouseX));
}

class RuimteSchip{
  constructor() { 
    this.x = mouseX;
    this.y = height - 50;
    this.radius = 20;
  }

  teken() { 
    fill(0,255,0);
    this.x = mouseX;
    ellipse(this.x, this.y, this.radius)
    // image(spaceShipPlaatje, this.x - 25, this.y,50,50)
  }
}

class Kogel {
  constructor(xPos) {
    this.x = xPos;
    this.y = height - 50;
    this.size = 5;
    this.ySpeed = -5;
    makeNote(80,0.5,10);
  }

  update() { 
    this.y = this.y + this.ySpeed;

    for (let i = 0; i < aliens.length; i ++) {
      //reken de afstand uit tussen de muis en alle aliens
      let afstand = dist(this.x, this.y, aliens[i].x, aliens[i].y)
      if (afstand < aliens[i].size / 2) {
        //verwijder deze alien als ie te dichtbij de muis bent
        aliens.splice(i,1);
        makeNote(50,0.8,20);
      }
    }

  }

  teken() { 
    fill(255,0,0)
    ellipse(this.x, this.y, this.size)
  }
}

class Alien {
  //hier begint de beschrijving van een alien
  constructor(xPos, yPos) {
    //neem de positie aan die je meegegeven is
    this.x = xPos;
    this.y = yPos;
    //kies een grootte
    this.size = 20;
  }

  update() { 
    this.y = this.y + .5;
  }

  teken() {
    rectMode(CENTER);
    fill(255);
    noStroke();
    rect(this.x,this.y,this.size);
    // image(alienPlaatje, this.x,this.y, this.size, this.size)
  }
}