User prompt
сделай так что бы когда топор падает мимо, счётчик с наличии топоров прибавился на 1% и можно было использовать
User prompt
сделай так чтобы на десятом уровне голубой фон медленно менялся на оранжевый ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
добавь на заднем плане фон голубого цвета
User prompt
сделай подвижный фон ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
а теперь будут редко появляться специальные цели ярко-зеленого цвета, и они будут давать 150 очков
User prompt
измени поевление 5 на 1
User prompt
Поставь сейчас уровень 5 в начале.
User prompt
на уровне-5 будут редко появляться цели ярко зеленым, и они будут давать 150 очков ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
После одного промаха топоры больше не работают, исправь это.
User prompt
исправь ошибку в коде от которого не работают топоры
User prompt
а теперь сделай так чтобы цели летали так же как враги ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
изменить уровень 10 на 2
User prompt
Сделай так, чтобы на 10 уровне некоторые враги направлялись на топор. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Сохранить исходный код. ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'destroy')' in or related to this line: 'axes[i].destroy();' Line Number: 447
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'destroy')' in or related to this line: 'axes[i].destroy();' Line Number: 446
User prompt
сделай геймплей, спецэффекты и код игры более свежими и новыми ↪💡 Рассмотрите возможность импорта и использования следующих плагинов: @upit/tween.v1 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
поставить на фон музыку чтобы она всегда играла
User prompt
Сделай так чтобы цена "кнопка-2" уменьшалась и убавлялась так же как у "кнопка-1"
User prompt
Исправьте ошибку в коде от которого ломает игру
User prompt
Нажатии любой кнопки не будет активировать бросок топора
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'toString')' in or related to this line: 'var button2PriceTxt = new Text2(button2Cost.toString(), {' Line Number: 160
User prompt
"кнопка-2" будет работать так что при нажатии, счётчик с наличии топоров будет прибавляться на 5 наличий топоров, одна нажачие кнопки "кнопка-2" будет стоить 50 очков, Но с каждой нажатии кнопка будет прибавлятся на 50%
User prompt
А теперь переместите оба кнопки вниз
User prompt
Добавь новую кнопку "кнопка-2" и перемести его сверху рядом с кнопкой "кнопка-1"
/****
* Classes
****/
var Axe = Container.expand(function () {
var self = Container.call(this);
var axeGraphics = self.attachAsset('axe', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 40;
self.gravity = 0.3; // Adjusted gravity effect
self.velocityY = -self.speed; // Initial upward velocity
self._move_migrated = function () {
self.velocityY += self.gravity; // Apply gravity to velocity
self.y += self.velocityY; // Update position with velocity
self.rotation += 0.1;
};
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.direction = 1;
self.scaleFactor = 0.1; // Initial small scale
self.growthRate = 0.01; // Rate at which the enemy grows
self._move_migrated = function () {
// Randomize direction change
if (Math.random() < 0.05) {
self.direction = Math.random() * 2 * Math.PI; // Random angle
}
// Update position based on direction
self.x += self.speed * Math.cos(self.direction);
self.y += self.speed * Math.sin(self.direction);
// Keep enemy within bounds
if (self.x <= 0 || self.x >= 2048) {
self.direction = Math.PI - self.direction; // Reflect horizontally
}
if (self.y <= 0 || self.y >= 2732) {
self.direction = -self.direction; // Reflect vertically
}
// Increase size until normal size is reached
if (self.scaleFactor < 1) {
self.scaleFactor += self.growthRate;
self.scale.set(self.scaleFactor, self.scaleFactor);
}
};
});
var Target = Container.expand(function () {
var self = Container.call(this);
var targetGraphics = self.attachAsset('target', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.direction = 1;
self._move_migrated = function () {
self.x += self.speed * self.direction;
if (self.x <= 0 || self.x >= 2048) {
self.direction *= -1;
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var background = game.attachAsset('green_grass_field', {});
background.width = 2048;
background.height = 2732;
var targets = [];
var axes = [];
var score = 0;
var kills = 0;
var level = 1;
var levelTxt = new Text2('Level: 1', {
size: 100,
fill: 0xFFFFFF,
font: "Impact",
dropShadow: true,
dropShadowColor: 0x000000
});
levelTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(levelTxt);
var targetSpeed = 5;
var enemies = [];
var scoreTxt = new Text2('0', {
size: 150,
fill: 0xFFFFFF,
font: "Impact",
dropShadow: true,
dropShadowColor: 0x000000
});
scoreTxt.anchor.set(.5, 0);
LK.gui.top.addChild(scoreTxt);
// Add axe counter display at bottom left
var axeCount = 5;
var axeCountTxt = new Text2('Axes: ' + axeCount, {
size: 100,
fill: 0xFFFFFF,
font: "Impact",
dropShadow: true,
dropShadowColor: 0x000000
});
axeCountTxt.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(axeCountTxt);
// Add button-1 to the top right corner
var button1 = game.attachAsset('button-1', {
anchorX: 1.0,
anchorY: 0.0,
x: 2048,
y: 0
});
game.addChild(button1);
// Add button-2 next to button-1 at the top
var button2 = game.attachAsset('button-2', {
anchorX: 1.0,
anchorY: 0.0,
x: 2048 - 310,
y: 0
});
game.addChild(button2);
// Initialize button cost
var buttonCost = 100;
// Display the price next to button-1
var buttonPriceTxt = new Text2(buttonCost.toString(), {
size: 100,
fill: 0xFF0000,
font: "Impact",
dropShadow: true,
dropShadowColor: 0x000000
});
buttonPriceTxt.anchor.set(1, 0);
buttonPriceTxt.x = button1.x - button1.width / 2;
buttonPriceTxt.y = button1.y + button1.height / 2;
game.addChild(buttonPriceTxt);
// Initialize button cost
var buttonCost = 100;
// Add event listener for button-1
button1.down = function (x, y, obj) {
if (score >= buttonCost) {
// Play button sound
LK.getSound('button-1').play();
// Shrink button
button1.scale.set(0.9, 0.9);
LK.setTimeout(function () {
// Expand button back to normal size
button1.scale.set(1.0, 1.0);
}, 100);
score -= buttonCost;
scoreTxt.setText(score);
buttonCost += 50;
buttonPriceTxt.setText(buttonCost.toString());
// Vaporize enemies with spinning and falling effect
for (var i = 0; i < enemies.length; i++) {
(function (enemy) {
var _spinAndFall = function spinAndFall() {
enemy.rotation += 0.1;
enemy.speed = (enemy.speed || 10) * 1.05; // Increase speed by 5% each frame
enemy.y += enemy.speed;
if (enemy.y > 2732) {
enemy.destroy();
} else {
LK.setTimeout(_spinAndFall, 16);
}
};
_spinAndFall();
})(enemies[i]);
}
enemies = [];
}
};
var spawnTargets = function spawnTargets() {
for (var i = 0; i < 3; i++) {
var target = game.addChild(new Target());
target.speed = targetSpeed;
target.x = Math.random() * 2048;
target.y = Math.random() * (2732 - target.height * 2);
targets.push(target);
}
for (var i = 0; i < 1; i++) {
var enemy = game.addChild(new Enemy());
enemy.speed = targetSpeed;
enemy.x = Math.random() * 2048;
enemy.y = Math.random() * (2732 - enemy.height * 2);
enemies.push(enemy);
}
};
LK.on('tick', function () {
if (targets.length == 0) {
spawnTargets();
}
});
var axe;
var axeActive = false;
var axeCooldown = false;
game.on('down', function (x, y, obj) {
if (axeActive || axeCooldown || axeCount <= 0) return;
var pos = game.toLocal(obj.global);
axe = game.addChild(new Axe());
LK.getSound('axe').play();
axe.x = pos.x;
axe.y = 2732 - axe.height + 295;
axes.push(axe);
axeActive = true;
axeCooldown = true;
axeCount--;
axeCountTxt.setText('Axes: ' + axeCount);
LK.setTimeout(function () {
axeCooldown = false;
}, 1000);
});
LK.on('tick', function () {
for (var i = 0; i < targets.length; i++) {
targets[i]._move_migrated();
}
for (var i = 0; i < axes.length; i++) {
axes[i]._move_migrated();
if (axes[i].y < -50) {
axes[i].destroy();
axes.splice(i, 1);
axeActive = false;
// Reset cooldown if axe is gone before 1s
axeCooldown = false;
}
if (axes[i] && axes[i].y <= 0) {
LK.showGameOver();
axeActive = false;
axeCooldown = false;
}
}
for (var i = 0; i < enemies.length; i++) {
enemies[i]._move_migrated();
for (var j = 0; j < axes.length; j++) {
if (axes[j].intersects(enemies[i])) {
axeActive = false;
axeCooldown = false;
LK.showGameOver();
return;
}
}
}
for (var i = 0; i < axes.length; i++) {
for (var j = 0; j < targets.length; j++) {
if (axes[i].intersects(targets[j])) {
var distance = Math.sqrt(Math.pow(axes[i].x - targets[j].x, 2) + Math.pow(axes[i].y - targets[j].y, 2));
score += Math.max(0, 100 - distance) + 50;
scoreTxt.setText(score);
axes[i].destroy();
axes.splice(i, 1);
axeActive = false;
axeCooldown = false;
targets[j].destroy();
targets.splice(j, 1);
kills++;
if (kills % 3 == 0) {
targetSpeed += 1;
level++;
levelTxt.setText('Level: ' + level);
}
break;
}
}
}
}); /****
* Classes
****/
var Axe = Container.expand(function () {
var self = Container.call(this);
var axeGraphics = self.attachAsset('axe', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 40;
self.gravity = 0.3; // Adjusted gravity effect
self.velocityY = -self.speed; // Initial upward velocity
self._move_migrated = function () {
self.velocityY += self.gravity; // Apply gravity to velocity
self.y += self.velocityY; // Update position with velocity
self.rotation += 0.1;
};
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.direction = 1;
self.scaleFactor = 0.1; // Initial small scale
self.growthRate = 0.01; // Rate at which the enemy grows
self._move_migrated = function () {
// Randomize direction change
if (Math.random() < 0.05) {
self.direction = Math.random() * 2 * Math.PI; // Random angle
}
// Update position based on direction
self.x += self.speed * Math.cos(self.direction);
self.y += self.speed * Math.sin(self.direction);
// Keep enemy within bounds
if (self.x <= 0 || self.x >= 2048) {
self.direction = Math.PI - self.direction; // Reflect horizontally
}
if (self.y <= 0 || self.y >= 2732) {
self.direction = -self.direction; // Reflect vertically
}
// Increase size until normal size is reached
if (self.scaleFactor < 1) {
self.scaleFactor += self.growthRate;
self.scale.set(self.scaleFactor, self.scaleFactor);
}
};
});
var Target = Container.expand(function () {
var self = Container.call(this);
var targetGraphics = self.attachAsset('target', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.direction = 1;
self._move_migrated = function () {
self.x += self.speed * self.direction;
if (self.x <= 0 || self.x >= 2048) {
self.direction *= -1;
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var background = game.attachAsset('green_grass_field', {});
background.width = 2048;
background.height = 2732;
var targets = [];
var axes = [];
var score = 0;
var kills = 0;
var level = 1;
var levelTxt = new Text2('Level: 1', {
size: 100,
fill: 0xFFFFFF,
font: "Impact",
dropShadow: true,
dropShadowColor: 0x000000
});
levelTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(levelTxt);
var targetSpeed = 5;
var enemies = [];
var scoreTxt = new Text2('0', {
size: 150,
fill: 0xFFFFFF,
font: "Impact",
dropShadow: true,
dropShadowColor: 0x000000
});
scoreTxt.anchor.set(.5, 0);
LK.gui.top.addChild(scoreTxt);
// Add axe counter display at bottom left
var axeCount = 5;
var axeCountTxt = new Text2('Axes: ' + axeCount, {
size: 100,
fill: 0xFFFFFF,
font: "Impact",
dropShadow: true,
dropShadowColor: 0x000000
});
axeCountTxt.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(axeCountTxt);
// Add button-1 to the top right corner
var button1 = game.attachAsset('button-1', {
anchorX: 1.0,
anchorY: 0.0,
x: 2048,
y: 0
});
game.addChild(button1);
// Add button-2 next to button-1 at the top
var button2 = game.attachAsset('button-2', {
anchorX: 1.0,
anchorY: 0.0,
x: 2048 - 310,
y: 0
});
game.addChild(button2);
// Initialize button cost
var buttonCost = 100;
// Display the price next to button-1
var buttonPriceTxt = new Text2(buttonCost.toString(), {
size: 100,
fill: 0xFF0000,
font: "Impact",
dropShadow: true,
dropShadowColor: 0x000000
});
buttonPriceTxt.anchor.set(1, 0);
buttonPriceTxt.x = button1.x - button1.width / 2;
buttonPriceTxt.y = button1.y + button1.height / 2;
game.addChild(buttonPriceTxt);
// Initialize button cost
var buttonCost = 100;
// Add event listener for button-1
button1.down = function (x, y, obj) {
if (score >= buttonCost) {
// Play button sound
LK.getSound('button-1').play();
// Shrink button
button1.scale.set(0.9, 0.9);
LK.setTimeout(function () {
// Expand button back to normal size
button1.scale.set(1.0, 1.0);
}, 100);
score -= buttonCost;
scoreTxt.setText(score);
buttonCost += 50;
buttonPriceTxt.setText(buttonCost.toString());
// Vaporize enemies with spinning and falling effect
for (var i = 0; i < enemies.length; i++) {
(function (enemy) {
var _spinAndFall = function spinAndFall() {
enemy.rotation += 0.1;
enemy.speed = (enemy.speed || 10) * 1.05; // Increase speed by 5% each frame
enemy.y += enemy.speed;
if (enemy.y > 2732) {
enemy.destroy();
} else {
LK.setTimeout(_spinAndFall, 16);
}
};
_spinAndFall();
})(enemies[i]);
}
enemies = [];
}
};
var spawnTargets = function spawnTargets() {
for (var i = 0; i < 3; i++) {
var target = game.addChild(new Target());
target.speed = targetSpeed;
target.x = Math.random() * 2048;
target.y = Math.random() * (2732 - target.height * 2);
targets.push(target);
}
for (var i = 0; i < 1; i++) {
var enemy = game.addChild(new Enemy());
enemy.speed = targetSpeed;
enemy.x = Math.random() * 2048;
enemy.y = Math.random() * (2732 - enemy.height * 2);
enemies.push(enemy);
}
};
LK.on('tick', function () {
if (targets.length == 0) {
spawnTargets();
}
});
var axe;
var axeActive = false;
var axeCooldown = false;
game.on('down', function (x, y, obj) {
if (axeActive || axeCooldown || axeCount <= 0) return;
var pos = game.toLocal(obj.global);
axe = game.addChild(new Axe());
LK.getSound('axe').play();
axe.x = pos.x;
axe.y = 2732 - axe.height + 295;
axes.push(axe);
axeActive = true;
axeCooldown = true;
axeCount--;
axeCountTxt.setText('Axes: ' + axeCount);
LK.setTimeout(function () {
axeCooldown = false;
}, 1000);
});
LK.on('tick', function () {
for (var i = 0; i < targets.length; i++) {
targets[i]._move_migrated();
}
for (var i = 0; i < axes.length; i++) {
axes[i]._move_migrated();
if (axes[i].y < -50) {
axes[i].destroy();
axes.splice(i, 1);
axeActive = false;
// Reset cooldown if axe is gone before 1s
axeCooldown = false;
}
if (axes[i] && axes[i].y <= 0) {
LK.showGameOver();
axeActive = false;
axeCooldown = false;
}
}
for (var i = 0; i < enemies.length; i++) {
enemies[i]._move_migrated();
for (var j = 0; j < axes.length; j++) {
if (axes[j].intersects(enemies[i])) {
axeActive = false;
axeCooldown = false;
LK.showGameOver();
return;
}
}
}
for (var i = 0; i < axes.length; i++) {
for (var j = 0; j < targets.length; j++) {
if (axes[i].intersects(targets[j])) {
var distance = Math.sqrt(Math.pow(axes[i].x - targets[j].x, 2) + Math.pow(axes[i].y - targets[j].y, 2));
score += Math.max(0, 100 - distance) + 50;
scoreTxt.setText(score);
axes[i].destroy();
axes.splice(i, 1);
axeActive = false;
axeCooldown = false;
targets[j].destroy();
targets.splice(j, 1);
kills++;
if (kills % 3 == 0) {
targetSpeed += 1;
level++;
levelTxt.setText('Level: ' + level);
}
break;
}
}
}
});