/****
* Classes
****/
var MoneyDisplay = Container.expand(function () {
var self = Container.call(this);
var moneyGraphics = self.attachAsset('money', {
anchorX: 0.5,
anchorY: 0.5
});
self.amount = 0;
self.updateDisplay = function () {
var moneyText = new Text2(self.amount.toString(), {
size: 150,
fill: "#ffffff"
});
self.addChild(moneyText);
moneyText.setText('Money: ' + self.amount);
};
});
var ScoreDisplay = Container.expand(function () {
var self = Container.call(this);
self.score = 0;
var scoreText = new Text2(self.score.toString(), {
size: 150,
fill: "#ffffff"
});
self.addChild(scoreText);
self.updateDisplay = function () {
scoreText.setText('Score: ' + self.score);
};
});
var Arrow = Container.expand(function () {
var self = Container.call(this);
var arrowGraphics = self.attachAsset('arrow', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 10;
self.move = function () {
self.y -= self.speed;
};
self.isOffScreen = function () {
return self.y < -self.height;
};
});
var Bow = Container.expand(function () {
var self = Container.call(this);
var bowGraphics = self.attachAsset('bow', {
anchorX: 0.5,
anchorY: 0.5
});
self.shoot = function () {
var arrow = new Arrow();
arrow.x = self.x;
arrow.y = self.y;
game.addChild(arrow);
arrows.push(arrow);
};
});
var Target = Container.expand(function () {
var self = Container.call(this);
var targetGraphics = self.attachAsset('target', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = Math.random() * 4 - 2;
self.direction = Math.random() < 0.5 ? -1 : 1;
self.move = function () {
self.x += self.speed * self.direction;
if (self.x < 100 || self.x > 1948) {
self.direction *= -1;
}
};
self.hitTest = function (arrow) {
return self.intersects(arrow);
};
});
var MainMenu = Container.expand(function () {
var self = Container.call(this);
var menuBackground = self.attachAsset('background', {
width: 2048,
height: 2732,
color: 0x000000,
shape: 'box'
});
self.visible = true;
// Define menu items and their actions
var menuItems = {
'startGame': {
text: 'Start Game',
action: function action() {
self.visible = false;
game.visible = true;
}
},
'sales': {
text: 'Sales',
action: function action() {
self.visible = false;
salesMenu.visible = true;
}
}
};
// Create menu items
Object.keys(menuItems).forEach(function (key, index) {
var menuItem = new Text2(menuItems[key].text, {
size: 100,
fill: '#ffffff'
});
menuItem.anchor.set(0.5, 0.5);
menuItem.x = 2048 / 2;
menuItem.y = 200 + index * 150;
self.addChild(menuItem);
menuItem.on('down', menuItems[key].action);
});
});
var SalesMenu = Container.expand(function () {
var self = Container.call(this);
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000,
visible: true
});
/****
* Game Code
****/
var mainMenu = new MainMenu();
var salesMenu = new SalesMenu();
LK.gui.center.addChild(salesMenu);
var background = game.addChild(LK.getAsset('background', {
x: 0,
y: 0
}));
var moneyDisplay = new MoneyDisplay();
LK.gui.top.addChild(moneyDisplay);
moneyDisplay.x = 2048 / 2;
moneyDisplay.y = 50;
var scoreDisplay = new ScoreDisplay();
LK.gui.bottom.addChild(scoreDisplay);
scoreDisplay.x = 2048 / 2;
scoreDisplay.y = 2732 - 50;
var arrows = [];
var targets = [];
var bow = new Bow();
bow.x = 2048 / 2;
bow.y = 2732 - 200;
game.addChild(bow);
// Create targets
function createTargets() {
for (var i = 0; i < 10; i++) {
var target = new Target();
target.x = 2048 / 11 * (i + 1);
target.y = 200;
game.addChild(target);
targets.push(target);
}
}
createTargets();
game.on('down', function (obj) {
var pos = obj.event.getLocalPosition(game);
bow.x = pos.x;
bow.shoot();
});
LK.on('tick', function () {
for (var i = arrows.length - 1; i >= 0; i--) {
var arrow = arrows[i];
arrow.move();
if (arrow.isOffScreen()) {
arrow.destroy();
arrows.splice(i, 1);
} else {
for (var j = targets.length - 1; j >= 0; j--) {
var target = targets[j];
target.move();
if (target.hitTest(arrow)) {
arrow.destroy();
arrows.splice(i, 1);
target.destroy();
targets.splice(j, 1);
break;
}
}
}
}
if (targets.length === 0) {
createTargets();
}
});