Untitled
unknown
plain_text
2 years ago
6.4 kB
9
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...