Untitled
unknown
plain_text
2 years ago
6.4 kB
8
Indexable
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 })
Editor is loading...