/****
* Classes
****/
var Debris = Container.expand(function () {
var self = Container.call(this);
var debrisGraphics = self.createAsset('debris', 'Debris graphics', 0.5, 0.5);
self.speed = Math.random() * 5 + 2;
self.direction = {
x: Math.random() * 2 - 1,
y: Math.random() * 2 - 1
};
self.move = function () {
self.x += self.direction.x * self.speed;
self.y += self.direction.y * self.speed;
self.speed *= 0.98; // Debris slows down over time
if (self.speed < 0.5) {
self.destroy(); // Destroy debris when it's slow enough
}
};
});
var Meteorite = Container.expand(function () {
var self = Container.call(this);
var meteoriteGraphics = self.createAsset('meteorite', 'Meteorite graphics', 0.5, 0.5);
self.speed = Math.random() * 5 + 3;
self.direction = {
x: Math.random() * 2 - 1,
y: Math.random() * 2 - 1
};
self.move = function () {
self.x += self.direction.x * self.speed;
self.y += self.direction.y * self.speed;
};
});
var Star = Container.expand(function () {
var self = Container.call(this);
var starGraphics = self.createAsset('star', 'Star graphics', 0.5, 0.5);
self.speed = Math.random() * 5 + 1;
self.move = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = -self.height;
self.x = Math.random() * 2048;
self.speed = Math.random() * 5 + 1;
}
};
});
var Santa = Container.expand(function () {
var self = Container.call(this);
var santaGraphics = self.createAsset('santa', 'Santa character', .5, .5);
self.speed = 10;
self.jump = function () {
if (!this.hasJumped) {
this.direction = {
x: Math.sin(self.rotation),
y: -Math.cos(self.rotation)
};
this.hasJumped = true;
this.firstJump = true;
}
};
self.hasJumped = false;
self.firstJump = false;
self.score = 0;
self.lastHouse = null;
self.scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff",
weight: 800,
dropShadow: true,
dropShadowColor: '#000000',
dropShadowBlur: 4,
dropShadowAngle: Math.PI / 6,
dropShadowDistance: 6
});
self.scoreTxt.anchor.set(.5, 0);
LK.gui.topCenter.addChild(self.scoreTxt);
self.move = function (houses) {
if (self.hasJumped) {
self.x += self.direction.x * self.speed;
self.y += self.direction.y * self.speed;
for (var i = 0; i < houses.length; i++) {
var dx = self.x - houses[i].x;
var dy = self.y - houses[i].y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < santaGraphics.width / 2 + houses[i].width / 2 && houses[i] !== self.lastHouse) {
self.hasJumped = false;
self.lastHouse = houses[i];
self.currentHouse = houses[i];
self.rotationOffset = Math.atan2(dy, dx) - houses[i].rotation;
self.score += 1;
self.scoreTxt.setText(self.score);
if (!houses[i].bomb) {
houses[i].bomb = new Bomb();
houses[i].addChild(houses[i].bomb);
houses[i].bomb.startTimer();
}
break;
}
}
}
if (!self.hasJumped && self.currentHouse) {
var angle = self.currentHouse.rotation + self.rotationOffset;
self.x = self.currentHouse.x + Math.cos(angle) * (self.currentHouse.width / 2 + santaGraphics.height / 2);
self.y = self.currentHouse.y + Math.sin(angle) * (self.currentHouse.width / 2 + santaGraphics.height / 2);
self.rotation = angle + Math.PI / 2;
}
};
});
var House = Container.expand(function () {
var self = Container.call(this);
var randomHouseIndex = Math.floor(Math.random() * houseAssets.length);
var houseGraphics = self.createAsset(houseAssets[randomHouseIndex], 'House object', .5, .5);
self.rotationStep = Math.random() * 0.02 - 0.01;
if (self.rotationStep > 0 && self.rotationStep < 0.01) {
self.rotationStep = 0.01;
}
if (self.rotationStep < 0 && self.rotationStep > -0.01) {
self.rotationStep = -0.01;
}
});
var Bomb = Container.expand(function () {
var self = Container.call(this);
var bombGraphics = self.createAsset('bomb', 'Bomb graphics', 0.5, 0.5);
self.timer = null;
self.explode = function () {
// Explosion effect can be added here
var meteorites = self.parent.children.filter(function (child) {
return child instanceof Meteorite && self.intersects(child);
});
meteorites.forEach(function (meteorite) {
for (var i = 0; i < 5; i++) {
// Create 5 debris particles
var debris = new Debris();
debris.x = meteorite.x;
debris.y = meteorite.y;
self.parent.addChild(debris);
}
meteorite.destroy(); // Destroy the meteorite
});
// self.destroy(); // Do not destroy the bomb after explosion
};
self.startTimer = function () {
self.timer = LK.setTimeout(self.explode, 15000);
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var gameContainer = new Container();
game.addChild(gameContainer);
var stars = [];
game.spawnStar = function () {
var newStar = new Star();
newStar.x = Math.random() * 2048;
newStar.y = Math.random() * 2732;
gameContainer.addChildAt(newStar, gameContainer.children.length > 1 ? 1 : 0);
};
for (var i = 0; i < 50; i++) {
game.spawnStar();
}
var houseAssets = ['house1', 'house2', 'house3', 'house4', 'house5', 'house6', 'house7', 'house8', 'house9', 'house10'];
var background = game.createAsset('background', 'Background image', .5, .5);
background.x = 2048 / 2;
background.y = 2732 / 2;
background.speed = 2;
background.move = function () {
this.y += this.speed;
if (this.y >= 2732) {
this.y = 0;
}
};
game.addChildAt(background, 0);
game.setBackgroundColor(0x000000);
var gameContainer = new Container();
game.addChild(gameContainer);
var santa = gameContainer.addChild(new Santa());
santa.x = 2048 / 2;
santa.y = 2732 - 300;
var houses = [];
var houseSpeed = -2;
game.spawnHouse = function () {
var newHouse = new House();
newHouse.rotation = Math.random() * Math.PI * 2;
newHouse.scale.set(Math.random() * 0.5 + 0.5);
if (houses.length === 0) {
newHouse.x = 2048 / 2;
newHouse.y = 2732 / 2;
} else {
var lastHouseY = houses[houses.length - 1].y;
var gameHeightThird = 2732 / 3;
newHouse.y = lastHouseY - (Math.random() * gameHeightThird + gameHeightThird);
newHouse.x = Math.random() * (2048 - 600) + 300;
}
houses.push(newHouse);
gameContainer.addChildAt(newHouse, 0);
};
game.spawnStar = function () {
var newStar = new Star();
newStar.x = Math.random() * 2048;
newStar.y = Math.random() * 2732;
gameContainer.addChildAt(newStar, 1);
};
var isGameOver = false;
for (var i = 0; i < 8; i++) {
game.spawnHouse();
}
game.on('down', function (obj) {
santa.jump();
});
var tickOffset = 0;
LK.on('tick', function () {
if (isGameOver) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
} else {
background.move();
santa.move(houses);
for (var s = 0; s < gameContainer.children.length; s++) {
if (gameContainer.children[s] instanceof Star) {
gameContainer.children[s].move();
}
}
}
for (var a = houses.length - 1; a >= 0; a--) {
if (santa.firstJump) {
houses[a].y -= houseSpeed;
}
houses[a].rotation += houses[a].rotationStep;
if (houses[a].x < -50 || houses[a].y > 2732 + houses[a].height) {
houses[a].destroy();
houses.splice(a, 1);
game.spawnHouse();
}
}
var santaScreenX = santa.x;
var santaScreenY = santa.y + gameContainer.y;
if ((santaScreenX < 0 || santaScreenX > 2048 || santaScreenY < 0) && santa.hasJumped || santa.y > 2732) {
isGameOver = true;
}
});
космонавт. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
астероид. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
красная взрывчатка с таймером. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.