Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
6.4 kB
2
Indexable
Never
import kaboom from "kaboom"

// initialize context
kaboom({
  global: true,
  fullscreen: true,
  scale: 1,
  debug: true,
  background: [145, 193, 249]
})
const MOVE_SPEED = 120
const ENEMY_MOVESPEED = 30
let current_speed = ENEMY_MOVESPEED
const bullet_speed = 400
//ladataan spritet ja palikat
loadPedit("wall-top-bot", "sprites/wall-top-bot.pedit");
loadPedit("player", "sprites/player.pedit");
loadPedit("cloud-wall", "sprites/cloud-wall.pedit");
loadPedit("door", "sprites/door.pedit");
loadPedit("bush-wall", "sprites/bush-wall.pedit");
loadPedit("mysterious-figure", "sprites/mysterious-figure.pedit");
loadPedit("monster", "sprites/monster.pedit");
loadPedit("bullet", "sprites/bullet.pedit");
loadPedit("key", "sprites/key.pedit");
loadPedit("mysterious-figure2", "sprites/mysterious-figure2.pedit");
loadPedit("arrow", "sprites/arrow.pedit");
loadPedit("bg", "sprites/back.pedit");
scene("game", ({ level, score }) => {
  layers(['bg', 'obj', 'ui'], 'obj')
//Tasot
  const maps = [
    [
      'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
      'x   b   b        b   b        b       b  b b b   x',
      'x b b bbb bbbbbb b b bbb bbbb b bbbbb b  b b  bbbx',
      'x b c b b bbbb   bmb b b c b  b  c  b c  b  b    a',
      'xbb bbb b c   bb bbb bbb bbb bb bbb b bb b b  bbbx',
      '        b bbb b  c   b   b   bb b b b bbbb b bb  x',
      'xbb b b b  b  b  bbb bbb bb b   b b b b          x',
      'x   b b bb b b  bb b b b    b bbb   b b bbb bbbb x',
      'x bb  bc   d b bbbbb bbb bb b bb bb b   b b b b  x',
      'x    b  bb b b     b     bbc  bb c  b bbbc  b    x',
      'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    ],
    [
      'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
      'x       c  b b   b b       b     b    b   x',
      'x bbb bbbb b bbb bbb bbbb b  bbb bbbb bbb x',
      'x b b b    b b b c   b  b b b  b   bb b b x',
      'xbb  bb bb b b b bbb b  b b b   bb  b     x',
      '   b  b bb b b b b b b    b   b b  b  bbb x',
      'x  bb b bb   b c   bbbbbb b bb  b bb bbbb x',
      'x       bb b b bbb   b  b   b  b c   b    x',
      'x bbbbb bb bbb   bbb b bbbb bbbb bbb b bbbx',
      'x   bc  b  c    b    b      b      b b  n x',
      'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    ]

  ]
  const levelCfg = {
    width: 48,
    height: 48,
    'x': () => [sprite('cloud-wall'), solid(), 'wall', area(), scale(1.6)],
    'a': () => [sprite('door'), 'next-level', solid(), area(), scale(2)],
    'b': () => [sprite('bush-wall'), solid(), area(), scale(1.5), 'wall'],
    'd': () => [sprite('bush-wall'), solid(), area(), scale(1.5), 'wall'],
    'v': () => [sprite('mysterious-figure'), solid(), area(), scale(1.5)],
    'c': () => [sprite('monster'), area(), 'dangerous', {dir: -1 }, scale(1.3)],
    'n': () => [sprite('mysterious-figure2'), 'friendly', area(), scale(2),],
    'g': () => [sprite('arrow'), scale(4)],
    'm': () => [sprite('key'), 'key', area(), scale(1.5)],
  }

  addLevel(maps[level], levelCfg)

  add([sprite('bg'), layer('bg'), scale(50)])
//pistemäärä -teksti
  const scoreLabel = add([
    text(score, { font: "sink" }),
    pos(30, 3),
    scale(2),
    layer('ui'),
    {
      value: score,
    }
  ])
  //Taso -teksti
  add([text('level ' + parseInt(level + 1), { font: "sink" }), pos(50, 3), scale(2)])
//Pelaajan muuttujat
  const player = add([
    sprite('player'),
    solid(),
    area(),
    scale(1.2),
    pos(20, 250)
  ])
  //kun pelaaja osuu avaimeen, avain häviää
  let hasKey = false
  player.collides('key', (key) => {
    destroy(key)
    hasKey = true
  })
  //Kun pelaajalla on avain ja osuu oveen, menee seuraavaan tasoon
  player.collides('next-level', () => {
    if (hasKey) {
      if(level + 1 < maps.length) {
        go('game', {
          level: (level + 1) % maps.length,
          score: scoreLabel.value
        })
      }
    }
  })
  //kun pelaaja osuu kaveriin, peli päättyy ja voittaa
  player.collides('friendly', () => {
    go("win", { score: scoreLabel.value })
  })
  //Kun pelaaja painaa "oikeaa nuolinäppäintä", liikkuu oikealle
  keyDown('right', () => {
    player.move(MOVE_SPEED, 0)
  })
  //Kun pelaaja painaa "vasen nuolinäppäintä", liikkuu vasemmalle
  keyDown('left', () => {
    player.move(-MOVE_SPEED, 0)
  })
  //Kun pelaaja painaa "ylös nuolinäppäintä", liikkuu ylöspäin
  keyDown('up', () => {
    player.move(0, -MOVE_SPEED)
  })
  //Kun pelaaja painaa "alas nuolinäppäintä", liikkuu alaspäin
  keyDown('down', () => {
    player.move(0, MOVE_SPEED)
  })
  //Kamera liikkuu pelaajan mukana
  player.action(() => {
    camPos(player.pos)
  })
  //Pistetään viholliset liikkumaan
  action('dangerous', (d) => {
    d.move(d.dir * ENEMY_MOVESPEED, 0)
  })
  //Kun hirviö osuu seinään..
  collides('dangerous', 'wall', (d) => {
    d.dir = -d.dir
  })
  //Luodaan ammus
  function spawnBullet(p) {
    add([
      sprite('bullet'),
      pos(p),
      origin('center'),
      area(),
      scale(1.3),
      "bullet"
    ])
  }
  //Kun painetaan 'välilyöntiä'..
  keyPress('space', () => {
    spawnBullet(player.pos.add(25, 25)) //..hahmo ampuu luodin
  })
  //Kun luoti ammutaan, se lähtee liikkeelle
  action("bullet", (b) => {
    b.move(bullet_speed, 0)
    if (b.pos.y < 0) {
      destroy(b) //Tuhotaan luoti kun ei ole peliruudulla
    }
  })
  //Kun ammus osuu hirviöön, molemmat katoavat ja pelaaja saa pisteen
  onCollide("bullet", "dangerous", (b, s) => {
    destroy(b)
    destroy(s)
    scoreLabel.value++
    scoreLabel.text = scoreLabel.value
  })
  //Kun pelaaja osuu viholliseen, pelaaja kuolee ja häviää
  player.collides('dangerous', (d) => {
    go('lose', { score: scoreLabel.value })
  })
  //Häviämisruutu
  scene('lose', () => {
    add([
      text("GAME OVER! SCORE: " + scoreLabel.value, { size: 35, font: "sink" }),
      pos(width() / 2, height() / 2),
      origin("center"),
      layer("ui"),
    ])
  })
  //voittoruutu
  scene("win", () => {
    add([
      text("CONGRATULATIONS! SCORE: " + scoreLabel.value, { size: 20, font: "sink" }),
      pos(width() / 2, height() / 2),
      origin("center"),
      layer("ui"),
    ])
  })
})
//aloittaa pelin
go("game", { level: 0, score: 0 })