見出し画像

【WoofJS】ラスボスを倒せ


Play demo


サンプルコード


setBackdropURL("./docs/images/boss-backdrop.jpg")
setBackdropStyle("cover")


var ship = new Image({
  url:"./docs/images/boss-ship.png",
  width : 70,
  height : 70,
  x: 0,
  y: minY +30
})


forever(() => {
  if(keysDown.includes('UP')){
    ship.y +=5;
  }
  if(keysDown.includes('DOWN')){
    ship.y -=5;
  }
  if(keysDown.includes('RIGHT')){
    ship.x +=5;
  }
  if(keysDown.includes('LEFT')){
    ship.x -=5;
  } 
})


forever(() => {
  if(ship.x > maxX){
    ship.x = maxX  
  }
  if(ship.x < minX){
    ship.x = minX  
  }
  
  if(ship.y > maxY){
    ship.y = maxY  
  }
  if(ship.y < minY){
    ship.y = minY  
  }
})



var lasers =[]
forever(() => {
  if(keysDown.includes('SPACE')){
    var laser= new Image({
      url: "./docs/images/boss-laser.png",
      height: 50,
      x: ship.x,
      y: ship.y,
      rotationStyle: "NO ROTATE"
    })
    laser.showing = false;
    lasers.push(laser);
  }
})


forever(() => {
  lasers.forEach(laser => {
    laser.y +=5;
    laser.showing = true;
    if (laser.y > maxY){
      laser.showing = false;
    }
    if(laser.touching(boss)){
      laser.setImageURL("./docs/images/explosion.png")
      laser.width = 60
      laser.height = 60
      bossHealth -=1;
      after(0.1,"second",()=>
            laser.delete()
      );
    }
  })
})



var boss = new Image({
  url: "./docs/images/boss-boss.png",
  width: 200,
  height: 200,
  x:0,
  y:maxY - 120,
  rotationStyle:"NO ROTATE"
})


forever(() => {
  boss.move(1)
  if(boss.x > maxX){
    boss.angle = -180;
  }
  if(boss.x < minX){
    boss.angle = 0;
  }
})



var health = 20;
var bossHealth = new Text({
  x: minX +50,
  y: minY +10,
  size: 30,
  color: "white",
  text:() => "HP:" + health
})



var bossHealth = 5000;
var bbossHealth = new Text({
  x:minX +100,
  y:maxY -30,
  size: 30,
  color: "white",
  text:  ()=> "BOSS:" + bossHealth
})



forever(() => {
  if(ship.touching(boss)){
    health -=15;
  }
})



var bombs =[]
every(4, 'second', () => {
  var bomb = new Image({
    url: "./docs/images/boss-bomb.png",
    width: 20,
    height: 20,
    x:boss.x,
    y:boss.y  
  }) 
  bombs.push(bomb);
})


forever(() => {
  bombs.forEach(bomb => {
    bomb.y -=5
    if(bomb.y < minY){
      bomb.delete();
    }
    if(bomb.touching(ship)){
      health -=2;
      bomb.delete();
  }
  })
})



var missiles =[]
every(4, 'second', () => {
  var missile = new Image({
    url: "./docs/images/platformer-enemy.png",
    width: 20,
    height: 20,
    x:boss.x,
    y:boss.y,
  })
  missile.pointTowards(ship.x,ship.y);
  missiles.push(missile);
})


forever(() => {
  missiles.forEach(missile => {
   missile.move(5.5);
    if(missile.y < minY){
      missile.delete();
    }
    if(missile.touching(ship)){
      health -=3;
      missile.delete();
    }   
  })  
})



var shots =[]
every(1, 'second', () => {
  var shot = new Image({
    url: "./docs/images/candyland-mint.png",
    width: 15,
    height: 15,
    x:boss.x,
    y:boss.y
  })
  shots.push(shot)
})


forever(() => {
  shots.forEach(shot => {
  shot.y -=3;
    if(shot.touching(ship)){
      health -=1;
      shot.delete();   
    }
  })
})



var blaser = new Image({
  url: "./docs/images/boss-blaser.png",
  width: 60,
  height: 500,
})

blaser.showing = false;

forever(() => {
  blaser.x =boss.x;
  blaser.y = boss.y -300;
})



var timer = 0;
every(1, 'second', () => {
  timer = timer+1;
})



var warning = new Image({
  url : "./docs/images/boss-warning.jpg",
  width: 200,
  height: 160,
  x: 0,
  y: 0,  
})
warning.showing= false;


forever(() => {
  if(timer == 7){
    warning.showing =true;   
  }
 
  if(timer == 10){
    blaser.showing = true;
    warning.showing = false;  
    
    after(3, 'second', () => {
    blaser.showing =false;
    timer =0;
    })    
  }
  
  if(blaser.touching(ship)){
    health -=5;
  }
})



var screenWipes =3;
var wipeText = new Text({
  x: maxX -70,
  y: minY +10,
  size: 30,
  color: "white",
  text: ()=> "Bombs:" +screenWipes 
})



onKeyDown(() => {
  if(screenWipes > 0 && keysDown.includes('S')){
    screenWipes -=1;
    shots.forEach(shot => shot.delete())
    missiles.forEach(missile => missile.delete())
    bombs.forEach(bomb => bomb.delete())
    blaser.showing = false;
    timer =0
    setBackdropColor("white")
    after(0.2, 'second', () => {
      setBackdropURL("./docs/images/boss-backdrop.jpg")
    })     
  }
})



var gameOver = new Image({
  url: "./docs/images/rr-gameover.png",
  width : 300,
  height: 270,
  x: 0,
  y: 0
})
gameOver.showing = false;


forever(() => {
  if(health <= 0){
    gameOver.showing = true;
    freeze();    
  }
})



var youWin = new Image({
  url: "./docs/images/platformer-you-win.png",
  width: 110,
  height: 110    
})
youWin.showing = false;



forever(() => {
  if(bossHealth <= 0){
    youWin.showing = true;
    boss.setImageURL("./docs/images/explosion.png")
    freeze();
    }
})

この記事が気に入ったらサポートをしてみませんか?